kernel32.odin 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package sys_windows
  2. foreign import kernel32 "system:Kernel32.lib"
  3. @(default_calling_convention="stdcall")
  4. foreign kernel32 {
  5. ReadConsoleW :: proc(hConsoleInput: HANDLE,
  6. lpBuffer: LPVOID,
  7. nNumberOfCharsToRead: DWORD,
  8. lpNumberOfCharsRead: LPDWORD,
  9. pInputControl: PCONSOLE_READCONSOLE_CONTROL) -> BOOL ---
  10. WriteConsoleW :: proc(hConsoleOutput: HANDLE,
  11. lpBuffer: LPCVOID,
  12. nNumberOfCharsToWrite: DWORD,
  13. lpNumberOfCharsWritten: LPDWORD,
  14. lpReserved: LPVOID) -> BOOL ---
  15. GetConsoleMode :: proc(hConsoleHandle: HANDLE,
  16. lpMode: LPDWORD) -> BOOL ---
  17. GetFileInformationByHandle :: proc(hFile: HANDLE, lpFileInformation: LPBY_HANDLE_FILE_INFORMATION) -> BOOL ---
  18. SetHandleInformation :: proc(hObject: HANDLE,
  19. dwMask: DWORD,
  20. dwFlags: DWORD) -> BOOL ---
  21. AddVectoredExceptionHandler :: proc(FirstHandler: ULONG, VectoredHandler: PVECTORED_EXCEPTION_HANDLER) -> LPVOID ---
  22. AddVectoredContinueHandler :: proc(FirstHandler: ULONG, VectoredHandler: PVECTORED_EXCEPTION_HANDLER) -> LPVOID ---
  23. RemoveVectoredExceptionHandler :: proc(Handle: LPVOID) -> DWORD ---
  24. RemoveVectoredContinueHandler :: proc(Handle: LPVOID) -> DWORD ---
  25. RaiseException :: proc(dwExceptionCode, dwExceptionFlags, nNumberOfArguments: DWORD, lpArguments: ^ULONG_PTR) -> ! ---
  26. CreateHardLinkW :: proc(lpSymlinkFileName: LPCWSTR,
  27. lpTargetFileName: LPCWSTR,
  28. lpSecurityAttributes: LPSECURITY_ATTRIBUTES) -> BOOL ---
  29. GetFileInformationByHandleEx :: proc(hFile: HANDLE,
  30. fileInfoClass: FILE_INFO_BY_HANDLE_CLASS,
  31. lpFileInformation: LPVOID,
  32. dwBufferSize: DWORD) -> BOOL ---
  33. InitializeCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) ---
  34. InitializeCriticalSectionAndSpinCount :: proc(CriticalSection: ^CRITICAL_SECTION, dwSpinCount: DWORD) -> BOOL ---
  35. EnterCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) ---
  36. TryEnterCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) -> BOOLEAN ---
  37. LeaveCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) ---
  38. DeleteCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) ---
  39. RemoveDirectoryW :: proc(lpPathName: LPCWSTR) -> BOOL ---
  40. SetFileAttributesW :: proc(lpFileName: LPCWSTR, dwFileAttributes: DWORD) -> BOOL ---
  41. SetLastError :: proc(dwErrCode: DWORD) ---
  42. GetCommandLineW :: proc() -> LPCWSTR ---
  43. GetTempPathW :: proc(nBufferLength: DWORD, lpBuffer: LPCWSTR) -> DWORD ---
  44. GetCurrentProcess :: proc() -> HANDLE ---
  45. GetCurrentProcessId :: proc() -> DWORD ---
  46. GetCurrentThread :: proc() -> HANDLE ---
  47. GetCurrentThreadId :: proc() -> DWORD ---
  48. GetStdHandle :: proc(which: DWORD) -> HANDLE ---
  49. ExitProcess :: proc(uExitCode: c_uint) -> ! ---
  50. DeviceIoControl :: proc(
  51. hDevice: HANDLE,
  52. dwIoControlCode: DWORD,
  53. lpInBuffer: LPVOID,
  54. nInBufferSize: DWORD,
  55. lpOutBuffer: LPVOID,
  56. nOutBufferSize: DWORD,
  57. lpBytesReturned: LPDWORD,
  58. lpOverlapped: LPOVERLAPPED,
  59. ) -> BOOL ---
  60. CreateThread :: proc(
  61. lpThreadAttributes: LPSECURITY_ATTRIBUTES,
  62. dwStackSize: SIZE_T,
  63. lpStartAddress: proc "stdcall" (rawptr) -> DWORD,
  64. lpParameter: LPVOID,
  65. dwCreationFlags: DWORD,
  66. lpThreadId: LPDWORD,
  67. ) -> HANDLE ---
  68. SwitchToThread :: proc() -> BOOL ---
  69. ResumeThread :: proc(thread: HANDLE) -> DWORD ---;
  70. GetThreadPriority :: proc(thread: HANDLE) -> c_int ---;
  71. SetThreadPriority :: proc(thread: HANDLE, priority: c_int) -> BOOL ---;
  72. GetExitCodeThread :: proc(thread: HANDLE, exit_code: ^DWORD) -> BOOL ---;
  73. TerminateThread :: proc(thread: HANDLE, exit_code: DWORD) -> BOOL ---;
  74. CreateSemaphoreW :: proc(attributes: LPSECURITY_ATTRIBUTES, initial_count, maximum_count: LONG, name: LPCSTR) -> HANDLE ---;
  75. ReleaseSemaphore :: proc(semaphore: HANDLE, release_count: LONG, previous_count: ^LONG) -> BOOL ---;
  76. WaitForSingleObject :: proc(hHandle: HANDLE, dwMilliseconds: DWORD) -> DWORD ---
  77. Sleep :: proc(dwMilliseconds: DWORD) ---
  78. GetProcessId :: proc(handle: HANDLE) -> DWORD ---
  79. CopyFileExW :: proc(
  80. lpExistingFileName: LPCWSTR,
  81. lpNewFileName: LPCWSTR,
  82. lpProgressRoutine: LPPROGRESS_ROUTINE,
  83. lpData: LPVOID,
  84. pbCancel: LPBOOL,
  85. dwCopyFlags: DWORD,
  86. ) -> BOOL ---
  87. FormatMessageW :: proc(
  88. flags: DWORD,
  89. lpSrc: LPVOID,
  90. msgId: DWORD,
  91. langId: DWORD,
  92. buf: LPWSTR,
  93. nsize: DWORD,
  94. args: rawptr,
  95. ) -> DWORD ---
  96. TlsAlloc :: proc() -> DWORD ---
  97. TlsGetValue :: proc(dwTlsIndex: DWORD) -> LPVOID ---
  98. TlsSetValue :: proc(dwTlsIndex: DWORD, lpTlsvalue: LPVOID) -> BOOL ---
  99. GetLastError :: proc() -> DWORD ---
  100. QueryPerformanceFrequency :: proc(lpFrequency: ^LARGE_INTEGER) -> BOOL ---
  101. QueryPerformanceCounter :: proc(lpPerformanceCount: ^LARGE_INTEGER) -> BOOL ---
  102. GetExitCodeProcess :: proc(hProcess: HANDLE, lpExitCode: LPDWORD) -> BOOL ---
  103. TerminateProcess :: proc(hProcess: HANDLE, uExitCode: UINT) -> BOOL ---
  104. CreateProcessW :: proc(
  105. lpApplicationName: LPCWSTR,
  106. lpCommandLine: LPWSTR,
  107. lpProcessAttributes: LPSECURITY_ATTRIBUTES,
  108. lpThreadAttributes: LPSECURITY_ATTRIBUTES,
  109. bInheritHandles: BOOL,
  110. dwCreationFlags: DWORD,
  111. lpEnvironment: LPVOID,
  112. lpCurrentDirectory: LPCWSTR,
  113. lpStartupInfo: LPSTARTUPINFO,
  114. lpProcessInformation: LPPROCESS_INFORMATION,
  115. ) -> BOOL ---
  116. GetEnvironmentVariableW :: proc(n: LPCWSTR, v: LPWSTR, nsize: DWORD) -> DWORD ---
  117. SetEnvironmentVariableW :: proc(n: LPCWSTR, v: LPCWSTR) -> BOOL ---
  118. GetEnvironmentStringsW :: proc() -> LPWCH ---
  119. FreeEnvironmentStringsW :: proc(env_ptr: LPWCH) -> BOOL ---
  120. GetModuleFileNameW :: proc(hModule: HMODULE, lpFilename: LPWSTR, nSize: DWORD) -> DWORD ---
  121. CreateDirectoryW :: proc(
  122. lpPathName: LPCWSTR,
  123. lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
  124. ) -> BOOL ---
  125. DeleteFileW :: proc(lpPathName: LPCWSTR) -> BOOL ---
  126. GetCurrentDirectoryW :: proc(nBufferLength: DWORD, lpBuffer: LPWSTR) -> DWORD ---
  127. SetCurrentDirectoryW :: proc(lpPathName: LPCWSTR) -> BOOL ---
  128. WideCharToMultiByte :: proc(
  129. CodePage: UINT,
  130. dwFlags: DWORD,
  131. lpWideCharStr: LPCWSTR,
  132. cchWideChar: c_int,
  133. lpMultiByteStr: LPSTR,
  134. cbMultiByte: c_int,
  135. lpDefaultChar: LPCSTR,
  136. lpUsedDefaultChar: LPBOOL,
  137. ) -> c_int ---
  138. MultiByteToWideChar :: proc(
  139. CodePage: UINT,
  140. dwFlags: DWORD,
  141. lpMultiByteStr: LPSTR,
  142. cbMultiByte: c_int,
  143. lpWideCharStr: LPWSTR,
  144. cchWideChar: c_int,
  145. ) -> c_int ---
  146. DuplicateHandle :: proc(
  147. hSourceProcessHandle: HANDLE,
  148. hSourceHandle: HANDLE,
  149. hTargetProcessHandle: HANDLE,
  150. lpTargetHandle: LPHANDLE,
  151. dwDesiredAccess: DWORD,
  152. bInheritHandle: BOOL,
  153. dwOptions: DWORD,
  154. ) -> BOOL ---
  155. ReadFile :: proc(
  156. hFile: HANDLE,
  157. lpBuffer: LPVOID,
  158. nNumberOfBytesToRead: DWORD,
  159. lpNumberOfBytesRead: LPDWORD,
  160. lpOverlapped: LPOVERLAPPED,
  161. ) -> BOOL ---
  162. WriteFile :: proc(
  163. hFile: HANDLE,
  164. lpBuffer: LPVOID,
  165. nNumberOfBytesToWrite: DWORD,
  166. lpNumberOfBytesWritten: LPDWORD,
  167. lpOverlapped: LPOVERLAPPED,
  168. ) -> BOOL ---
  169. CloseHandle :: proc(hObject: HANDLE) -> BOOL ---
  170. MoveFileExW :: proc(lpExistingFileName: LPCWSTR, lpNewFileName: LPCWSTR, dwFlags: DWORD)
  171. -> BOOL ---
  172. SetFilePointerEx :: proc(
  173. hFile: HANDLE,
  174. liDistanceToMove: LARGE_INTEGER,
  175. lpNewFilePointer: PLARGE_INTEGER,
  176. dwMoveMethod: DWORD,
  177. ) -> BOOL ---
  178. FlushFileBuffers :: proc(hFile: HANDLE) -> BOOL ---
  179. CreateFileW :: proc(
  180. lpFileName: LPCWSTR,
  181. dwDesiredAccess: DWORD,
  182. dwShareMode: DWORD,
  183. lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
  184. dwCreationDisposition: DWORD,
  185. dwFlagsAndAttributes: DWORD,
  186. hTemplateFile: HANDLE,
  187. ) -> HANDLE ---
  188. FindFirstFileW :: proc(fileName: LPCWSTR, findFileData: LPWIN32_FIND_DATAW) -> HANDLE ---
  189. FindNextFileW :: proc(findFile: HANDLE, findFileData: LPWIN32_FIND_DATAW) -> BOOL ---
  190. FindClose :: proc(findFile: HANDLE) -> BOOL ---
  191. GetModuleHandleW :: proc(lpModuleName: LPCWSTR) -> HMODULE ---
  192. GetSystemTimeAsFileTime :: proc(lpSystemTimeAsFileTime: LPFILETIME) ---
  193. CreateEventW :: proc(
  194. lpEventAttributes: LPSECURITY_ATTRIBUTES,
  195. bManualReset: BOOL,
  196. bInitialState: BOOL,
  197. lpName: LPCWSTR,
  198. ) -> HANDLE ---
  199. WaitForMultipleObjects :: proc(
  200. nCount: DWORD,
  201. lpHandles: ^HANDLE,
  202. bWaitAll: BOOL,
  203. dwMilliseconds: DWORD,
  204. ) -> DWORD ---
  205. CreateNamedPipeW :: proc(
  206. lpName: LPCWSTR,
  207. dwOpenMode: DWORD,
  208. dwPipeMode: DWORD,
  209. nMaxInstances: DWORD,
  210. nOutBufferSize: DWORD,
  211. nInBufferSize: DWORD,
  212. nDefaultTimeOut: DWORD,
  213. lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
  214. ) -> HANDLE ---
  215. CancelIo :: proc(handle: HANDLE) -> BOOL ---
  216. GetOverlappedResult :: proc(
  217. hFile: HANDLE,
  218. lpOverlapped: LPOVERLAPPED,
  219. lpNumberOfBytesTransferred: LPDWORD,
  220. bWait: BOOL,
  221. ) -> BOOL ---
  222. GetProcessHeap :: proc() -> HANDLE ---
  223. HeapAlloc :: proc(hHeap: HANDLE, dwFlags: DWORD, dwBytes: SIZE_T) -> LPVOID ---
  224. HeapReAlloc :: proc(hHeap: HANDLE, dwFlags: DWORD, lpMem: LPVOID, dwBytes: SIZE_T) -> LPVOID ---
  225. HeapFree :: proc(hHeap: HANDLE, dwFlags: DWORD, lpMem: LPVOID) -> BOOL ---
  226. InitializeSRWLock :: proc(SRWLock: ^SRWLOCK) ---
  227. AcquireSRWLockExclusive :: proc(SRWLock: ^SRWLOCK) ---
  228. TryAcquireSRWLockExclusive :: proc(SRWLock: ^SRWLOCK) -> BOOL ---
  229. ReleaseSRWLockExclusive :: proc(SRWLock: ^SRWLOCK) ---
  230. AcquireSRWLockShared :: proc(SRWLock: ^SRWLOCK) ---
  231. TryAcquireSRWLockShared :: proc(SRWLock: ^SRWLOCK) -> BOOL ---
  232. ReleaseSRWLockShared :: proc(SRWLock: ^SRWLOCK) ---
  233. InitializeConditionVariable :: proc(ConditionVariable: ^CONDITION_VARIABLE) ---
  234. WakeConditionVariable :: proc(ConditionVariable: ^CONDITION_VARIABLE) ---
  235. WakeAllConditionVariable :: proc(ConditionVariable: ^CONDITION_VARIABLE) ---
  236. SleepConditionVariableCS :: proc(ConditionVariable: ^CONDITION_VARIABLE, CriticalSection: ^CRITICAL_SECTION, dwMilliseconds: DWORD) -> BOOL ---
  237. SleepConditionVariableSRW :: proc(ConditionVariable: ^CONDITION_VARIABLE, SRWLock: ^SRWLOCK, dwMilliseconds: DWORD, Flags: LONG) -> BOOL ---
  238. GetFileType :: proc(file_handle: HANDLE) -> DWORD ---
  239. SetFilePointer :: proc(file_handle: HANDLE, distance_to_move: LONG, distance_to_move_high: ^LONG, move_method: DWORD) -> DWORD ---
  240. GetFileSizeEx :: proc(file_handle: HANDLE, file_size: ^LARGE_INTEGER) -> BOOL ---
  241. GetFileAttributesW :: proc(lpFileName: LPCWSTR) -> DWORD ---
  242. GetFileAttributesExW :: proc(lpFileName: LPCWSTR, fInfoLevelId: GET_FILEEX_INFO_LEVELS, lpFileInformation: LPVOID) -> BOOL ---
  243. GetSystemInfo :: proc(system_info: ^SYSTEM_INFO) ---
  244. GetVersionExW :: proc(osvi: ^OSVERSIONINFOEXW) ---
  245. LoadLibraryW :: proc(c_str: LPCWSTR) -> HMODULE ---
  246. FreeLibrary :: proc(h: HMODULE) -> BOOL ---
  247. GetProcAddress :: proc(h: HMODULE, c_str: LPCSTR) -> rawptr ---
  248. GetFullPathNameW :: proc(filename: LPCWSTR, buffer_length: DWORD, buffer: LPCWSTR, file_part: ^LPCWSTR) -> DWORD ---
  249. GetLongPathNameW :: proc(short, long: LPCWSTR, len: DWORD) -> DWORD ---
  250. GetShortPathNameW :: proc(long, short: LPCWSTR, len: DWORD) -> DWORD ---
  251. }