kernel32.odin 44 KB

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