kernel32.odin 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271
  1. #+build windows
  2. package sys_windows
  3. foreign import kernel32 "system:Kernel32.lib"
  4. foreign import one_core "system:OneCore.lib"
  5. FOREGROUND_BLUE :: WORD(0x0001)
  6. FOREGROUND_GREEN :: WORD(0x0002)
  7. FOREGROUND_RED :: WORD(0x0004)
  8. FOREGROUND_INTENSITY :: WORD(0x0008)
  9. BACKGROUND_BLUE :: WORD(0x0010)
  10. BACKGROUND_GREEN :: WORD(0x0020)
  11. BACKGROUND_RED :: WORD(0x0040)
  12. BACKGROUND_INTENSITY :: WORD(0x0080)
  13. COMMON_LVB_LEADING_BYTE :: WORD(0x0100)
  14. COMMON_LVB_TRAILING_BYTE :: WORD(0x0200)
  15. COMMON_LVB_GRID_HORIZONTAL :: WORD(0x0400)
  16. COMMON_LVB_GRID_LVERTICAL :: WORD(0x0800)
  17. COMMON_LVB_GRID_RVERTICAL :: WORD(0x1000)
  18. COMMON_LVB_REVERSE_VIDEO :: WORD(0x4000)
  19. COMMON_LVB_UNDERSCORE :: WORD(0x8000)
  20. COMMON_LVB_SBCSDBCS :: WORD(0x0300)
  21. EV_BREAK :: DWORD(0x0040)
  22. EV_CTS :: DWORD(0x0008)
  23. EV_DSR :: DWORD(0x0010)
  24. EV_ERR :: DWORD(0x0080)
  25. EV_RING :: DWORD(0x0100)
  26. EV_RLSD :: DWORD(0x0020)
  27. EV_RXCHAR :: DWORD(0x0001)
  28. EV_RXFLAG :: DWORD(0x0002)
  29. EV_TXEMPTY :: DWORD(0x0004)
  30. @(default_calling_convention="system")
  31. foreign kernel32 {
  32. OutputDebugStringA :: proc(lpOutputString: LPCSTR) --- // The only A thing that is allowed
  33. OutputDebugStringW :: proc(lpOutputString: LPCWSTR) ---
  34. ReadConsoleW :: proc(hConsoleInput: HANDLE,
  35. lpBuffer: LPVOID,
  36. nNumberOfCharsToRead: DWORD,
  37. lpNumberOfCharsRead: LPDWORD,
  38. pInputControl: PCONSOLE_READCONSOLE_CONTROL) -> BOOL ---
  39. WriteConsoleW :: proc(hConsoleOutput: HANDLE,
  40. lpBuffer: LPCVOID,
  41. nNumberOfCharsToWrite: DWORD,
  42. lpNumberOfCharsWritten: LPDWORD,
  43. lpReserved: LPVOID) -> BOOL ---
  44. PeekConsoleInputW :: proc(hConsoleInput: HANDLE,
  45. lpBuffer: ^INPUT_RECORD,
  46. nLength: DWORD,
  47. lpNumberOfEventsRead: LPDWORD) -> BOOL ---
  48. ReadConsoleInputW :: proc(hConsoleInput: HANDLE,
  49. lpBuffer: ^INPUT_RECORD,
  50. nLength: DWORD,
  51. lpNumberOfEventsRead: LPDWORD) -> BOOL ---
  52. // https://learn.microsoft.com/en-us/windows/console/getnumberofconsoleinputevents
  53. GetNumberOfConsoleInputEvents :: proc(hConsoleInput: HANDLE, lpcNumberOfEvents: LPDWORD) -> BOOL ---
  54. GetConsoleMode :: proc(hConsoleHandle: HANDLE, lpMode: LPDWORD) -> BOOL ---
  55. SetConsoleMode :: proc(hConsoleHandle: HANDLE, dwMode: DWORD) -> BOOL ---
  56. SetConsoleCursorPosition :: proc(hConsoleHandle: HANDLE, dwCursorPosition: COORD) -> BOOL ---
  57. SetConsoleTextAttribute :: proc(hConsoleOutput: HANDLE, wAttributes: WORD) -> BOOL ---
  58. GetConsoleCP :: proc() -> CODEPAGE ---
  59. SetConsoleCP :: proc(wCodePageID: CODEPAGE) -> BOOL ---
  60. GetConsoleOutputCP :: proc() -> CODEPAGE ---
  61. SetConsoleOutputCP :: proc(wCodePageID: CODEPAGE) -> BOOL ---
  62. FlushConsoleInputBuffer :: proc(hConsoleInput: HANDLE) -> BOOL ---
  63. GetFileInformationByHandle :: proc(hFile: HANDLE, lpFileInformation: LPBY_HANDLE_FILE_INFORMATION) -> BOOL ---
  64. SetHandleInformation :: proc(hObject: HANDLE,
  65. dwMask: DWORD,
  66. dwFlags: DWORD) -> BOOL ---
  67. SetFileInformationByHandle :: proc(hFile: HANDLE,
  68. FileInformationClass: FILE_INFO_BY_HANDLE_CLASS,
  69. lpFileInformation: LPVOID,
  70. dwBufferSize: DWORD) -> BOOL ---
  71. AddVectoredExceptionHandler :: proc(FirstHandler: ULONG, VectoredHandler: PVECTORED_EXCEPTION_HANDLER) -> LPVOID ---
  72. AddVectoredContinueHandler :: proc(FirstHandler: ULONG, VectoredHandler: PVECTORED_EXCEPTION_HANDLER) -> LPVOID ---
  73. RemoveVectoredExceptionHandler :: proc(Handle: LPVOID) -> DWORD ---
  74. RemoveVectoredContinueHandler :: proc(Handle: LPVOID) -> DWORD ---
  75. RaiseException :: proc(dwExceptionCode, dwExceptionFlags, nNumberOfArguments: DWORD, lpArguments: ^ULONG_PTR) -> ! ---
  76. SetUnhandledExceptionFilter :: proc(lpTopLevelExceptionFilter: LPTOP_LEVEL_EXCEPTION_FILTER) -> LPTOP_LEVEL_EXCEPTION_FILTER ---
  77. CreateHardLinkW :: proc(lpSymlinkFileName: LPCWSTR,
  78. lpTargetFileName: LPCWSTR,
  79. lpSecurityAttributes: LPSECURITY_ATTRIBUTES) -> BOOL ---
  80. CreateSymbolicLinkW :: proc(lpSymlinkFileName: LPCWSTR,
  81. lpTargetFileName: LPCWSTR,
  82. dwFlags: DWORD) -> BOOLEAN ---
  83. GetFileInformationByHandleEx :: proc(hFile: HANDLE,
  84. fileInfoClass: FILE_INFO_BY_HANDLE_CLASS,
  85. lpFileInformation: LPVOID,
  86. dwBufferSize: DWORD) -> BOOL ---
  87. InitializeCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) ---
  88. InitializeCriticalSectionAndSpinCount :: proc(CriticalSection: ^CRITICAL_SECTION, dwSpinCount: DWORD) -> BOOL ---
  89. EnterCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) ---
  90. TryEnterCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) -> BOOLEAN ---
  91. LeaveCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) ---
  92. DeleteCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) ---
  93. RemoveDirectoryW :: proc(lpPathName: LPCWSTR) -> BOOL ---
  94. SetFileAttributesW :: proc(lpFileName: LPCWSTR, dwFileAttributes: DWORD) -> BOOL ---
  95. SetLastError :: proc(dwErrCode: DWORD) ---
  96. GetCommTimeouts :: proc(handle: HANDLE, timeouts: ^COMMTIMEOUTS) -> BOOL ---
  97. SetCommTimeouts :: proc(handle: HANDLE, timeouts: ^COMMTIMEOUTS) -> BOOL ---
  98. ClearCommError :: proc(hFile: HANDLE, lpErrors: ^Com_Error, lpStat: ^COMSTAT) -> BOOL ---
  99. GetCommState :: proc(handle: HANDLE, dcb: ^DCB) -> BOOL ---
  100. SetCommState :: proc(handle: HANDLE, dcb: ^DCB) -> BOOL ---
  101. SetCommMask :: proc(handle: HANDLE, dwEvtMap: DWORD) -> BOOL ---
  102. GetCommMask :: proc(handle: HANDLE, lpEvtMask: LPDWORD) -> BOOL ---
  103. WaitCommEvent :: proc(handle: HANDLE, lpEvtMask: LPDWORD, lpOverlapped: LPOVERLAPPED) -> BOOL ---
  104. GetCommandLineW :: proc() -> LPCWSTR ---
  105. GetTempPathW :: proc(nBufferLength: DWORD, lpBuffer: LPCWSTR) -> DWORD ---
  106. GetTempFileNameW :: proc(lpPathName: LPCWSTR, lpPrefixString: LPCWSTR, uUnique: c_int, lpTempFileName: LPWSTR) -> c_uint ---
  107. GetCurrentProcess :: proc() -> HANDLE ---
  108. GetCurrentProcessId :: proc() -> DWORD ---
  109. GetCurrentThread :: proc() -> HANDLE ---
  110. GetCurrentThreadId :: proc() -> DWORD ---
  111. GetProcessTimes :: proc(
  112. hProcess: HANDLE,
  113. lpCreationTime: LPFILETIME,
  114. lpExitTime: LPFILETIME,
  115. lpKernelTime: LPFILETIME,
  116. lpUserTime: LPFILETIME,
  117. ) -> BOOL ---
  118. GetStdHandle :: proc(which: DWORD) -> HANDLE ---
  119. ExitProcess :: proc(uExitCode: c_uint) -> ! ---
  120. DeviceIoControl :: proc(
  121. hDevice: HANDLE,
  122. dwIoControlCode: DWORD,
  123. lpInBuffer: LPVOID,
  124. nInBufferSize: DWORD,
  125. lpOutBuffer: LPVOID,
  126. nOutBufferSize: DWORD,
  127. lpBytesReturned: LPDWORD,
  128. lpOverlapped: LPOVERLAPPED,
  129. ) -> BOOL ---
  130. CreateThread :: proc(
  131. lpThreadAttributes: LPSECURITY_ATTRIBUTES,
  132. dwStackSize: SIZE_T,
  133. lpStartAddress: proc "system" (rawptr) -> DWORD,
  134. lpParameter: LPVOID,
  135. dwCreationFlags: DWORD,
  136. lpThreadId: LPDWORD,
  137. ) -> HANDLE ---
  138. CreateRemoteThread :: proc(
  139. hProcess: HANDLE,
  140. lpThreadAttributes: LPSECURITY_ATTRIBUTES,
  141. dwStackSize: SIZE_T,
  142. lpStartAddress: proc "system" (rawptr) -> DWORD,
  143. lpParameter: LPVOID,
  144. dwCreationFlags: DWORD,
  145. lpThreadId: LPDWORD,
  146. ) -> HANDLE ---
  147. SwitchToThread :: proc() -> BOOL ---
  148. ResumeThread :: proc(thread: HANDLE) -> DWORD ---
  149. GetThreadPriority :: proc(thread: HANDLE) -> c_int ---
  150. SetThreadPriority :: proc(thread: HANDLE, priority: c_int) -> BOOL ---
  151. SetThreadDescription :: proc(hThread: HANDLE, lpThreadDescription: PCWSTR) -> HRESULT ---
  152. GetExitCodeThread :: proc(thread: HANDLE, exit_code: ^DWORD) -> BOOL ---
  153. TerminateThread :: proc(thread: HANDLE, exit_code: DWORD) -> BOOL ---
  154. SuspendThread :: proc(hThread: HANDLE) -> DWORD ---
  155. GetProcessAffinityMask :: proc(
  156. hProcess: HANDLE,
  157. lpProcessAffinityMask: PDWORD_PTR,
  158. lpSystemAffinityMask: PDWORD_PTR,
  159. ) -> BOOL ---
  160. SetProcessAffinityMask :: proc(
  161. hProcess: HANDLE,
  162. dwProcessAffinityMask: DWORD_PTR,
  163. ) -> BOOL ---
  164. SetThreadAffinityMask :: proc(
  165. hThread: HANDLE,
  166. dwThreadAffinityMask: DWORD_PTR,
  167. ) -> DWORD_PTR ---
  168. CreateSemaphoreW :: proc(attributes: LPSECURITY_ATTRIBUTES, initial_count, maximum_count: LONG, name: LPCWSTR) -> HANDLE ---
  169. ReleaseSemaphore :: proc(semaphore: HANDLE, release_count: LONG, previous_count: ^LONG) -> BOOL ---
  170. CreateWaitableTimerW :: proc(
  171. lpTimerAttributes: LPSECURITY_ATTRIBUTES,
  172. bManualReset: BOOL,
  173. lpTimerName: LPCWSTR,
  174. ) -> HANDLE ---
  175. CreateWaitableTimerExW :: proc(
  176. lpTimerAttributes: LPSECURITY_ATTRIBUTES,
  177. lpTimerName: LPCWSTR,
  178. dwFlags: DWORD,
  179. dwDesiredAccess: DWORD,
  180. ) -> HANDLE ---
  181. SetWaitableTimerEx :: proc(
  182. hTimer: HANDLE,
  183. lpDueTime: ^LARGE_INTEGER,
  184. lPeriod: LONG,
  185. pfnCompletionRoutine: PTIMERAPCROUTINE,
  186. lpArgToCompletionRoutine: LPVOID,
  187. WakeContext: PREASON_CONTEXT,
  188. TolerableDelay: ULONG,
  189. ) -> BOOL ---
  190. WaitForSingleObject :: proc(hHandle: HANDLE, dwMilliseconds: DWORD) -> DWORD ---
  191. WaitForSingleObjectEx :: proc(hHandle: HANDLE, dwMilliseconds: DWORD, bAlterable: BOOL) -> DWORD ---
  192. Sleep :: proc(dwMilliseconds: DWORD) ---
  193. GetProcessId :: proc(handle: HANDLE) -> DWORD ---
  194. CopyFileW :: proc(
  195. lpExistingFileName: LPCWSTR,
  196. lpNewFileName: LPCWSTR,
  197. bFailIfExists: BOOL,
  198. ) -> BOOL ---
  199. CopyFileExW :: proc(
  200. lpExistingFileName: LPCWSTR,
  201. lpNewFileName: LPCWSTR,
  202. lpProgressRoutine: LPPROGRESS_ROUTINE,
  203. lpData: LPVOID,
  204. pbCancel: LPBOOL,
  205. dwCopyFlags: DWORD,
  206. ) -> BOOL ---
  207. FormatMessageW :: proc(
  208. flags: DWORD,
  209. lpSrc: LPVOID,
  210. msgId: DWORD,
  211. langId: DWORD,
  212. buf: LPWSTR,
  213. nsize: DWORD,
  214. args: rawptr,
  215. ) -> DWORD ---
  216. TlsAlloc :: proc() -> DWORD ---
  217. TlsFree :: proc(dwTlsIndex: DWORD) -> BOOL ---
  218. TlsGetValue :: proc(dwTlsIndex: DWORD) -> LPVOID ---
  219. TlsSetValue :: proc(dwTlsIndex: DWORD, lpTlsvalue: LPVOID) -> BOOL ---
  220. GetLastError :: proc() -> DWORD ---
  221. QueryPerformanceFrequency :: proc(lpFrequency: ^LARGE_INTEGER) -> BOOL ---
  222. QueryPerformanceCounter :: proc(lpPerformanceCount: ^LARGE_INTEGER) -> BOOL ---
  223. GetExitCodeProcess :: proc(hProcess: HANDLE, lpExitCode: LPDWORD) -> BOOL ---
  224. TerminateProcess :: proc(hProcess: HANDLE, uExitCode: UINT) -> BOOL ---
  225. OpenProcess :: proc(dwDesiredAccess: DWORD, bInheritHandle: BOOL, dwProcessId: DWORD) -> HANDLE ---
  226. OpenThread :: proc(dwDesiredAccess: DWORD, bInheritHandle: BOOL, dwThreadId: DWORD) -> HANDLE ---
  227. GetThreadContext :: proc(
  228. hThread: HANDLE,
  229. lpContext: LPCONTEXT,
  230. ) -> BOOL ---
  231. SetThreadContext :: proc(
  232. hThread: HANDLE,
  233. lpContext: LPCONTEXT,
  234. ) -> BOOL ---
  235. CreateProcessW :: proc(
  236. lpApplicationName: LPCWSTR,
  237. lpCommandLine: LPWSTR,
  238. lpProcessAttributes: LPSECURITY_ATTRIBUTES,
  239. lpThreadAttributes: LPSECURITY_ATTRIBUTES,
  240. bInheritHandles: BOOL,
  241. dwCreationFlags: DWORD,
  242. lpEnvironment: LPVOID,
  243. lpCurrentDirectory: LPCWSTR,
  244. lpStartupInfo: LPSTARTUPINFOW,
  245. lpProcessInformation: LPPROCESS_INFORMATION,
  246. ) -> BOOL ---
  247. GetStartupInfoW :: proc(lpStartupInfo: LPSTARTUPINFOW) ---
  248. GetEnvironmentVariableW :: proc(n: LPCWSTR, v: LPWSTR, nsize: DWORD) -> DWORD ---
  249. SetEnvironmentVariableW :: proc(n: LPCWSTR, v: LPCWSTR) -> BOOL ---
  250. GetEnvironmentStringsW :: proc() -> LPWCH ---
  251. FreeEnvironmentStringsW :: proc(env_ptr: LPWCH) -> BOOL ---
  252. ExpandEnvironmentStringsW :: proc(lpSrc: LPCWSTR, lpDst: LPWSTR, nSize: DWORD) -> DWORD ---
  253. GetModuleFileNameW :: proc(hModule: HMODULE, lpFilename: LPWSTR, nSize: DWORD) -> DWORD ---
  254. CreateDirectoryW :: proc(
  255. lpPathName: LPCWSTR,
  256. lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
  257. ) -> BOOL ---
  258. DeleteFileW :: proc(lpPathName: LPCWSTR) -> BOOL ---
  259. GetCurrentDirectoryW :: proc(nBufferLength: DWORD, lpBuffer: LPWSTR) -> DWORD ---
  260. SetCurrentDirectoryW :: proc(lpPathName: LPCWSTR) -> BOOL ---
  261. WideCharToMultiByte :: proc(
  262. CodePage: UINT,
  263. dwFlags: DWORD,
  264. lpWideCharStr: LPCWSTR,
  265. cchWideChar: c_int,
  266. lpMultiByteStr: LPSTR,
  267. cbMultiByte: c_int,
  268. lpDefaultChar: LPCSTR,
  269. lpUsedDefaultChar: LPBOOL,
  270. ) -> c_int ---
  271. MultiByteToWideChar :: proc(
  272. CodePage: UINT,
  273. dwFlags: DWORD,
  274. lpMultiByteStr: LPSTR,
  275. cbMultiByte: c_int,
  276. lpWideCharStr: LPWSTR,
  277. cchWideChar: c_int,
  278. ) -> c_int ---
  279. DuplicateHandle :: proc(
  280. hSourceProcessHandle: HANDLE,
  281. hSourceHandle: HANDLE,
  282. hTargetProcessHandle: HANDLE,
  283. lpTargetHandle: LPHANDLE,
  284. dwDesiredAccess: DWORD,
  285. bInheritHandle: BOOL,
  286. dwOptions: DWORD,
  287. ) -> BOOL ---
  288. ReadFile :: proc(
  289. hFile: HANDLE,
  290. lpBuffer: LPVOID,
  291. nNumberOfBytesToRead: DWORD,
  292. lpNumberOfBytesRead: LPDWORD,
  293. lpOverlapped: LPOVERLAPPED,
  294. ) -> BOOL ---
  295. WriteFile :: proc(
  296. hFile: HANDLE,
  297. lpBuffer: LPVOID,
  298. nNumberOfBytesToWrite: DWORD,
  299. lpNumberOfBytesWritten: LPDWORD,
  300. lpOverlapped: LPOVERLAPPED,
  301. ) -> BOOL ---
  302. CloseHandle :: proc(hObject: HANDLE) -> BOOL ---
  303. MoveFileExW :: proc(lpExistingFileName: LPCWSTR, lpNewFileName: LPCWSTR, dwFlags: DWORD) -> BOOL ---
  304. SetFilePointerEx :: proc(
  305. hFile: HANDLE,
  306. liDistanceToMove: LARGE_INTEGER,
  307. lpNewFilePointer: PLARGE_INTEGER,
  308. dwMoveMethod: DWORD,
  309. ) -> BOOL ---
  310. FlushFileBuffers :: proc(hFile: HANDLE) -> BOOL ---
  311. CreateFileW :: proc(
  312. lpFileName: LPCWSTR,
  313. dwDesiredAccess: DWORD,
  314. dwShareMode: DWORD,
  315. lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
  316. dwCreationDisposition: DWORD,
  317. dwFlagsAndAttributes: DWORD,
  318. hTemplateFile: HANDLE,
  319. ) -> HANDLE ---
  320. GetFileTime :: proc(
  321. hFile: HANDLE,
  322. lpCreationTime: LPFILETIME,
  323. lpLastAccessTime: LPFILETIME,
  324. lpLastWriteTime: LPFILETIME,
  325. ) -> BOOL ---
  326. CompareFileTime :: proc(lpFileTime1: LPFILETIME, lpFileTime2: LPFILETIME) -> LONG ---
  327. FindFirstFileW :: proc(fileName: LPCWSTR, findFileData: LPWIN32_FIND_DATAW) -> HANDLE ---
  328. FindNextFileW :: proc(findFile: HANDLE, findFileData: LPWIN32_FIND_DATAW) -> BOOL ---
  329. FindClose :: proc(findFile: HANDLE) -> BOOL ---
  330. GetModuleHandleW :: proc(lpModuleName: LPCWSTR) -> HMODULE ---
  331. GetModuleHandleA :: proc(lpModuleName: LPCSTR) -> HMODULE ---
  332. GetSystemTimeAsFileTime :: proc(lpSystemTimeAsFileTime: LPFILETIME) ---
  333. GetSystemTimePreciseAsFileTime :: proc(lpSystemTimeAsFileTime: LPFILETIME) ---
  334. FileTimeToSystemTime :: proc(lpFileTime: ^FILETIME, lpSystemTime: ^SYSTEMTIME) -> BOOL ---
  335. SystemTimeToTzSpecificLocalTime :: proc(
  336. lpTimeZoneInformation: ^TIME_ZONE_INFORMATION,
  337. lpUniversalTime: ^SYSTEMTIME,
  338. lpLocalTime: ^SYSTEMTIME,
  339. ) -> BOOL ---
  340. SystemTimeToFileTime :: proc(
  341. lpSystemTime: ^SYSTEMTIME,
  342. lpFileTime: LPFILETIME,
  343. ) -> BOOL ---
  344. CreateEventW :: proc(
  345. lpEventAttributes: LPSECURITY_ATTRIBUTES,
  346. bManualReset: BOOL,
  347. bInitialState: BOOL,
  348. lpName: LPCWSTR,
  349. ) -> HANDLE ---
  350. ResetEvent :: proc(hEvent: HANDLE) -> BOOL ---
  351. SetEvent :: proc(hEvent: HANDLE) -> BOOL ---
  352. WaitForMultipleObjects :: proc(
  353. nCount: DWORD,
  354. lpHandles: ^HANDLE,
  355. bWaitAll: BOOL,
  356. dwMilliseconds: DWORD,
  357. ) -> DWORD ---
  358. WaitForMultipleObjectsEx :: proc(
  359. nCount: DWORD,
  360. lpHandles: ^HANDLE,
  361. bWaitAll: BOOL,
  362. dwMilliseconds: DWORD,
  363. bAlterable: BOOL,
  364. ) -> DWORD ---
  365. CreateNamedPipeW :: proc(
  366. lpName: LPCWSTR,
  367. dwOpenMode: DWORD,
  368. dwPipeMode: DWORD,
  369. nMaxInstances: DWORD,
  370. nOutBufferSize: DWORD,
  371. nInBufferSize: DWORD,
  372. nDefaultTimeOut: DWORD,
  373. lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
  374. ) -> HANDLE ---
  375. PeekNamedPipe :: proc(
  376. hNamedPipe: HANDLE,
  377. lpBuffer: rawptr,
  378. nBufferSize: u32,
  379. lpBytesRead: ^u32,
  380. lpTotalBytesAvail: ^u32,
  381. lpBytesLeftThisMessage: ^u32,
  382. ) -> BOOL ---
  383. CancelIo :: proc(handle: HANDLE) -> BOOL ---
  384. GetOverlappedResult :: proc(
  385. hFile: HANDLE,
  386. lpOverlapped: LPOVERLAPPED,
  387. lpNumberOfBytesTransferred: LPDWORD,
  388. bWait: BOOL,
  389. ) -> BOOL ---
  390. GetProcessHeap :: proc() -> HANDLE ---
  391. HeapAlloc :: proc(hHeap: HANDLE, dwFlags: DWORD, dwBytes: SIZE_T) -> LPVOID ---
  392. HeapReAlloc :: proc(hHeap: HANDLE, dwFlags: DWORD, lpMem: LPVOID, dwBytes: SIZE_T) -> LPVOID ---
  393. HeapFree :: proc(hHeap: HANDLE, dwFlags: DWORD, lpMem: LPVOID) -> BOOL ---
  394. LocalAlloc :: proc(flags: UINT, bytes: SIZE_T) -> LPVOID ---
  395. LocalReAlloc :: proc(mem: LPVOID, bytes: SIZE_T, flags: UINT) -> LPVOID ---
  396. LocalFree :: proc(mem: LPVOID) -> LPVOID ---
  397. GlobalAlloc :: proc(flags: UINT, bytes: SIZE_T) -> LPVOID ---
  398. GlobalReAlloc :: proc(mem: LPVOID, bytes: SIZE_T, flags: UINT) -> LPVOID ---
  399. GlobalFree :: proc(mem: LPVOID) -> LPVOID ---
  400. GlobalLock :: proc(hMem: HGLOBAL) -> LPVOID ---
  401. GlobalUnlock :: proc(hMem: HGLOBAL) -> BOOL ---
  402. ReadDirectoryChangesW :: proc(
  403. hDirectory: HANDLE,
  404. lpBuffer: LPVOID,
  405. nBufferLength: DWORD,
  406. bWatchSubtree: BOOL,
  407. dwNotifyFilter: DWORD,
  408. lpBytesReturned: LPDWORD,
  409. lpOverlapped: LPOVERLAPPED,
  410. lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE,
  411. ) -> BOOL ---
  412. FindFirstChangeNotificationW :: proc(
  413. lpPathName: LPWSTR,
  414. bWatchSubtree: BOOL,
  415. dwNotifyFilter: DWORD,
  416. ) -> HANDLE ---
  417. FindNextChangeNotification :: proc(hChangeHandle: HANDLE) -> BOOL ---
  418. FindCloseChangeNotification :: proc(hChangeHandle: HANDLE) -> BOOL ---
  419. InitializeSRWLock :: proc(SRWLock: ^SRWLOCK) ---
  420. AcquireSRWLockExclusive :: proc(SRWLock: ^SRWLOCK) ---
  421. TryAcquireSRWLockExclusive :: proc(SRWLock: ^SRWLOCK) -> BOOLEAN ---
  422. ReleaseSRWLockExclusive :: proc(SRWLock: ^SRWLOCK) ---
  423. AcquireSRWLockShared :: proc(SRWLock: ^SRWLOCK) ---
  424. TryAcquireSRWLockShared :: proc(SRWLock: ^SRWLOCK) -> BOOLEAN ---
  425. ReleaseSRWLockShared :: proc(SRWLock: ^SRWLOCK) ---
  426. InitializeConditionVariable :: proc(ConditionVariable: ^CONDITION_VARIABLE) ---
  427. WakeConditionVariable :: proc(ConditionVariable: ^CONDITION_VARIABLE) ---
  428. WakeAllConditionVariable :: proc(ConditionVariable: ^CONDITION_VARIABLE) ---
  429. SleepConditionVariableCS :: proc(ConditionVariable: ^CONDITION_VARIABLE, CriticalSection: ^CRITICAL_SECTION, dwMilliseconds: DWORD) -> BOOL ---
  430. SleepConditionVariableSRW :: proc(ConditionVariable: ^CONDITION_VARIABLE, SRWLock: ^SRWLOCK, dwMilliseconds: DWORD, Flags: LONG) -> BOOL ---
  431. GetFileType :: proc(file_handle: HANDLE) -> DWORD ---
  432. SetFilePointer :: proc(file_handle: HANDLE, distance_to_move: LONG, distance_to_move_high: ^LONG, move_method: DWORD) -> DWORD ---
  433. GetFileSizeEx :: proc(file_handle: HANDLE, file_size: ^LARGE_INTEGER) -> BOOL ---
  434. GetFileAttributesW :: proc(lpFileName: LPCWSTR) -> DWORD ---
  435. GetFileAttributesExW :: proc(lpFileName: LPCWSTR, fInfoLevelId: GET_FILEEX_INFO_LEVELS, lpFileInformation: LPVOID) -> BOOL ---
  436. GetSystemInfo :: proc(system_info: ^SYSTEM_INFO) ---
  437. GetVersionExW :: proc(osvi: ^OSVERSIONINFOEXW) ---
  438. GetSystemDirectoryW :: proc(lpBuffer: LPWSTR, uSize: UINT) -> UINT ---
  439. GetWindowsDirectoryW :: proc(lpBuffer: LPWSTR, uSize: UINT) -> UINT ---
  440. GetSystemDefaultLangID :: proc() -> LANGID ---
  441. GetSystemDefaultLCID :: proc() -> LCID ---
  442. GetSystemDefaultLocaleName :: proc(lpLocaleName: LPWSTR, cchLocaleName: INT) -> INT ---
  443. LCIDToLocaleName :: proc(Locale: LCID, lpName: LPWSTR, cchName: INT, dwFlags: DWORD) -> INT ---
  444. LocaleNameToLCID :: proc(lpName: LPCWSTR, dwFlags: DWORD) -> LCID ---
  445. SetDllDirectoryW :: proc(lpPathName: LPCWSTR) -> BOOL ---
  446. AddDllDirectory :: proc(NewDirectory: PCWSTR) -> rawptr ---
  447. RemoveDllDirectory :: proc(Cookie: rawptr) -> BOOL ---
  448. LoadLibraryW :: proc(c_str: LPCWSTR) -> HMODULE ---
  449. LoadLibraryExW :: proc(c_str: LPCWSTR, hFile: HANDLE, dwFlags: LoadLibraryEx_Flags) -> HMODULE ---
  450. FreeLibrary :: proc(h: HMODULE) -> BOOL ---
  451. GetProcAddress :: proc(h: HMODULE, c_str: LPCSTR) -> rawptr ---
  452. LoadResource :: proc(hModule: HMODULE, hResInfo: HRSRC) -> HGLOBAL ---
  453. FreeResource :: proc(hResData: HGLOBAL) -> BOOL ---
  454. LockResource :: proc(hResData: HGLOBAL) -> LPVOID ---
  455. SizeofResource :: proc(hModule: HMODULE, hResInfo: HRSRC) -> DWORD ---
  456. FindResourceW :: proc(hModule: HMODULE, lpName: LPCWSTR, lpType: LPCWSTR) -> HRSRC ---
  457. FindResourceExW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpName: LPCWSTR, wLanguage: LANGID) -> HRSRC ---
  458. EnumResourceNamesW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpEnumFunc: ENUMRESNAMEPROCW, lParam: LONG_PTR) -> BOOL ---
  459. EnumResourceNamesExW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpEnumFunc: ENUMRESNAMEPROCW, lParam: LONG_PTR, dwFlags: DWORD, LangId: LANGID) -> BOOL ---
  460. EnumResourceTypesExW :: proc(hModule: HMODULE, lpEnumFunc: ENUMRESTYPEPROCW, lParam: LONG_PTR, dwFlags: DWORD, LangId: LANGID) -> BOOL ---
  461. EnumResourceLanguagesExW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpName: LPCWSTR, lpEnumFunc: ENUMRESLANGPROCW, lParam: LONG_PTR, dwFlags: DWORD, LangId: LANGID) -> BOOL ---
  462. LookupIconIdFromDirectory :: proc(presbits: PBYTE, fIcon: BOOL) -> INT ---
  463. LookupIconIdFromDirectoryEx :: proc(presbits: PBYTE, fIcon: BOOL, cxDesired: INT, cyDesired: INT, Flags: UINT) -> INT ---
  464. CreateIconFromResourceEx :: proc(presbits: PBYTE, dwResSize: DWORD, fIcon: BOOL, dwVer: DWORD, cxDesired: INT, cyDesired: INT, Flags: UINT) -> HICON ---
  465. GetFullPathNameW :: proc(filename: LPCWSTR, buffer_length: DWORD, buffer: LPCWSTR, file_part: ^LPCWSTR) -> DWORD ---
  466. GetLongPathNameW :: proc(short, long: LPCWSTR, len: DWORD) -> DWORD ---
  467. GetShortPathNameW :: proc(long, short: LPCWSTR, len: DWORD) -> DWORD ---
  468. GetFinalPathNameByHandleW :: proc(hFile: HANDLE, lpszFilePath: LPCWSTR, cchFilePath: DWORD, dwFlags: DWORD) -> DWORD ---
  469. SetEndOfFile :: proc(hFile: HANDLE) -> BOOL ---
  470. CreatePipe :: proc(hReadPipe, hWritePipe: ^HANDLE, lpPipeAttributes: LPSECURITY_ATTRIBUTES, nSize: DWORD) -> BOOL ---
  471. ConnectNamedPipe :: proc(hNamedPipe: HANDLE, lpOverlapped: LPOVERLAPPED) -> BOOL ---
  472. DisconnectNamedPipe :: proc(hNamedPipe: HANDLE) -> BOOL ---
  473. WaitNamedPipeW :: proc(lpNamedPipeName: LPCWSTR, nTimeOut: DWORD) -> BOOL ---
  474. AllocConsole :: proc() -> BOOL ---
  475. AttachConsole :: proc(dwProcessId: DWORD) -> BOOL ---
  476. SetConsoleCtrlHandler :: proc(HandlerRoutine: PHANDLER_ROUTINE, Add: BOOL) -> BOOL ---
  477. GenerateConsoleCtrlEvent :: proc(dwCtrlEvent: DWORD, dwProcessGroupId: DWORD) -> BOOL ---
  478. FreeConsole :: proc() -> BOOL ---
  479. GetConsoleWindow :: proc() -> HWND ---
  480. GetConsoleScreenBufferInfo :: proc(hConsoleOutput: HANDLE, lpConsoleScreenBufferInfo: PCONSOLE_SCREEN_BUFFER_INFO) -> BOOL ---
  481. SetConsoleScreenBufferSize :: proc(hConsoleOutput: HANDLE, dwSize: COORD) -> BOOL ---
  482. SetConsoleWindowInfo :: proc(hConsoleOutput: HANDLE, bAbsolute: BOOL, lpConsoleWindow: ^SMALL_RECT) -> BOOL ---
  483. GetConsoleCursorInfo :: proc(hConsoleOutput: HANDLE, lpConsoleCursorInfo: PCONSOLE_CURSOR_INFO) -> BOOL ---
  484. SetConsoleCursorInfo :: proc(hConsoleOutput: HANDLE, lpConsoleCursorInfo: PCONSOLE_CURSOR_INFO) -> BOOL ---
  485. GetDiskFreeSpaceExW :: proc(
  486. lpDirectoryName: LPCWSTR,
  487. lpFreeBytesAvailableToCaller: PULARGE_INTEGER,
  488. lpTotalNumberOfBytes: PULARGE_INTEGER,
  489. lpTotalNumberOfFreeBytes: PULARGE_INTEGER,
  490. ) -> BOOL ---
  491. GetLogicalProcessorInformation :: proc(buffer: ^SYSTEM_LOGICAL_PROCESSOR_INFORMATION, returnedLength: PDWORD) -> BOOL ---
  492. // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setfilecompletionnotificationmodes)
  493. SetFileCompletionNotificationModes :: proc(FileHandle: HANDLE, Flags: u8) -> BOOL ---
  494. // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-createiocompletionport)
  495. CreateIoCompletionPort :: proc(FileHandle: HANDLE, ExistingCompletionPort: HANDLE, CompletionKey: ULONG_PTR, NumberOfConcurrentThreads: DWORD) -> HANDLE ---
  496. //[MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-getqueuedcompletionstatus)
  497. GetQueuedCompletionStatus :: proc(CompletionPort: HANDLE, lpNumberOfBytesTransferred: ^DWORD, lpCompletionKey: PULONG_PTR, lpOverlapped: ^^OVERLAPPED, dwMilliseconds: DWORD) -> BOOL ---
  498. // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-getqueuedcompletionstatusex)
  499. GetQueuedCompletionStatusEx :: proc(CompletionPort: HANDLE, lpCompletionPortEntries: ^OVERLAPPED_ENTRY, ulCount: c_ulong, ulNumEntriesRemoved: ^c_ulong, dwMilliseconds: DWORD, fAlertable: BOOL) -> BOOL ---
  500. // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-postqueuedcompletionstatus)
  501. PostQueuedCompletionStatus :: proc(CompletionPort: HANDLE, dwNumberOfBytesTransferred: DWORD, dwCompletionKey: c_ulong, lpOverlapped: ^OVERLAPPED) -> BOOL ---
  502. // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-gethandleinformation)
  503. GetHandleInformation :: proc(hObject: HANDLE, lpdwFlags: ^DWORD) -> BOOL ---
  504. RtlCaptureStackBackTrace :: proc(FramesToSkip: ULONG, FramesToCapture: ULONG, BackTrace: [^]PVOID, BackTraceHash: PULONG) -> USHORT ---
  505. GetSystemPowerStatus :: proc(lpSystemPowerStatus: ^SYSTEM_POWER_STATUS) -> BOOL ---
  506. }
  507. DEBUG_PROCESS :: 0x00000001
  508. DEBUG_ONLY_THIS_PROCESS :: 0x00000002
  509. CREATE_SUSPENDED :: 0x00000004
  510. DETACHED_PROCESS :: 0x00000008
  511. CREATE_NEW_CONSOLE :: 0x00000010
  512. NORMAL_PRIORITY_CLASS :: 0x00000020
  513. IDLE_PRIORITY_CLASS :: 0x00000040
  514. HIGH_PRIORITY_CLASS :: 0x00000080
  515. REALTIME_PRIORITY_CLASS :: 0x00000100
  516. CREATE_NEW_PROCESS_GROUP :: 0x00000200
  517. CREATE_UNICODE_ENVIRONMENT :: 0x00000400
  518. CREATE_SEPARATE_WOW_VDM :: 0x00000800
  519. CREATE_SHARED_WOW_VDM :: 0x00001000
  520. CREATE_FORCEDOS :: 0x00002000
  521. BELOW_NORMAL_PRIORITY_CLASS :: 0x00004000
  522. ABOVE_NORMAL_PRIORITY_CLASS :: 0x00008000
  523. INHERIT_PARENT_AFFINITY :: 0x00010000
  524. INHERIT_CALLER_PRIORITY :: 0x00020000 // Deprecated
  525. CREATE_PROTECTED_PROCESS :: 0x00040000
  526. EXTENDED_STARTUPINFO_PRESENT :: 0x00080000
  527. PROCESS_MODE_BACKGROUND_BEGIN :: 0x00100000
  528. PROCESS_MODE_BACKGROUND_END :: 0x00200000
  529. CREATE_SECURE_PROCESS :: 0x00400000
  530. CREATE_BREAKAWAY_FROM_JOB :: 0x01000000
  531. CREATE_PRESERVE_CODE_AUTHZ_LEVEL :: 0x02000000
  532. CREATE_DEFAULT_ERROR_MODE :: 0x04000000
  533. CREATE_NO_WINDOW :: 0x08000000
  534. PROFILE_USER :: 0x10000000
  535. PROFILE_KERNEL :: 0x20000000
  536. PROFILE_SERVER :: 0x40000000
  537. CREATE_IGNORE_SYSTEM_DEFAULT :: 0x80000000
  538. THREAD_BASE_PRIORITY_LOWRT :: 15 // value that gets a thread to LowRealtime-1
  539. THREAD_BASE_PRIORITY_MAX :: 2 // maximum thread base priority boost
  540. THREAD_BASE_PRIORITY_MIN :: (-2) // minimum thread base priority boost
  541. THREAD_BASE_PRIORITY_IDLE :: (-15) // value that gets a thread to idle
  542. THREAD_PRIORITY_LOWEST :: THREAD_BASE_PRIORITY_MIN
  543. THREAD_PRIORITY_BELOW_NORMAL :: (THREAD_PRIORITY_LOWEST+1)
  544. THREAD_PRIORITY_NORMAL :: 0
  545. THREAD_PRIORITY_HIGHEST :: THREAD_BASE_PRIORITY_MAX
  546. THREAD_PRIORITY_ABOVE_NORMAL :: (THREAD_PRIORITY_HIGHEST-1)
  547. THREAD_PRIORITY_ERROR_RETURN :: (MAXLONG)
  548. THREAD_PRIORITY_TIME_CRITICAL :: THREAD_BASE_PRIORITY_LOWRT
  549. THREAD_PRIORITY_IDLE :: THREAD_BASE_PRIORITY_IDLE
  550. THREAD_MODE_BACKGROUND_BEGIN :: 0x00010000
  551. THREAD_MODE_BACKGROUND_END :: 0x00020000
  552. PROCESS_ALL_ACCESS :: 0x000F0000 | SYNCHRONIZE | 0xFFFF
  553. PROCESS_CREATE_PROCESS :: 0x0080
  554. PROCESS_CREATE_THREAD :: 0x0002
  555. PROCESS_DUP_HANDLE :: 0x0040
  556. PROCESS_QUERY_INFORMATION :: 0x0400
  557. PROCESS_QUERY_LIMITED_INFORMATION :: 0x1000
  558. PROCESS_SET_INFORMATION :: 0x0200
  559. PROCESS_SET_QUOTA :: 0x0100
  560. PROCESS_SUSPEND_RESUME :: 0x0800
  561. PROCESS_TERMINATE :: 0x0001
  562. PROCESS_VM_OPERATION :: 0x0008
  563. PROCESS_VM_READ :: 0x0010
  564. PROCESS_VM_WRITE :: 0x0020
  565. THREAD_ALL_ACCESS :: \
  566. THREAD_DIRECT_IMPERSONATION |
  567. THREAD_GET_CONTEXT |
  568. THREAD_IMPERSONATE |
  569. THREAD_QUERY_INFORMATION |
  570. THREAD_QUERY_LIMITED_INFORMATION |
  571. THREAD_SET_CONTEXT |
  572. THREAD_SET_INFORMATION |
  573. THREAD_SET_LIMITED_INFORMATION |
  574. THREAD_SET_THREAD_TOKEN |
  575. THREAD_SUSPEND_RESUME |
  576. THREAD_TERMINATE |
  577. SYNCHRONIZE
  578. THREAD_DIRECT_IMPERSONATION :: 0x0200
  579. THREAD_GET_CONTEXT :: 0x0008
  580. THREAD_IMPERSONATE :: 0x0100
  581. THREAD_QUERY_INFORMATION :: 0x0040
  582. THREAD_QUERY_LIMITED_INFORMATION :: 0x0800
  583. THREAD_SET_CONTEXT :: 0x0010
  584. THREAD_SET_INFORMATION :: 0x0020
  585. THREAD_SET_LIMITED_INFORMATION :: 0x0400
  586. THREAD_SET_THREAD_TOKEN :: 0x0080
  587. THREAD_SUSPEND_RESUME :: 0x0002
  588. THREAD_TERMINATE :: 0x0001
  589. COPY_FILE_FAIL_IF_EXISTS :: 0x00000001
  590. COPY_FILE_RESTARTABLE :: 0x00000002
  591. COPY_FILE_OPEN_SOURCE_FOR_WRITE :: 0x00000004
  592. COPY_FILE_ALLOW_DECRYPTED_DESTINATION :: 0x00000008
  593. COPY_FILE_COPY_SYMLINK :: 0x00000800
  594. COPY_FILE_NO_BUFFERING :: 0x00001000
  595. COPY_FILE_REQUEST_SECURITY_PRIVILEGES :: 0x00002000
  596. COPY_FILE_RESUME_FROM_PAUSE :: 0x00004000
  597. COPY_FILE_NO_OFFLOAD :: 0x00040000
  598. COPY_FILE_IGNORE_EDP_BLOCK :: 0x00400000
  599. COPY_FILE_IGNORE_SOURCE_ENCRYPTION :: 0x00800000
  600. COPY_FILE_DONT_REQUEST_DEST_WRITE_DAC :: 0x02000000
  601. COPY_FILE_REQUEST_COMPRESSED_TRAFFIC :: 0x10000000
  602. COPY_FILE_OPEN_AND_COPY_REPARSE_POINT :: 0x00200000
  603. COPY_FILE_DIRECTORY :: 0x00000080
  604. COPY_FILE_SKIP_ALTERNATE_STREAMS :: 0x00008000
  605. COPY_FILE_DISABLE_PRE_ALLOCATION :: 0x04000000
  606. COPY_FILE_ENABLE_LOW_FREE_SPACE_MODE :: 0x08000000
  607. SECTION_QUERY :: DWORD(0x0001)
  608. SECTION_MAP_WRITE :: DWORD(0x0002)
  609. SECTION_MAP_READ :: DWORD(0x0004)
  610. SECTION_MAP_EXECUTE :: DWORD(0x0008)
  611. SECTION_EXTEND_SIZE :: DWORD(0x0010)
  612. SECTION_ALL_ACCESS :: STANDARD_RIGHTS_REQUIRED | SECTION_QUERY | SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE
  613. SECTION_MAP_EXECUTE_EXPLICIT :: DWORD(0x0020)
  614. FILE_MAP_WRITE :: SECTION_MAP_WRITE
  615. FILE_MAP_READ :: SECTION_MAP_READ
  616. FILE_MAP_ALL_ACCESS :: SECTION_ALL_ACCESS
  617. FILE_MAP_EXECUTE :: SECTION_MAP_EXECUTE_EXPLICIT
  618. FILE_MAP_COPY :: DWORD(0x00000001)
  619. FILE_MAP_RESERVE :: DWORD(0x80000000)
  620. FILE_MAP_TARGETS_INVALID :: DWORD(0x40000000)
  621. FILE_MAP_LARGE_PAGES :: DWORD(0x20000000)
  622. // Flags for `SetFileCompletionNotificationModes`.
  623. FILE_SKIP_COMPLETION_PORT_ON_SUCCESS :: 0x1
  624. FILE_SKIP_SET_EVENT_ON_HANDLE :: 0x2
  625. PAGE_NOACCESS :: 0x01
  626. PAGE_READONLY :: 0x02
  627. PAGE_READWRITE :: 0x04
  628. PAGE_WRITECOPY :: 0x08
  629. PAGE_EXECUTE :: 0x10
  630. PAGE_EXECUTE_READ :: 0x20
  631. PAGE_EXECUTE_READWRITE :: 0x40
  632. PAGE_EXECUTE_WRITECOPY :: 0x80
  633. PAGE_GUARD :: 0x100
  634. PAGE_NOCACHE :: 0x200
  635. PAGE_WRITECOMBINE :: 0x400
  636. MEMORY_BASIC_INFORMATION :: struct {
  637. BaseAddress: PVOID,
  638. AllocationBase: PVOID,
  639. AllocationProtect: DWORD,
  640. PartitionId: WORD,
  641. RegionSize: SIZE_T,
  642. State: DWORD,
  643. Protect: DWORD,
  644. Type: DWORD,
  645. }
  646. PMEMORY_BASIC_INFORMATION :: ^MEMORY_BASIC_INFORMATION
  647. LPMEMORY_BASIC_INFORMATION :: ^MEMORY_BASIC_INFORMATION
  648. MEM_COMMIT :: 0x1000
  649. MEM_RESERVE :: 0x2000
  650. MEM_DECOMMIT :: 0x4000
  651. MEM_RELEASE :: 0x8000
  652. MEM_FREE :: 0x10000
  653. MEM_PRIVATE :: 0x20000
  654. MEM_MAPPED :: 0x40000
  655. MEM_RESET :: 0x80000
  656. MEM_TOP_DOWN :: 0x100000
  657. MEM_LARGE_PAGES :: 0x20000000
  658. MEM_4MB_PAGES :: 0x80000000
  659. @(default_calling_convention="system")
  660. foreign kernel32 {
  661. VirtualAlloc :: proc(
  662. lpAddress: LPVOID,
  663. dwSize: SIZE_T,
  664. flAllocationType: DWORD,
  665. flProtect: DWORD,
  666. ) -> LPVOID ---
  667. VirtualProtect :: proc(
  668. lpAddress: LPVOID,
  669. dwSize: SIZE_T,
  670. flNewProtect: DWORD,
  671. lpflOldProtect: PDWORD,
  672. ) -> BOOL ---
  673. VirtualFree :: proc(
  674. lpAddress: LPVOID,
  675. dwSize: SIZE_T,
  676. dwFreeType: DWORD,
  677. ) -> BOOL ---
  678. VirtualQuery :: proc(
  679. lpAddress: LPCVOID,
  680. lpBuffer: PMEMORY_BASIC_INFORMATION,
  681. dwLength: SIZE_T,
  682. ) -> SIZE_T ---
  683. VirtualAllocEx :: proc(
  684. hProcess: HANDLE,
  685. lpAddress: LPVOID,
  686. dwSize: SIZE_T,
  687. flAllocationType: DWORD,
  688. flProtect: DWORD,
  689. ) -> LPVOID ---
  690. VirtualFreeEx :: proc(
  691. hProcess: HANDLE,
  692. lpAddress: LPVOID,
  693. dwSize: SIZE_T,
  694. dwFreeType: DWORD,
  695. ) -> BOOL ---
  696. VirtualProtectEx :: proc(
  697. hProcess: HANDLE,
  698. lpAddress: LPVOID,
  699. dwSize: SIZE_T,
  700. flNewProtect: DWORD,
  701. lpflOldProtect: PDWORD,
  702. ) -> BOOL ---
  703. VirtualQueryEx :: proc(
  704. hProcess: HANDLE,
  705. lpAddress: LPCVOID,
  706. lpBuffer: PMEMORY_BASIC_INFORMATION,
  707. dwLength: SIZE_T,
  708. ) -> SIZE_T ---
  709. ReadProcessMemory :: proc(
  710. hProcess: HANDLE,
  711. lpBaseAddress: LPCVOID,
  712. lpBuffer: LPVOID,
  713. nSize: SIZE_T,
  714. lpNumberOfBytesRead: ^SIZE_T,
  715. ) -> BOOL ---
  716. WriteProcessMemory :: proc(
  717. hProcess: HANDLE,
  718. lpBaseAddress: LPVOID,
  719. lpBuffer: LPCVOID,
  720. nSize: SIZE_T,
  721. lpNumberOfBytesWritten: ^SIZE_T,
  722. ) -> BOOL ---
  723. CreateFileMappingW :: proc(
  724. hFile: HANDLE,
  725. lpFileMappingAttributes: LPSECURITY_ATTRIBUTES,
  726. flProtect: DWORD,
  727. dwMaximumSizeHigh: DWORD,
  728. dwMaximumSizeLow: DWORD,
  729. lpName: LPCWSTR,
  730. ) -> HANDLE ---
  731. OpenFileMappingW :: proc(
  732. dwDesiredAccess: DWORD,
  733. bInheritHandle: BOOL,
  734. lpName: LPCWSTR,
  735. ) -> HANDLE ---
  736. MapViewOfFile :: proc(
  737. hFileMappingObject: HANDLE,
  738. dwDesiredAccess: DWORD,
  739. dwFileOffsetHigh: DWORD,
  740. dwFileOffsetLow: DWORD,
  741. dwNumberOfBytesToMap: SIZE_T,
  742. ) -> LPVOID ---
  743. MapViewOfFileEx :: proc(
  744. hFileMappingObject: HANDLE,
  745. dwDesiredAccess: DWORD,
  746. dwFileOffsetHigh: DWORD,
  747. dwFileOffsetLow: DWORD,
  748. dwNumberOfBytesToMap: SIZE_T,
  749. lpBaseAddress: LPVOID,
  750. ) -> LPVOID ---
  751. FlushViewOfFile :: proc(
  752. lpBaseAddress: LPCVOID,
  753. dwNumberOfBytesToFlush: SIZE_T,
  754. ) -> BOOL ---
  755. UnmapViewOfFile :: proc(
  756. lpBaseAddress: LPCVOID,
  757. ) -> BOOL ---
  758. GetLargePageMinimum :: proc() -> SIZE_T ---
  759. GetProcessWorkingSetSizeEx :: proc(
  760. hProcess: HANDLE,
  761. lpMinimumWorkingSetSize: PSIZE_T,
  762. lpMaximumWorkingSetSize: PSIZE_T,
  763. Flags: PDWORD,
  764. ) -> BOOL ---
  765. SetProcessWorkingSetSizeEx :: proc(
  766. hProcess: HANDLE,
  767. dwMinimumWorkingSetSize: SIZE_T,
  768. dwMaximumWorkingSetSize: SIZE_T,
  769. Flags: DWORD,
  770. ) -> BOOL ---
  771. VirtualLock :: proc(
  772. lpAddress: LPVOID,
  773. dwSize: SIZE_T,
  774. ) -> BOOL ---
  775. VirtualUnlock :: proc(
  776. lpAddress: LPVOID,
  777. dwSize: SIZE_T,
  778. ) -> BOOL ---
  779. GetWriteWatch :: proc(
  780. dwFlags: DWORD,
  781. lpBaseAddress: PVOID,
  782. dwRegionSize: SIZE_T,
  783. lpAddresses: ^PVOID,
  784. lpdwCount: ^ULONG_PTR,
  785. lpdwGranularity: LPDWORD,
  786. ) -> UINT ---
  787. ResetWriteWatch :: proc(
  788. lpBaseAddress: LPVOID,
  789. dwRegionSize: SIZE_T,
  790. ) -> UINT ---
  791. }
  792. MEMORY_RESOURCE_NOTIFICATION_TYPE :: enum c_int {
  793. LowMemoryResourceNotification,
  794. HighMemoryResourceNotification,
  795. }
  796. LowMemoryResourceNotification :: MEMORY_RESOURCE_NOTIFICATION_TYPE.LowMemoryResourceNotification
  797. HighMemoryResourceNotification :: MEMORY_RESOURCE_NOTIFICATION_TYPE.HighMemoryResourceNotification
  798. @(default_calling_convention="system")
  799. foreign kernel32 {
  800. CreateMemoryResourceNotification :: proc(
  801. NotificationType: MEMORY_RESOURCE_NOTIFICATION_TYPE,
  802. ) -> HANDLE ---
  803. QueryMemoryResourceNotification :: proc(
  804. ResourceNotificationHandle: HANDLE,
  805. ResourceState: PBOOL,
  806. ) -> BOOL ---
  807. }
  808. FILE_CACHE_MAX_HARD_ENABLE :: DWORD(0x00000001)
  809. FILE_CACHE_MAX_HARD_DISABLE :: DWORD(0x00000002)
  810. FILE_CACHE_MIN_HARD_ENABLE :: DWORD(0x00000004)
  811. FILE_CACHE_MIN_HARD_DISABLE :: DWORD(0x00000008)
  812. @(default_calling_convention="system")
  813. foreign kernel32 {
  814. GetSystemFileCacheSize :: proc(
  815. lpMinimumFileCacheSize: PSIZE_T,
  816. lpMaximumFileCacheSize: PSIZE_T,
  817. lpFlags: PDWORD,
  818. ) -> BOOL ---
  819. SetSystemFileCacheSize :: proc(
  820. MinimumFileCacheSize: SIZE_T,
  821. MaximumFileCacheSize: SIZE_T,
  822. Flags: DWORD,
  823. ) -> BOOL ---
  824. CreateFileMappingNumaW :: proc(
  825. hFile: HANDLE,
  826. lpFileMappingAttributes: LPSECURITY_ATTRIBUTES,
  827. flProtect: DWORD,
  828. dwMaximumSizeHigh: DWORD,
  829. dwMaximumSizeLow: DWORD,
  830. lpName: LPCWSTR,
  831. nndPreferred: DWORD,
  832. ) -> HANDLE ---
  833. }
  834. WIN32_MEMORY_RANGE_ENTRY :: struct {
  835. VirtualAddress: PVOID,
  836. NumberOfBytes: SIZE_T,
  837. }
  838. PWIN32_MEMORY_RANGE_ENTRY :: ^WIN32_MEMORY_RANGE_ENTRY
  839. @(default_calling_convention="system")
  840. foreign kernel32 {
  841. PrefetchVirtualMemory :: proc(
  842. hProcess: HANDLE,
  843. NumberOfEntries: ULONG_PTR,
  844. VirtualAddresses: PWIN32_MEMORY_RANGE_ENTRY,
  845. Flags: ULONG,
  846. ) -> BOOL ---
  847. CreateFileMappingFromApp :: proc(
  848. hFile: HANDLE,
  849. SecurityAttributes: PSECURITY_ATTRIBUTES,
  850. PageProtection: ULONG,
  851. MaximumSize: ULONG64,
  852. Name: PCWSTR,
  853. ) -> HANDLE ---
  854. MapViewOfFileFromApp :: proc(
  855. hFileMappingObject: HANDLE,
  856. DesiredAccess: ULONG,
  857. FileOffset: ULONG64,
  858. NumberOfBytesToMap: SIZE_T,
  859. ) -> PVOID ---
  860. UnmapViewOfFileEx :: proc(
  861. BaseAddress: PVOID,
  862. UnmapFlags: ULONG,
  863. ) -> BOOL ---
  864. AllocateUserPhysicalPages :: proc(
  865. hProcess: HANDLE,
  866. NumberOfPages: PULONG_PTR,
  867. PageArray: PULONG_PTR,
  868. ) -> BOOL ---
  869. FreeUserPhysicalPages :: proc(
  870. hProcess: HANDLE,
  871. NumberOfPages: PULONG_PTR,
  872. PageArray: PULONG_PTR,
  873. ) -> BOOL ---
  874. MapUserPhysicalPages :: proc(
  875. VirtualAddress: PVOID,
  876. NumberOfPages: ULONG_PTR,
  877. PageArray: PULONG_PTR,
  878. ) -> BOOL ---
  879. AllocateUserPhysicalPagesNuma :: proc(
  880. hProcess: HANDLE,
  881. NumberOfPages: PULONG_PTR,
  882. PageArray: PULONG_PTR,
  883. nndPreferred: DWORD,
  884. ) -> BOOL ---
  885. VirtualAllocExNuma :: proc(
  886. hProcess: HANDLE,
  887. lpAddress: LPVOID,
  888. dwSize: SIZE_T,
  889. flAllocationType: DWORD,
  890. flProtect: DWORD,
  891. nndPreferred: DWORD,
  892. ) -> LPVOID ---
  893. }
  894. MEHC_PATROL_SCRUBBER_PRESENT :: ULONG(0x1)
  895. @(default_calling_convention="system")
  896. foreign kernel32 {
  897. GetMemoryErrorHandlingCapabilities :: proc(
  898. Capabilities: PULONG,
  899. ) -> BOOL ---
  900. }
  901. @(default_calling_convention="system")
  902. foreign kernel32 {
  903. GlobalMemoryStatusEx :: proc(
  904. lpBuffer: ^MEMORYSTATUSEX,
  905. ) -> BOOL ---
  906. }
  907. PBAD_MEMORY_CALLBACK_ROUTINE :: #type proc "system" ()
  908. @(default_calling_convention="system")
  909. foreign kernel32 {
  910. RegisterBadMemoryNotification :: proc(
  911. Callback: PBAD_MEMORY_CALLBACK_ROUTINE,
  912. ) -> PVOID ---
  913. UnregisterBadMemoryNotification :: proc(
  914. RegistrationHandle: PVOID,
  915. ) -> BOOL ---
  916. }
  917. OFFER_PRIORITY :: enum c_int {
  918. VmOfferPriorityVeryLow = 1,
  919. VmOfferPriorityLow,
  920. VmOfferPriorityBelowNormal,
  921. VmOfferPriorityNormal,
  922. }
  923. VmOfferPriorityVeryLow :: OFFER_PRIORITY.VmOfferPriorityVeryLow
  924. VmOfferPriorityLow :: OFFER_PRIORITY.VmOfferPriorityLow
  925. VmOfferPriorityBelowNormal :: OFFER_PRIORITY.VmOfferPriorityBelowNormal
  926. VmOfferPriorityNormal :: OFFER_PRIORITY.VmOfferPriorityNormal
  927. @(default_calling_convention="system")
  928. foreign kernel32 {
  929. OfferVirtualMemory :: proc(
  930. VirtualAddress: PVOID,
  931. Size: SIZE_T,
  932. Priority: OFFER_PRIORITY,
  933. ) -> DWORD ---
  934. ReclaimVirtualMemory :: proc(
  935. VirtualAddress: PVOID,
  936. Size: SIZE_T,
  937. ) -> DWORD ---
  938. DiscardVirtualMemory :: proc(
  939. VirtualAddress: PVOID,
  940. Size: SIZE_T,
  941. ) -> DWORD ---
  942. VirtualAllocFromApp :: proc(
  943. BaseAddress: PVOID,
  944. Size: SIZE_T,
  945. AllocationType: ULONG,
  946. Protection: ULONG,
  947. ) -> PVOID ---
  948. VirtualProtectFromApp :: proc(
  949. Address: PVOID,
  950. Size: SIZE_T,
  951. NewProtection: ULONG,
  952. OldProtection: PULONG,
  953. ) -> BOOL ---
  954. OpenFileMappingFromApp :: proc(
  955. DesiredAccess: ULONG,
  956. InheritHandle: BOOL,
  957. Name: PCWSTR,
  958. ) -> HANDLE ---
  959. }
  960. WIN32_MEMORY_INFORMATION_CLASS :: enum c_int {
  961. MemoryRegionInfo,
  962. }
  963. MemoryRegionInfo :: WIN32_MEMORY_INFORMATION_CLASS.MemoryRegionInfo
  964. WIN32_MEMORY_REGION_INFORMATION :: struct {
  965. AllocationBase: PVOID,
  966. AllocationProtect: ULONG,
  967. u: WIN32_MEMORY_REGION_INFORMATION_u,
  968. RegionSize: SIZE_T,
  969. CommitSize: SIZE_T,
  970. }
  971. WIN32_MEMORY_REGION_INFORMATION_u :: struct #raw_union {
  972. u: [1]u32,
  973. Flags: ULONG,
  974. s: WIN32_MEMORY_REGION_INFORMATION_u_s,
  975. }
  976. WIN32_MEMORY_REGION_INFORMATION_u_s :: struct {
  977. Bitfield: ULONG,
  978. }
  979. WIN32_MEMORY_REGION_INFORMATION_u_s_Bitfield :: distinct ULONG
  980. /*bit_field #align(align_of(ULONG)) {
  981. Private : 1-0,
  982. MappedDataFile : 2-1,
  983. MappedImage : 3-2,
  984. MappedPageFile : 4-3,
  985. MappedPhysical : 5-4,
  986. DirectMapped : 6-5,
  987. Reserved : 32-6,
  988. }*/
  989. @(default_calling_convention="system")
  990. foreign one_core {
  991. QueryVirtualMemoryInformation :: proc(
  992. Process: HANDLE,
  993. VirtualAddress: PVOID,
  994. MemoryInformationClass: WIN32_MEMORY_INFORMATION_CLASS,
  995. MemoryInformation: PVOID,
  996. MemoryInformationSize: SIZE_T,
  997. ReturnSize: PSIZE_T,
  998. ) -> BOOL ---
  999. MapViewOfFileNuma2 :: proc(
  1000. FileMappingHandle: HANDLE,
  1001. ProcessHandle: HANDLE,
  1002. Offset: ULONG64,
  1003. BaseAddress: PVOID,
  1004. ViewSize: SIZE_T,
  1005. AllocationType: ULONG,
  1006. PageProtection: ULONG,
  1007. PreferredNode: ULONG,
  1008. ) -> PVOID ---
  1009. GetCommPorts :: proc(
  1010. lpPortNumbers: PULONG,
  1011. uPortNumbersCount: ULONG,
  1012. puPortNumbersFound: PULONG,
  1013. ) -> ULONG ---
  1014. }
  1015. NUMA_NO_PREFERRED_NODE :: 0xffffffff
  1016. MapViewOfFile2 :: #force_inline proc "system" (
  1017. FileMappingHandle: HANDLE,
  1018. ProcessHandle: HANDLE,
  1019. Offset: ULONG64,
  1020. BaseAddress: PVOID,
  1021. ViewSize: SIZE_T,
  1022. AllocationType: ULONG,
  1023. PageProtection: ULONG,
  1024. ) -> PVOID {
  1025. return MapViewOfFileNuma2(
  1026. FileMappingHandle,
  1027. ProcessHandle,
  1028. Offset,
  1029. BaseAddress,
  1030. ViewSize,
  1031. AllocationType,
  1032. PageProtection,
  1033. NUMA_NO_PREFERRED_NODE,
  1034. )
  1035. }
  1036. @(default_calling_convention="system")
  1037. foreign kernel32 {
  1038. UnmapViewOfFile2 :: proc(
  1039. ProcessHandle: HANDLE,
  1040. BaseAddress: PVOID,
  1041. UnmapFlags: ULONG,
  1042. ) -> BOOL ---
  1043. }
  1044. @(default_calling_convention="system")
  1045. foreign kernel32 {
  1046. GetProductInfo :: proc(
  1047. OSMajorVersion: DWORD,
  1048. OSMinorVersion: DWORD,
  1049. SpMajorVersion: DWORD,
  1050. SpMinorVersion: DWORD,
  1051. product_type: ^Windows_Product_Type,
  1052. ) -> BOOL ---
  1053. }
  1054. HandlerRoutine :: proc "system" (dwCtrlType: DWORD) -> BOOL
  1055. PHANDLER_ROUTINE :: HandlerRoutine
  1056. // NOTE(Jeroen, 2024-06-13): As Odin now supports bit_fields, we no longer need
  1057. // a helper procedure. `init_dcb_with_config` and `get_dcb_config` have been removed.
  1058. LPFIBER_START_ROUTINE :: #type proc "system" (lpFiberParameter: LPVOID)
  1059. @(default_calling_convention = "system")
  1060. foreign kernel32 {
  1061. CreateFiber :: proc(dwStackSize: SIZE_T, lpStartAddress: LPFIBER_START_ROUTINE, lpParameter: LPVOID) -> LPVOID ---
  1062. DeleteFiber :: proc(lpFiber: LPVOID) ---
  1063. ConvertThreadToFiber :: proc(lpParameter: LPVOID) -> LPVOID ---
  1064. SwitchToFiber :: proc(lpFiber: LPVOID) ---
  1065. }
  1066. LOGICAL_PROCESSOR_RELATIONSHIP :: enum c_int {
  1067. RelationProcessorCore,
  1068. RelationNumaNode,
  1069. RelationCache,
  1070. RelationProcessorPackage,
  1071. RelationGroup,
  1072. RelationProcessorDie,
  1073. RelationNumaNodeEx,
  1074. RelationProcessorModule,
  1075. RelationAll = 0xffff,
  1076. }
  1077. PROCESSOR_CACHE_TYPE :: enum c_int {
  1078. CacheUnified,
  1079. CacheInstruction,
  1080. CacheData,
  1081. CacheTrace,
  1082. }
  1083. CACHE_DESCRIPTOR :: struct {
  1084. Level: BYTE,
  1085. Associativity: BYTE,
  1086. LineSize: WORD,
  1087. Size: DWORD,
  1088. Type: PROCESSOR_CACHE_TYPE,
  1089. }
  1090. ProcessorCore :: struct {
  1091. Flags: BYTE,
  1092. }
  1093. NumaNode :: struct {
  1094. NodeNumber: DWORD,
  1095. }
  1096. DUMMYUNIONNAME_u :: struct #raw_union {
  1097. Core: ProcessorCore,
  1098. Node: NumaNode,
  1099. Cache: CACHE_DESCRIPTOR,
  1100. Reserved: [2]ULONGLONG,
  1101. }
  1102. SYSTEM_LOGICAL_PROCESSOR_INFORMATION :: struct {
  1103. ProcessorMask: ULONG_PTR,
  1104. Relationship: LOGICAL_PROCESSOR_RELATIONSHIP,
  1105. DummyUnion: DUMMYUNIONNAME_u,
  1106. }
  1107. SYSTEM_POWER_STATUS :: struct {
  1108. ACLineStatus: AC_Line_Status,
  1109. BatteryFlag: Battery_Flags,
  1110. BatteryLifePercent: BYTE,
  1111. SystemStatusFlag: BYTE,
  1112. BatteryLifeTime: DWORD,
  1113. BatteryFullLifeTime: DWORD,
  1114. }
  1115. AC_Line_Status :: enum BYTE {
  1116. Offline = 0,
  1117. Online = 1,
  1118. Unknown = 255,
  1119. }
  1120. Battery_Flag :: enum BYTE {
  1121. High = 0,
  1122. Low = 1,
  1123. Critical = 2,
  1124. Charging = 3,
  1125. No_Battery = 7,
  1126. }
  1127. Battery_Flags :: bit_set[Battery_Flag; BYTE]
  1128. /* Global Memory Flags */
  1129. GMEM_FIXED :: 0x0000
  1130. GMEM_MOVEABLE :: 0x0002
  1131. GMEM_NOCOMPACT :: 0x0010
  1132. GMEM_NODISCARD :: 0x0020
  1133. GMEM_ZEROINIT :: 0x0040
  1134. GMEM_MODIFY :: 0x0080
  1135. GMEM_DISCARDABLE :: 0x0100
  1136. GMEM_NOT_BANKED :: 0x1000
  1137. GMEM_SHARE :: 0x2000
  1138. GMEM_DDESHARE :: 0x2000
  1139. GMEM_NOTIFY :: 0x4000
  1140. GMEM_LOWER :: GMEM_NOT_BANKED
  1141. GMEM_VALID_FLAGS :: 0x7F72
  1142. GMEM_INVALID_HANDLE :: 0x8000
  1143. GHND :: (GMEM_MOVEABLE | GMEM_ZEROINIT)
  1144. GPTR :: (GMEM_FIXED | GMEM_ZEROINIT)
  1145. LPTOP_LEVEL_EXCEPTION_FILTER :: PVECTORED_EXCEPTION_HANDLER
  1146. ACTCTXW :: struct {
  1147. Size: ULONG,
  1148. Flags: DWORD,
  1149. Source: LPCWSTR,
  1150. ProcessorArchitecture: USHORT,
  1151. LangId: LANGID,
  1152. AssemblyDirectory: LPCWSTR,
  1153. ResourceName: LPCWSTR,
  1154. ApplicationName: LPCWSTR,
  1155. Module: HMODULE,
  1156. }
  1157. PACTCTXW :: ^ACTCTXW
  1158. PCACTCTXW :: ^ACTCTXW
  1159. ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID :: 0x001
  1160. ACTCTX_FLAG_LANGID_VALID :: 0x002
  1161. ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID :: 0x004
  1162. ACTCTX_FLAG_RESOURCE_NAME_VALID :: 0x008
  1163. ACTCTX_FLAG_SET_PROCESS_DEFAULT :: 0x010
  1164. ACTCTX_FLAG_APPLICATION_NAME_VALID :: 0x020
  1165. ACTCTX_FLAG_HMODULE_VALID :: 0x080
  1166. @(default_calling_convention="system")
  1167. foreign kernel32 {
  1168. CreateActCtxW :: proc(pActCtx: ^ACTCTXW) -> HANDLE ---
  1169. ActivateActCtx :: proc(hActCtx: HANDLE, lpCookie: ^ULONG_PTR) -> BOOL ---
  1170. }