# mono-api-wapi.html

## Windows Compatibility API

Mono implements a small subset of the Win32 API for some file system interaction, I/O, thread and process operations.

On Windows, Mono uses directly the services provided by the operating system. On other operating system it uses its own implementation (referred to as the "io-layer" or "wapi").

### Windows Compatibility API

`BindIoCompletionCallback`
Syntax
BindIoCompletionCallback

`CloseHandle`
Syntax
CloseHandle

`closesocket`
Syntax
closesocket

`CopyFile`
Syntax
CopyFile

`CreateDirectory`
Syntax
CreateDirectory

`CreateEvent`
Syntax
CreateEvent

`CreateFile`
Syntax
CreateFile

`CreateMutex`
Syntax
CreateMutex

`CreatePipe`
Syntax
CreatePipe

`CreateProcess`
Syntax
CreateProcess

`CreateProcessWithLogonW`
Syntax
CreateProcessWithLogonW

`CreateSemaphore`
Syntax
CreateSemaphore

`CreateThread`
Syntax
CreateThread

`DeleteCriticalSection`
Syntax
DeleteCriticalSection

`DeleteFile`
Syntax
DeleteFile

`DuplicateHandle`
Syntax
DuplicateHandle

`EnterCriticalSection`
Syntax
EnterCriticalSection

`EnumProcesses`
Syntax
EnumProcesses

`EnumProcessModules`
Syntax
EnumProcessModules

`errno_to_WSA`
Syntax
errno_to_WSA

`ExitThread`
Syntax
ExitThread

`FileTimeToSystemTime`
Syntax
FileTimeToSystemTime

`FindClose`
Syntax
FindClose

`FindFirstFile`
Syntax
FindFirstFile

`FindNextFile`
Syntax
FindNextFile

`FlushFileBuffers`
Syntax
FlushFileBuffers

`FormatMessage`
Syntax
FormatMessage

`GetCurrentDirectory`
Syntax
GetCurrentDirectory

`GetCurrentProcess`
Syntax
GetCurrentProcess

`GetCurrentProcessId`
Syntax
GetCurrentProcessId

`GetCurrentThread`
Syntax
GetCurrentThread

`GetCurrentThreadId`
Syntax
GetCurrentThreadId

`GetDiskFreeSpaceEx`
Syntax
GetDiskFreeSpaceEx

`GetDriveType`
Syntax
GetDriveType

`GetExitCodeProcess`
Syntax
GetExitCodeProcess

`GetExitCodeThread`
Syntax
GetExitCodeThread

`GetFileAttributesEx`
Syntax
GetFileAttributesEx

`GetFileAttributes`
Syntax
GetFileAttributes

`GetFileSize`
Syntax
GetFileSize

`GetFileTime`
Syntax
GetFileTime

`GetFileType`
Syntax
GetFileType

`GetFileVersionInfo`
Syntax
GetFileVersionInfo

`GetFileVersionInfoSize`
Syntax
GetFileVersionInfoSize

`GetLastError`
Syntax
GetLastError

`GetLogicalDriveStrings`
Syntax
GetLogicalDriveStrings

`GetModuleBaseName`
Syntax
GetModuleBaseName

`GetModuleFileNameEx`
Syntax
GetModuleFileNameEx

`GetModuleInformation`
Syntax
GetModuleInformation

`GetPriorityClass`
Syntax
GetPriorityClass

`GetProcessId`
Syntax
GetProcessId

`GetProcessTimes`
Syntax
GetProcessTimes

`GetProcessWorkingSetSize`
Syntax
GetProcessWorkingSetSize

`GetStdHandle`
Syntax
GetStdHandle

`GetSystemInfo`
Syntax
GetSystemInfo

`GetTempPath`
Syntax
GetTempPath

`GetThreadContext`
Syntax
GetThreadContext

`GetTickCount`
Syntax
GetTickCount

`ImpersonateLoggedOnUser`
Syntax
ImpersonateLoggedOnUser

`InitializeCriticalSectionAndSpinCount`
Syntax
InitializeCriticalSectionAndSpinCount

`InitializeCriticalSection`
Syntax
InitializeCriticalSection

`ioctlsocket`
Syntax
ioctlsocket

`LeaveCriticalSection`
Syntax
LeaveCriticalSection

`LockFile`
Syntax
LockFile

`MoveFile`
Syntax
MoveFile

`OpenEvent`
Syntax
OpenEvent

`OpenMutex`
Syntax
OpenMutex

`OpenProcess`
Syntax
OpenProcess

`OpenSemaphore`
Syntax
OpenSemaphore

`OpenThread`
Syntax
OpenThread

`PulseEvent`
Syntax
PulseEvent

`QueryPerformanceCounter`
Syntax
QueryPerformanceCounter

`QueryPerformanceFrequency`
Syntax
QueryPerformanceFrequency

`QueueUserAPC`
Syntax
QueueUserAPC

`ReadFile`
Syntax
ReadFile

`ReleaseMutex`
Syntax
ReleaseMutex

`ReleaseSemaphore`
Syntax
ReleaseSemaphore

`RemoveDirectory`
Syntax
RemoveDirectory

`ReplaceFile`
Syntax
ReplaceFile

`ResetEvent`
Syntax
ResetEvent

`ResumeThread`
Syntax
ResumeThread

`RevertToSelf`
Syntax
RevertToSelf

`SetCriticalSectionSpinCount`
Syntax
SetCriticalSectionSpinCount

`SetCurrentDirectory`
Syntax
SetCurrentDirectory

`SetEndOfFile`
Syntax
SetEndOfFile

`SetEvent`
Syntax
SetEvent

`SetFileAttributes`
Syntax
SetFileAttributes

`SetFilePointer`
Syntax
SetFilePointer

`SetFileTime`
Syntax
SetFileTime

`SetLastError`
Syntax
SetLastError

`SetPriorityClass`
Syntax
SetPriorityClass

`SetProcessWorkingSetSize`
Syntax
SetProcessWorkingSetSize

`ShellExecuteEx`
Syntax
ShellExecuteEx

`SignalObjectAndWait`
Syntax
SignalObjectAndWait

`SleepEx`
Syntax
SleepEx

`Sleep`
Syntax
Sleep

`SuspendThread`
Syntax
SuspendThread

`TerminateProcess`
Syntax
TerminateProcess

`TlsAlloc`
Syntax
TlsAlloc

`TlsFree`
Syntax
TlsFree

`TlsGetValue`
Syntax
TlsGetValue

`TlsSetValue`
Syntax
TlsSetValue

`TransmitFile`
Syntax
TransmitFile

`TryEnterCriticalSection`
Syntax
TryEnterCriticalSection

`UnlockFile`
Syntax
UnlockFile

`VerLanguageName`
Syntax
VerLanguageName

`VerQueryValue`
Syntax
VerQueryValue

`WaitForInputIdle`
Syntax
WaitForInputIdle

`WaitForMultipleObjectsEx`
Syntax
WaitForMultipleObjectsEx

`WaitForMultipleObjects`
Syntax
WaitForMultipleObjects

`WaitForSingleObjectEx`
Syntax
WaitForSingleObjectEx

`WaitForSingleObject`
Syntax
WaitForSingleObject

`WriteFile`
Syntax
WriteFile

`WSACleanup`
Syntax
WSACleanup

`WSAGetLastError`
Syntax
WSAGetLastError

`WSAIoctl`
Syntax
WSAIoctl

`WSARecv`
Syntax
WSARecv

`WSASend`
Syntax
WSASend

`WSASetLastError`
Syntax
WSASetLastError

`WSAStartup`
Syntax
WSAStartup

### Extended APIs

The extended APIs provide access to a few internals of the WAPI stack that are not exposed through the standard Win32 APIs.
`mono_once`
Syntax
mono_once

`wapi_clear_interruption`
Syntax
wapi_clear_interruption

`wapi_current_thread_desc`
Syntax
wapi_current_thread_desc

`wapi_interrupt_thread`
Syntax
wapi_interrupt_thread

`wapi_self_interrupt`
Syntax
wapi_self_interrupt

`wapi_thread_clear_wait_handle`
Syntax
wapi_thread_clear_wait_handle