| ... | @@ -5,90 +5,59 @@ const BOOL = windows.BOOL; | ... | @@ -5,90 +5,59 @@ const BOOL = windows.BOOL; |
| 5 | const BOOLEAN = windows.BOOLEAN; | 5 | const BOOLEAN = windows.BOOLEAN; |
| 6 | const CONDITION_VARIABLE = windows.CONDITION_VARIABLE; | 6 | const CONDITION_VARIABLE = windows.CONDITION_VARIABLE; |
| 7 | const CONSOLE_SCREEN_BUFFER_INFO = windows.CONSOLE_SCREEN_BUFFER_INFO; | 7 | const CONSOLE_SCREEN_BUFFER_INFO = windows.CONSOLE_SCREEN_BUFFER_INFO; |
| 8 | const CONTEXT = windows.CONTEXT; | | |
| 9 | const COORD = windows.COORD; | 8 | const COORD = windows.COORD; |
| | 9 | const CRITICAL_SECTION = windows.CRITICAL_SECTION; |
| 10 | const DWORD = windows.DWORD; | 10 | const DWORD = windows.DWORD; |
| 11 | const DWORD64 = windows.DWORD64; | 11 | const FARPROC = windows.FARPROC; |
| 12 | const FILE_INFO_BY_HANDLE_CLASS = windows.FILE_INFO_BY_HANDLE_CLASS; | 12 | const FILETIME = windows.FILETIME; |
| 13 | const HANDLE = windows.HANDLE; | 13 | const HANDLE = windows.HANDLE; |
| | 14 | const HANDLER_ROUTINE = windows.HANDLER_ROUTINE; |
| | 15 | const HLOCAL = windows.HLOCAL; |
| 14 | const HMODULE = windows.HMODULE; | 16 | const HMODULE = windows.HMODULE; |
| 15 | const HKEY = windows.HKEY; | 17 | const INIT_ONCE = windows.INIT_ONCE; |
| 16 | const HRESULT = windows.HRESULT; | 18 | const INIT_ONCE_FN = windows.INIT_ONCE_FN; |
| 17 | const LARGE_INTEGER = windows.LARGE_INTEGER; | 19 | const LARGE_INTEGER = windows.LARGE_INTEGER; |
| | 20 | const LPCSTR = windows.LPCSTR; |
| | 21 | const LPCVOID = windows.LPCVOID; |
| 18 | const LPCWSTR = windows.LPCWSTR; | 22 | const LPCWSTR = windows.LPCWSTR; |
| 19 | const LPTHREAD_START_ROUTINE = windows.LPTHREAD_START_ROUTINE; | 23 | const LPTHREAD_START_ROUTINE = windows.LPTHREAD_START_ROUTINE; |
| 20 | const LPVOID = windows.LPVOID; | 24 | const LPVOID = windows.LPVOID; |
| 21 | const LPWSTR = windows.LPWSTR; | 25 | const LPWSTR = windows.LPWSTR; |
| 22 | const MODULEINFO = windows.MODULEINFO; | 26 | const MODULEENTRY32 = windows.MODULEENTRY32; |
| 23 | const OVERLAPPED = windows.OVERLAPPED; | 27 | const OVERLAPPED = windows.OVERLAPPED; |
| 24 | const PERFORMANCE_INFORMATION = windows.PERFORMANCE_INFORMATION; | 28 | const OVERLAPPED_ENTRY = windows.OVERLAPPED_ENTRY; |
| 25 | const PROCESS_MEMORY_COUNTERS = windows.PROCESS_MEMORY_COUNTERS; | 29 | const PMEMORY_BASIC_INFORMATION = windows.PMEMORY_BASIC_INFORMATION; |
| 26 | const PSAPI_WS_WATCH_INFORMATION = windows.PSAPI_WS_WATCH_INFORMATION; | 30 | const PROCESS_INFORMATION = windows.PROCESS_INFORMATION; |
| 27 | const PSAPI_WS_WATCH_INFORMATION_EX = windows.PSAPI_WS_WATCH_INFORMATION_EX; | | |
| 28 | const SECURITY_ATTRIBUTES = windows.SECURITY_ATTRIBUTES; | 31 | const SECURITY_ATTRIBUTES = windows.SECURITY_ATTRIBUTES; |
| 29 | const SIZE_T = windows.SIZE_T; | 32 | const SIZE_T = windows.SIZE_T; |
| 30 | const SRWLOCK = windows.SRWLOCK; | 33 | const SRWLOCK = windows.SRWLOCK; |
| | 34 | const STARTUPINFOW = windows.STARTUPINFOW; |
| | 35 | const UCHAR = windows.UCHAR; |
| 31 | const UINT = windows.UINT; | 36 | const UINT = windows.UINT; |
| | 37 | const ULONG = windows.ULONG; |
| | 38 | const ULONG_PTR = windows.ULONG_PTR; |
| | 39 | const va_list = windows.va_list; |
| 32 | const VECTORED_EXCEPTION_HANDLER = windows.VECTORED_EXCEPTION_HANDLER; | 40 | const VECTORED_EXCEPTION_HANDLER = windows.VECTORED_EXCEPTION_HANDLER; |
| 33 | const WCHAR = windows.WCHAR; | 41 | const WCHAR = windows.WCHAR; |
| | 42 | const WIN32_FIND_DATAW = windows.WIN32_FIND_DATAW; |
| | 43 | const Win32Error = windows.Win32Error; |
| 34 | const WINAPI = windows.WINAPI; | 44 | const WINAPI = windows.WINAPI; |
| 35 | const WORD = windows.WORD; | 45 | const WORD = windows.WORD; |
| 36 | const Win32Error = windows.Win32Error; | | |
| 37 | const va_list = windows.va_list; | | |
| 38 | const HLOCAL = windows.HLOCAL; | | |
| 39 | const FILETIME = windows.FILETIME; | | |
| 40 | const STARTUPINFOW = windows.STARTUPINFOW; | | |
| 41 | const PROCESS_INFORMATION = windows.PROCESS_INFORMATION; | | |
| 42 | const OVERLAPPED_ENTRY = windows.OVERLAPPED_ENTRY; | | |
| 43 | const LPHEAP_SUMMARY = windows.LPHEAP_SUMMARY; | | |
| 44 | const ULONG_PTR = windows.ULONG_PTR; | | |
| 45 | const FILE_NOTIFY_INFORMATION = windows.FILE_NOTIFY_INFORMATION; | | |
| 46 | const HANDLER_ROUTINE = windows.HANDLER_ROUTINE; | | |
| 47 | const ULONG = windows.ULONG; | | |
| 48 | const PVOID = windows.PVOID; | | |
| 49 | const LPSTR = windows.LPSTR; | | |
| 50 | const PENUM_PAGE_FILE_CALLBACKA = windows.PENUM_PAGE_FILE_CALLBACKA; | | |
| 51 | const PENUM_PAGE_FILE_CALLBACKW = windows.PENUM_PAGE_FILE_CALLBACKW; | | |
| 52 | const INIT_ONCE = windows.INIT_ONCE; | | |
| 53 | const CRITICAL_SECTION = windows.CRITICAL_SECTION; | | |
| 54 | const WIN32_FIND_DATAW = windows.WIN32_FIND_DATAW; | | |
| 55 | const CHAR = windows.CHAR; | | |
| 56 | const BY_HANDLE_FILE_INFORMATION = windows.BY_HANDLE_FILE_INFORMATION; | | |
| 57 | const SYSTEM_INFO = windows.SYSTEM_INFO; | | |
| 58 | const LPOVERLAPPED_COMPLETION_ROUTINE = windows.LPOVERLAPPED_COMPLETION_ROUTINE; | | |
| 59 | const UCHAR = windows.UCHAR; | | |
| 60 | const FARPROC = windows.FARPROC; | | |
| 61 | const INIT_ONCE_FN = windows.INIT_ONCE_FN; | | |
| 62 | const PMEMORY_BASIC_INFORMATION = windows.PMEMORY_BASIC_INFORMATION; | | |
| 63 | const REGSAM = windows.REGSAM; | | |
| 64 | const LSTATUS = windows.LSTATUS; | | |
| 65 | const UNWIND_HISTORY_TABLE = windows.UNWIND_HISTORY_TABLE; | | |
| 66 | const RUNTIME_FUNCTION = windows.RUNTIME_FUNCTION; | | |
| 67 | const KNONVOLATILE_CONTEXT_POINTERS = windows.KNONVOLATILE_CONTEXT_POINTERS; | | |
| 68 | const EXCEPTION_ROUTINE = windows.EXCEPTION_ROUTINE; | | |
| 69 | const MODULEENTRY32 = windows.MODULEENTRY32; | | |
| 70 | const ULONGLONG = windows.ULONGLONG; | | |
| 71 | | | |
| 72 | pub extern "kernel32" fn AddVectoredExceptionHandler(First: c_ulong, Handler: ?VECTORED_EXCEPTION_HANDLER) callconv(WINAPI) ?*anyopaque; | | |
| 73 | pub extern "kernel32" fn RemoveVectoredExceptionHandler(Handle: HANDLE) callconv(WINAPI) c_ulong; | | |
| 74 | | | |
| 75 | pub extern "kernel32" fn CancelIo(hFile: HANDLE) callconv(WINAPI) BOOL; | | |
| 76 | pub extern "kernel32" fn CancelIoEx(hFile: HANDLE, lpOverlapped: ?*OVERLAPPED) callconv(WINAPI) BOOL; | | |
| 77 | | 46 | |
| 78 | pub extern "kernel32" fn CloseHandle(hObject: HANDLE) callconv(WINAPI) BOOL; | 47 | // I/O - Filesystem |
| 79 | | 48 | // TODO: Wrapper around NtCancelIoFile. |
| 80 | pub extern "kernel32" fn CreateDirectoryW(lpPathName: [*:0]const u16, lpSecurityAttributes: ?*SECURITY_ATTRIBUTES) callconv(WINAPI) BOOL; | 49 | pub extern "kernel32" fn CancelIo( |
| 81 | pub extern "kernel32" fn SetEndOfFile(hFile: HANDLE) callconv(WINAPI) BOOL; | 50 | hFile: HANDLE, |
| | 51 | ) callconv(WINAPI) BOOL; |
| 82 | | 52 | |
| 83 | pub extern "kernel32" fn CreateEventExW( | 53 | // TODO: Wrapper around NtCancelIoFileEx. |
| 84 | lpEventAttributes: ?*SECURITY_ATTRIBUTES, | 54 | pub extern "kernel32" fn CancelIoEx( |
| 85 | lpName: ?LPCWSTR, | 55 | hFile: HANDLE, |
| 86 | dwFlags: DWORD, | 56 | lpOverlapped: ?*OVERLAPPED, |
| 87 | dwDesiredAccess: DWORD, | 57 | ) callconv(WINAPI) BOOL; |
| 88 | ) callconv(WINAPI) ?HANDLE; | | |
| 89 | | 58 | |
| 90 | pub extern "kernel32" fn CreateFileW( | 59 | pub extern "kernel32" fn CreateFileW( |
| 91 | lpFileName: [*:0]const u16, | 60 | lpFileName: LPCWSTR, |
| 92 | dwDesiredAccess: DWORD, | 61 | dwDesiredAccess: DWORD, |
| 93 | dwShareMode: DWORD, | 62 | dwShareMode: DWORD, |
| 94 | lpSecurityAttributes: ?*SECURITY_ATTRIBUTES, | 63 | lpSecurityAttributes: ?*SECURITY_ATTRIBUTES, |
| ... | @@ -97,13 +66,7 @@ pub extern "kernel32" fn CreateFileW( | ... | @@ -97,13 +66,7 @@ pub extern "kernel32" fn CreateFileW( |
| 97 | hTemplateFile: ?HANDLE, | 66 | hTemplateFile: ?HANDLE, |
| 98 | ) callconv(WINAPI) HANDLE; | 67 | ) callconv(WINAPI) HANDLE; |
| 99 | | 68 | |
| 100 | pub extern "kernel32" fn CreatePipe( | 69 | // TODO A bunch of logic around NtCreateNamedPipe |
| 101 | hReadPipe: *HANDLE, | | |
| 102 | hWritePipe: *HANDLE, | | |
| 103 | lpPipeAttributes: *const SECURITY_ATTRIBUTES, | | |
| 104 | nSize: DWORD, | | |
| 105 | ) callconv(WINAPI) BOOL; | | |
| 106 | | | |
| 107 | pub extern "kernel32" fn CreateNamedPipeW( | 70 | pub extern "kernel32" fn CreateNamedPipeW( |
| 108 | lpName: LPCWSTR, | 71 | lpName: LPCWSTR, |
| 109 | dwOpenMode: DWORD, | 72 | dwOpenMode: DWORD, |
| ... | @@ -115,349 +78,584 @@ pub extern "kernel32" fn CreateNamedPipeW( | ... | @@ -115,349 +78,584 @@ pub extern "kernel32" fn CreateNamedPipeW( |
| 115 | lpSecurityAttributes: ?*const SECURITY_ATTRIBUTES, | 78 | lpSecurityAttributes: ?*const SECURITY_ATTRIBUTES, |
| 116 | ) callconv(WINAPI) HANDLE; | 79 | ) callconv(WINAPI) HANDLE; |
| 117 | | 80 | |
| 118 | pub extern "kernel32" fn CreateProcessW( | 81 | pub extern "kernel32" fn FindFirstFileW( |
| 119 | lpApplicationName: ?LPCWSTR, | 82 | lpFileName: LPCWSTR, |
| 120 | lpCommandLine: ?LPWSTR, | 83 | lpFindFileData: *WIN32_FIND_DATAW, |
| 121 | lpProcessAttributes: ?*SECURITY_ATTRIBUTES, | 84 | ) callconv(WINAPI) HANDLE; |
| 122 | lpThreadAttributes: ?*SECURITY_ATTRIBUTES, | 85 | |
| 123 | bInheritHandles: BOOL, | 86 | pub extern "kernel32" fn FindClose( |
| 124 | dwCreationFlags: DWORD, | 87 | hFindFile: HANDLE, |
| 125 | lpEnvironment: ?*anyopaque, | | |
| 126 | lpCurrentDirectory: ?LPCWSTR, | | |
| 127 | lpStartupInfo: *STARTUPINFOW, | | |
| 128 | lpProcessInformation: *PROCESS_INFORMATION, | | |
| 129 | ) callconv(WINAPI) BOOL; | 88 | ) callconv(WINAPI) BOOL; |
| 130 | | 89 | |
| 131 | pub extern "kernel32" fn CreateSymbolicLinkW(lpSymlinkFileName: [*:0]const u16, lpTargetFileName: [*:0]const u16, dwFlags: DWORD) callconv(WINAPI) BOOLEAN; | 90 | // TODO: Wrapper around RtlGetFullPathName_UEx |
| | 91 | pub extern "kernel32" fn GetFullPathNameW( |
| | 92 | lpFileName: LPCWSTR, |
| | 93 | nBufferLength: DWORD, |
| | 94 | lpBuffer: LPWSTR, |
| | 95 | lpFilePart: ?*?LPWSTR, |
| | 96 | ) callconv(WINAPI) DWORD; |
| 132 | | 97 | |
| 133 | pub extern "kernel32" fn CreateIoCompletionPort(FileHandle: HANDLE, ExistingCompletionPort: ?HANDLE, CompletionKey: ULONG_PTR, NumberOfConcurrentThreads: DWORD) callconv(WINAPI) ?HANDLE; | 98 | // TODO: Matches `STD_*_HANDLE` to peb().ProcessParameters.Standard* |
| | 99 | pub extern "kernel32" fn GetStdHandle( |
| | 100 | nStdHandle: DWORD, |
| | 101 | ) callconv(WINAPI) ?HANDLE; |
| 134 | | 102 | |
| 135 | pub extern "kernel32" fn CreateThread(lpThreadAttributes: ?*SECURITY_ATTRIBUTES, dwStackSize: SIZE_T, lpStartAddress: LPTHREAD_START_ROUTINE, lpParameter: ?LPVOID, dwCreationFlags: DWORD, lpThreadId: ?*DWORD) callconv(WINAPI) ?HANDLE; | 103 | pub extern "kernel32" fn MoveFileExW( |
| | 104 | lpExistingFileName: LPCWSTR, |
| | 105 | lpNewFileName: LPCWSTR, |
| | 106 | dwFlags: DWORD, |
| | 107 | ) callconv(WINAPI) BOOL; |
| 136 | | 108 | |
| 137 | pub extern "kernel32" fn CreateToolhelp32Snapshot(dwFlags: DWORD, th32ProcessID: DWORD) callconv(WINAPI) HANDLE; | 109 | // TODO: Wrapper around NtSetInformationFile + `FILE_POSITION_INFORMATION`. |
| | 110 | // `FILE_STANDARD_INFORMATION` is also used if dwMoveMethod is `FILE_END` |
| | 111 | pub extern "kernel32" fn SetFilePointerEx( |
| | 112 | hFile: HANDLE, |
| | 113 | liDistanceToMove: LARGE_INTEGER, |
| | 114 | lpNewFilePointer: ?*LARGE_INTEGER, |
| | 115 | dwMoveMethod: DWORD, |
| | 116 | ) callconv(WINAPI) BOOL; |
| 138 | | 117 | |
| 139 | pub extern "kernel32" fn DeviceIoControl( | 118 | // TODO: Wrapper around NtSetInformationFile + `FILE_BASIC_INFORMATION` |
| 140 | h: HANDLE, | 119 | pub extern "kernel32" fn SetFileTime( |
| 141 | dwIoControlCode: DWORD, | 120 | hFile: HANDLE, |
| 142 | lpInBuffer: ?*const anyopaque, | 121 | lpCreationTime: ?*const FILETIME, |
| 143 | nInBufferSize: DWORD, | 122 | lpLastAccessTime: ?*const FILETIME, |
| 144 | lpOutBuffer: ?LPVOID, | 123 | lpLastWriteTime: ?*const FILETIME, |
| 145 | nOutBufferSize: DWORD, | | |
| 146 | lpBytesReturned: ?*DWORD, | | |
| 147 | lpOverlapped: ?*OVERLAPPED, | | |
| 148 | ) callconv(WINAPI) BOOL; | 124 | ) callconv(WINAPI) BOOL; |
| 149 | | 125 | |
| 150 | pub extern "kernel32" fn DeleteFileW(lpFileName: [*:0]const u16) callconv(WINAPI) BOOL; | 126 | pub extern "kernel32" fn WriteFile( |
| | 127 | in_hFile: HANDLE, |
| | 128 | in_lpBuffer: [*]const u8, |
| | 129 | in_nNumberOfBytesToWrite: DWORD, |
| | 130 | out_lpNumberOfBytesWritten: ?*DWORD, |
| | 131 | in_out_lpOverlapped: ?*OVERLAPPED, |
| | 132 | ) callconv(WINAPI) BOOL; |
| 151 | | 133 | |
| 152 | pub extern "kernel32" fn DuplicateHandle(hSourceProcessHandle: HANDLE, hSourceHandle: HANDLE, hTargetProcessHandle: HANDLE, lpTargetHandle: *HANDLE, dwDesiredAccess: DWORD, bInheritHandle: BOOL, dwOptions: DWORD) callconv(WINAPI) BOOL; | 134 | // TODO: wrapper for NtQueryInformationFile + `FILE_STANDARD_INFORMATION` |
| | 135 | pub extern "kernel32" fn GetFileSizeEx( |
| | 136 | hFile: HANDLE, |
| | 137 | lpFileSize: *LARGE_INTEGER, |
| | 138 | ) callconv(WINAPI) BOOL; |
| 153 | | 139 | |
| 154 | pub extern "kernel32" fn ExitProcess(exit_code: UINT) callconv(WINAPI) noreturn; | 140 | // TODO: Wrapper around GetStdHandle + NtFlushBuffersFile. |
| | 141 | pub extern "kernel32" fn FlushFileBuffers( |
| | 142 | hFile: HANDLE, |
| | 143 | ) callconv(WINAPI) BOOL; |
| 155 | | 144 | |
| 156 | pub extern "kernel32" fn FindFirstFileW(lpFileName: [*:0]const u16, lpFindFileData: *WIN32_FIND_DATAW) callconv(WINAPI) HANDLE; | 145 | // TODO: Wrapper around NtSetInformationFile + `FILE_IO_COMPLETION_NOTIFICATION_INFORMATION`. |
| 157 | pub extern "kernel32" fn FindClose(hFindFile: HANDLE) callconv(WINAPI) BOOL; | 146 | pub extern "kernel32" fn SetFileCompletionNotificationModes( |
| 158 | pub extern "kernel32" fn FindNextFileW(hFindFile: HANDLE, lpFindFileData: *WIN32_FIND_DATAW) callconv(WINAPI) BOOL; | 147 | FileHandle: HANDLE, |
| | 148 | Flags: UCHAR, |
| | 149 | ) callconv(WINAPI) BOOL; |
| 159 | | 150 | |
| 160 | pub extern "kernel32" fn FormatMessageW(dwFlags: DWORD, lpSource: ?LPVOID, dwMessageId: Win32Error, dwLanguageId: DWORD, lpBuffer: [*]u16, nSize: DWORD, Arguments: ?*va_list) callconv(WINAPI) DWORD; | 151 | // TODO: `RtlGetCurrentDirectory_U(nBufferLength * 2, lpBuffer)` |
| | 152 | pub extern "kernel32" fn GetCurrentDirectoryW( |
| | 153 | nBufferLength: DWORD, |
| | 154 | lpBuffer: ?[*]WCHAR, |
| | 155 | ) callconv(WINAPI) DWORD; |
| 161 | | 156 | |
| 162 | pub extern "kernel32" fn FreeEnvironmentStringsW(penv: [*:0]u16) callconv(WINAPI) BOOL; | 157 | // TODO: RtlDosPathNameToNtPathNameU_WithStatus + NtQueryAttributesFile. |
| | 158 | pub extern "kernel32" fn GetFileAttributesW( |
| | 159 | lpFileName: LPCWSTR, |
| | 160 | ) callconv(WINAPI) DWORD; |
| 163 | | 161 | |
| 164 | pub extern "kernel32" fn GetConsoleMode(in_hConsoleHandle: HANDLE, out_lpMode: *DWORD) callconv(WINAPI) BOOL; | 162 | pub extern "kernel32" fn ReadFile( |
| 165 | pub extern "kernel32" fn SetConsoleMode(in_hConsoleHandle: HANDLE, in_dwMode: DWORD) callconv(WINAPI) BOOL; | 163 | hFile: HANDLE, |
| | 164 | lpBuffer: LPVOID, |
| | 165 | nNumberOfBytesToRead: DWORD, |
| | 166 | lpNumberOfBytesRead: ?*DWORD, |
| | 167 | lpOverlapped: ?*OVERLAPPED, |
| | 168 | ) callconv(WINAPI) BOOL; |
| 166 | | 169 | |
| 167 | pub extern "kernel32" fn GetConsoleOutputCP() callconv(WINAPI) UINT; | 170 | pub extern "kernel32" fn GetSystemDirectoryW( |
| | 171 | lpBuffer: LPWSTR, |
| | 172 | uSize: UINT, |
| | 173 | ) callconv(WINAPI) UINT; |
| 168 | | 174 | |
| 169 | pub extern "kernel32" fn GetConsoleScreenBufferInfo(hConsoleOutput: HANDLE, lpConsoleScreenBufferInfo: *CONSOLE_SCREEN_BUFFER_INFO) callconv(WINAPI) BOOL; | 175 | // I/O - Kernel Objects |
| 170 | pub extern "kernel32" fn FillConsoleOutputCharacterA(hConsoleOutput: HANDLE, cCharacter: CHAR, nLength: DWORD, dwWriteCoord: COORD, lpNumberOfCharsWritten: *DWORD) callconv(WINAPI) BOOL; | | |
| 171 | pub extern "kernel32" fn FillConsoleOutputCharacterW(hConsoleOutput: HANDLE, cCharacter: WCHAR, nLength: DWORD, dwWriteCoord: COORD, lpNumberOfCharsWritten: *DWORD) callconv(WINAPI) BOOL; | | |
| 172 | pub extern "kernel32" fn FillConsoleOutputAttribute(hConsoleOutput: HANDLE, wAttribute: WORD, nLength: DWORD, dwWriteCoord: COORD, lpNumberOfAttrsWritten: *DWORD) callconv(WINAPI) BOOL; | | |
| 173 | pub extern "kernel32" fn SetConsoleCursorPosition(hConsoleOutput: HANDLE, dwCursorPosition: COORD) callconv(WINAPI) BOOL; | | |
| 174 | | 176 | |
| 175 | pub extern "kernel32" fn WriteConsoleW(hConsoleOutput: HANDLE, lpBuffer: [*]const u16, nNumberOfCharsToWrite: DWORD, lpNumberOfCharsWritten: ?*DWORD, lpReserved: ?LPVOID) callconv(WINAPI) BOOL; | 177 | // TODO: Wrapper around NtCreateEvent. |
| 176 | pub extern "kernel32" fn ReadConsoleOutputCharacterW( | 178 | pub extern "kernel32" fn CreateEventExW( |
| 177 | hConsoleOutput: windows.HANDLE, | 179 | lpEventAttributes: ?*SECURITY_ATTRIBUTES, |
| 178 | lpCharacter: [*]u16, | 180 | lpName: ?LPCWSTR, |
| 179 | nLength: windows.DWORD, | 181 | dwFlags: DWORD, |
| 180 | dwReadCoord: windows.COORD, | 182 | dwDesiredAccess: DWORD, |
| 181 | lpNumberOfCharsRead: *windows.DWORD, | 183 | ) callconv(WINAPI) ?HANDLE; |
| 182 | ) callconv(windows.WINAPI) windows.BOOL; | | |
| 183 | | 184 | |
| 184 | pub extern "kernel32" fn GetCurrentDirectoryW(nBufferLength: DWORD, lpBuffer: ?[*]WCHAR) callconv(WINAPI) DWORD; | 185 | // TODO: Wrapper around GetStdHandle + NtDuplicateObject. |
| | 186 | pub extern "kernel32" fn DuplicateHandle( |
| | 187 | hSourceProcessHandle: HANDLE, |
| | 188 | hSourceHandle: HANDLE, |
| | 189 | hTargetProcessHandle: HANDLE, |
| | 190 | lpTargetHandle: *HANDLE, |
| | 191 | dwDesiredAccess: DWORD, |
| | 192 | bInheritHandle: BOOL, |
| | 193 | dwOptions: DWORD, |
| | 194 | ) callconv(WINAPI) BOOL; |
| 185 | | 195 | |
| 186 | pub extern "kernel32" fn GetCurrentThread() callconv(WINAPI) HANDLE; | 196 | // TODO: Wrapper around GetStdHandle + NtQueryObject + NtSetInformationObject with .ObjectHandleFlagInformation. |
| 187 | pub extern "kernel32" fn GetCurrentThreadId() callconv(WINAPI) DWORD; | 197 | pub extern "kernel32" fn SetHandleInformation( |
| | 198 | hObject: HANDLE, |
| | 199 | dwMask: DWORD, |
| | 200 | dwFlags: DWORD, |
| | 201 | ) callconv(WINAPI) BOOL; |
| 188 | | 202 | |
| 189 | pub extern "kernel32" fn GetCurrentProcessId() callconv(WINAPI) DWORD; | 203 | // TODO: Wrapper around NtRemoveIoCompletion. |
| | 204 | pub extern "kernel32" fn GetQueuedCompletionStatus( |
| | 205 | CompletionPort: HANDLE, |
| | 206 | lpNumberOfBytesTransferred: *DWORD, |
| | 207 | lpCompletionKey: *ULONG_PTR, |
| | 208 | lpOverlapped: *?*OVERLAPPED, |
| | 209 | dwMilliseconds: DWORD, |
| | 210 | ) callconv(WINAPI) BOOL; |
| 190 | | 211 | |
| 191 | pub extern "kernel32" fn GetCurrentProcess() callconv(WINAPI) HANDLE; | 212 | // TODO: Wrapper around NtRemoveIoCompletionEx. |
| | 213 | pub extern "kernel32" fn GetQueuedCompletionStatusEx( |
| | 214 | CompletionPort: HANDLE, |
| | 215 | lpCompletionPortEntries: [*]OVERLAPPED_ENTRY, |
| | 216 | ulCount: ULONG, |
| | 217 | ulNumEntriesRemoved: *ULONG, |
| | 218 | dwMilliseconds: DWORD, |
| | 219 | fAlertable: BOOL, |
| | 220 | ) callconv(WINAPI) BOOL; |
| 192 | | 221 | |
| 193 | pub extern "kernel32" fn GetEnvironmentStringsW() callconv(WINAPI) ?[*:0]u16; | 222 | // TODO: Wrapper around NtSetIoCompletion with `IoStatus = .SUCCESS`. |
| | 223 | pub extern "kernel32" fn PostQueuedCompletionStatus( |
| | 224 | CompletionPort: HANDLE, |
| | 225 | dwNumberOfBytesTransferred: DWORD, |
| | 226 | dwCompletionKey: ULONG_PTR, |
| | 227 | lpOverlapped: ?*OVERLAPPED, |
| | 228 | ) callconv(WINAPI) BOOL; |
| 194 | | 229 | |
| 195 | pub extern "kernel32" fn GetEnvironmentVariableW(lpName: LPWSTR, lpBuffer: [*]u16, nSize: DWORD) callconv(WINAPI) DWORD; | 230 | // TODO: |
| | 231 | // GetOverlappedResultEx with bAlertable=false, which calls: GetStdHandle + WaitForSingleObjectEx. |
| | 232 | // Uses the SwitchBack system to run implementations for older programs; Do we care about this? |
| | 233 | pub extern "kernel32" fn GetOverlappedResult( |
| | 234 | hFile: HANDLE, |
| | 235 | lpOverlapped: *OVERLAPPED, |
| | 236 | lpNumberOfBytesTransferred: *DWORD, |
| | 237 | bWait: BOOL, |
| | 238 | ) callconv(WINAPI) BOOL; |
| 196 | | 239 | |
| 197 | pub extern "kernel32" fn SetEnvironmentVariableW(lpName: LPCWSTR, lpValue: ?LPCWSTR) callconv(WINAPI) BOOL; | 240 | // TODO: Wrapper around NtCreateIoCompletion + NtSetInformationFile with FILE_COMPLETION_INFORMATION. |
| | 241 | // This would be better splitting into two functions. |
| | 242 | pub extern "kernel32" fn CreateIoCompletionPort( |
| | 243 | FileHandle: HANDLE, |
| | 244 | ExistingCompletionPort: ?HANDLE, |
| | 245 | CompletionKey: ULONG_PTR, |
| | 246 | NumberOfConcurrentThreads: DWORD, |
| | 247 | ) callconv(WINAPI) ?HANDLE; |
| 198 | | 248 | |
| 199 | pub extern "kernel32" fn GetExitCodeProcess(hProcess: HANDLE, lpExitCode: *DWORD) callconv(WINAPI) BOOL; | 249 | // TODO: Forwarder to NtAddVectoredExceptionHandler. |
| | 250 | pub extern "kernel32" fn AddVectoredExceptionHandler( |
| | 251 | First: ULONG, |
| | 252 | Handler: ?VECTORED_EXCEPTION_HANDLER, |
| | 253 | ) callconv(WINAPI) ?LPVOID; |
| | 254 | |
| | 255 | // TODO: Forwarder to NtRemoveVectoredExceptionHandler. |
| | 256 | pub extern "kernel32" fn RemoveVectoredExceptionHandler( |
| | 257 | Handle: HANDLE, |
| | 258 | ) callconv(WINAPI) ULONG; |
| | 259 | |
| | 260 | // TODO: Wrapper around RtlReportSilentProcessExit + NtTerminateProcess. |
| | 261 | pub extern "kernel32" fn TerminateProcess( |
| | 262 | hProcess: HANDLE, |
| | 263 | uExitCode: UINT, |
| | 264 | ) callconv(WINAPI) BOOL; |
| 200 | | 265 | |
| 201 | pub extern "kernel32" fn GetFileSizeEx(hFile: HANDLE, lpFileSize: *LARGE_INTEGER) callconv(WINAPI) BOOL; | 266 | // TODO: WaitForSingleObjectEx with bAlertable=false. |
| | 267 | pub extern "kernel32" fn WaitForSingleObject( |
| | 268 | hHandle: HANDLE, |
| | 269 | dwMilliseconds: DWORD, |
| | 270 | ) callconv(WINAPI) DWORD; |
| 202 | | 271 | |
| 203 | pub extern "kernel32" fn GetFileAttributesW(lpFileName: [*:0]const WCHAR) callconv(WINAPI) DWORD; | 272 | // TODO: Wrapper for GetStdHandle + NtWaitForSingleObject. |
| | 273 | // Sets up an activation context before calling NtWaitForSingleObject. |
| | 274 | pub extern "kernel32" fn WaitForSingleObjectEx( |
| | 275 | hHandle: HANDLE, |
| | 276 | dwMilliseconds: DWORD, |
| | 277 | bAlertable: BOOL, |
| | 278 | ) callconv(WINAPI) DWORD; |
| 204 | | 279 | |
| 205 | pub extern "kernel32" fn GetModuleFileNameW(hModule: ?HMODULE, lpFilename: [*]u16, nSize: DWORD) callconv(WINAPI) DWORD; | 280 | // TODO: WaitForMultipleObjectsEx with alertable=false |
| | 281 | pub extern "kernel32" fn WaitForMultipleObjects( |
| | 282 | nCount: DWORD, |
| | 283 | lpHandle: [*]const HANDLE, |
| | 284 | bWaitAll: BOOL, |
| | 285 | dwMilliseconds: DWORD, |
| | 286 | ) callconv(WINAPI) DWORD; |
| 206 | | 287 | |
| 207 | pub extern "kernel32" fn GetModuleHandleW(lpModuleName: ?[*:0]const WCHAR) callconv(WINAPI) ?HMODULE; | 288 | // TODO: Wrapper around NtWaitForMultipleObjects. |
| | 289 | pub extern "kernel32" fn WaitForMultipleObjectsEx( |
| | 290 | nCount: DWORD, |
| | 291 | lpHandle: [*]const HANDLE, |
| | 292 | bWaitAll: BOOL, |
| | 293 | dwMilliseconds: DWORD, |
| | 294 | bAlertable: BOOL, |
| | 295 | ) callconv(WINAPI) DWORD; |
| 208 | | 296 | |
| 209 | pub extern "kernel32" fn GetLastError() callconv(WINAPI) Win32Error; | 297 | // Process Management |
| 210 | pub extern "kernel32" fn SetLastError(dwErrCode: Win32Error) callconv(WINAPI) void; | | |
| 211 | | 298 | |
| 212 | pub extern "kernel32" fn GetFileInformationByHandleEx( | 299 | pub extern "kernel32" fn CreateProcessW( |
| 213 | in_hFile: HANDLE, | 300 | lpApplicationName: ?LPCWSTR, |
| 214 | in_FileInformationClass: FILE_INFO_BY_HANDLE_CLASS, | 301 | lpCommandLine: ?LPWSTR, |
| 215 | out_lpFileInformation: *anyopaque, | 302 | lpProcessAttributes: ?*SECURITY_ATTRIBUTES, |
| 216 | in_dwBufferSize: DWORD, | 303 | lpThreadAttributes: ?*SECURITY_ATTRIBUTES, |
| | 304 | bInheritHandles: BOOL, |
| | 305 | dwCreationFlags: DWORD, |
| | 306 | lpEnvironment: ?LPVOID, |
| | 307 | lpCurrentDirectory: ?LPCWSTR, |
| | 308 | lpStartupInfo: *STARTUPINFOW, |
| | 309 | lpProcessInformation: *PROCESS_INFORMATION, |
| 217 | ) callconv(WINAPI) BOOL; | 310 | ) callconv(WINAPI) BOOL; |
| 218 | | 311 | |
| 219 | pub extern "kernel32" fn GetFinalPathNameByHandleW( | 312 | // TODO: Fowarder to RtlExitUserProcess. |
| 220 | hFile: HANDLE, | 313 | pub extern "kernel32" fn ExitProcess( |
| 221 | lpszFilePath: [*]u16, | 314 | exit_code: UINT, |
| 222 | cchFilePath: DWORD, | 315 | ) callconv(WINAPI) noreturn; |
| 223 | dwFlags: DWORD, | | |
| 224 | ) callconv(WINAPI) DWORD; | | |
| 225 | | 316 | |
| 226 | pub extern "kernel32" fn GetFullPathNameW( | 317 | // TODO: SleepEx with bAlertable=false. |
| 227 | lpFileName: [*:0]const u16, | 318 | pub extern "kernel32" fn Sleep( |
| 228 | nBufferLength: u32, | 319 | dwMilliseconds: DWORD, |
| 229 | lpBuffer: [*]u16, | 320 | ) callconv(WINAPI) void; |
| 230 | lpFilePart: ?*?[*:0]u16, | | |
| 231 | ) callconv(@import("std").os.windows.WINAPI) u32; | | |
| 232 | | 321 | |
| 233 | pub extern "kernel32" fn GetOverlappedResult(hFile: HANDLE, lpOverlapped: *OVERLAPPED, lpNumberOfBytesTransferred: *DWORD, bWait: BOOL) callconv(WINAPI) BOOL; | 322 | // TODO: Wrapper around NtQueryInformationProcess with `PROCESS_BASIC_INFORMATION`. |
| | 323 | pub extern "kernel32" fn GetExitCodeProcess( |
| | 324 | hProcess: HANDLE, |
| | 325 | lpExitCode: *DWORD, |
| | 326 | ) callconv(WINAPI) BOOL; |
| 234 | | 327 | |
| 235 | pub extern "kernel32" fn GetProcessHeap() callconv(WINAPI) ?HANDLE; | 328 | // TODO: Already a wrapper for this, see `windows.GetCurrentProcess`. |
| | 329 | pub extern "kernel32" fn GetCurrentProcess() callconv(WINAPI) HANDLE; |
| 236 | | 330 | |
| 237 | pub extern "kernel32" fn GetProcessTimes(in_hProcess: HANDLE, out_lpCreationTime: *FILETIME, out_lpExitTime: *FILETIME, out_lpKernelTime: *FILETIME, out_lpUserTime: *FILETIME) callconv(WINAPI) BOOL; | 331 | // TODO: memcpy peb().ProcessParameters.Environment, mem.span(0). Requires locking the PEB. |
| | 332 | pub extern "kernel32" fn GetEnvironmentStringsW() callconv(WINAPI) ?LPWSTR; |
| 238 | | 333 | |
| 239 | pub extern "kernel32" fn GetQueuedCompletionStatus(CompletionPort: HANDLE, lpNumberOfBytesTransferred: *DWORD, lpCompletionKey: *ULONG_PTR, lpOverlapped: *?*OVERLAPPED, dwMilliseconds: DWORD) callconv(WINAPI) BOOL; | 334 | // TODO: RtlFreeHeap on the output of GetEnvironmentStringsW. |
| 240 | pub extern "kernel32" fn GetQueuedCompletionStatusEx( | 335 | pub extern "kernel32" fn FreeEnvironmentStringsW( |
| 241 | CompletionPort: HANDLE, | 336 | penv: LPWSTR, |
| 242 | lpCompletionPortEntries: [*]OVERLAPPED_ENTRY, | | |
| 243 | ulCount: ULONG, | | |
| 244 | ulNumEntriesRemoved: *ULONG, | | |
| 245 | dwMilliseconds: DWORD, | | |
| 246 | fAlertable: BOOL, | | |
| 247 | ) callconv(WINAPI) BOOL; | 337 | ) callconv(WINAPI) BOOL; |
| 248 | | 338 | |
| 249 | pub extern "kernel32" fn GetSystemInfo(lpSystemInfo: *SYSTEM_INFO) callconv(WINAPI) void; | 339 | // TODO: Wrapper around RtlQueryEnvironmentVariable. |
| 250 | pub extern "kernel32" fn GetSystemTimeAsFileTime(*FILETIME) callconv(WINAPI) void; | 340 | pub extern "kernel32" fn GetEnvironmentVariableW( |
| 251 | pub extern "kernel32" fn IsProcessorFeaturePresent(ProcessorFeature: DWORD) BOOL; | 341 | lpName: ?LPCWSTR, |
| 252 | | 342 | lpBuffer: ?[*]WCHAR, |
| 253 | pub extern "kernel32" fn GetSystemDirectoryW(lpBuffer: LPWSTR, uSize: UINT) callconv(WINAPI) UINT; | 343 | nSize: DWORD, |
| | 344 | ) callconv(WINAPI) DWORD; |
| 254 | | 345 | |
| 255 | pub extern "kernel32" fn HeapCreate(flOptions: DWORD, dwInitialSize: SIZE_T, dwMaximumSize: SIZE_T) callconv(WINAPI) ?HANDLE; | 346 | // TODO: Wrapper around RtlSetEnvironmentVar. |
| 256 | pub extern "kernel32" fn HeapDestroy(hHeap: HANDLE) callconv(WINAPI) BOOL; | 347 | pub extern "kernel32" fn SetEnvironmentVariableW( |
| 257 | pub extern "kernel32" fn HeapReAlloc(hHeap: HANDLE, dwFlags: DWORD, lpMem: *anyopaque, dwBytes: SIZE_T) callconv(WINAPI) ?*anyopaque; | 348 | lpName: LPCWSTR, |
| 258 | pub extern "kernel32" fn HeapSize(hHeap: HANDLE, dwFlags: DWORD, lpMem: *const anyopaque) callconv(WINAPI) SIZE_T; | 349 | lpValue: ?LPCWSTR, |
| 259 | pub extern "kernel32" fn HeapCompact(hHeap: HANDLE, dwFlags: DWORD) callconv(WINAPI) SIZE_T; | 350 | ) callconv(WINAPI) BOOL; |
| 260 | pub extern "kernel32" fn HeapSummary(hHeap: HANDLE, dwFlags: DWORD, lpSummary: LPHEAP_SUMMARY) callconv(WINAPI) BOOL; | | |
| 261 | | 351 | |
| 262 | pub extern "kernel32" fn GetStdHandle(in_nStdHandle: DWORD) callconv(WINAPI) ?HANDLE; | 352 | pub extern "kernel32" fn CreateToolhelp32Snapshot( |
| | 353 | dwFlags: DWORD, |
| | 354 | th32ProcessID: DWORD, |
| | 355 | ) callconv(WINAPI) HANDLE; |
| 263 | | 356 | |
| 264 | pub extern "kernel32" fn HeapAlloc(hHeap: HANDLE, dwFlags: DWORD, dwBytes: SIZE_T) callconv(WINAPI) ?*anyopaque; | 357 | // Threading |
| 265 | | 358 | |
| 266 | pub extern "kernel32" fn HeapFree(hHeap: HANDLE, dwFlags: DWORD, lpMem: *anyopaque) callconv(WINAPI) BOOL; | 359 | // TODO: Already a wrapper for this, see `windows.GetCurrentThreadId`. |
| | 360 | pub extern "kernel32" fn GetCurrentThreadId() callconv(WINAPI) DWORD; |
| 267 | | 361 | |
| 268 | pub extern "kernel32" fn HeapValidate(hHeap: HANDLE, dwFlags: DWORD, lpMem: ?*const anyopaque) callconv(WINAPI) BOOL; | 362 | // TODO: CreateRemoteThread with hProcess=NtCurrentProcess(). |
| | 363 | pub extern "kernel32" fn CreateThread( |
| | 364 | lpThreadAttributes: ?*SECURITY_ATTRIBUTES, |
| | 365 | dwStackSize: SIZE_T, |
| | 366 | lpStartAddress: LPTHREAD_START_ROUTINE, |
| | 367 | lpParameter: ?LPVOID, |
| | 368 | dwCreationFlags: DWORD, |
| | 369 | lpThreadId: ?*DWORD, |
| | 370 | ) callconv(WINAPI) ?HANDLE; |
| 269 | | 371 | |
| 270 | pub extern "kernel32" fn VirtualAlloc(lpAddress: ?LPVOID, dwSize: SIZE_T, flAllocationType: DWORD, flProtect: DWORD) callconv(WINAPI) ?LPVOID; | 372 | // TODO: Wrapper around RtlDelayExecution. |
| 271 | pub extern "kernel32" fn VirtualFree(lpAddress: ?LPVOID, dwSize: SIZE_T, dwFreeType: DWORD) callconv(WINAPI) BOOL; | 373 | pub extern "kernel32" fn SwitchToThread() callconv(WINAPI) BOOL; |
| 272 | pub extern "kernel32" fn VirtualQuery(lpAddress: ?LPVOID, lpBuffer: PMEMORY_BASIC_INFORMATION, dwLength: SIZE_T) callconv(WINAPI) SIZE_T; | | |
| 273 | | 374 | |
| 274 | pub extern "kernel32" fn LocalFree(hMem: HLOCAL) callconv(WINAPI) ?HLOCAL; | 375 | // Locks, critical sections, initializers |
| | 376 | |
| | 377 | // TODO: Forwarder to RtlInitializeCriticalSection |
| | 378 | pub extern "kernel32" fn InitializeCriticalSection( |
| | 379 | lpCriticalSection: *CRITICAL_SECTION, |
| | 380 | ) callconv(WINAPI) void; |
| | 381 | |
| | 382 | // TODO: Forwarder to RtlEnterCriticalSection |
| | 383 | pub extern "kernel32" fn EnterCriticalSection( |
| | 384 | lpCriticalSection: *CRITICAL_SECTION, |
| | 385 | ) callconv(WINAPI) void; |
| | 386 | |
| | 387 | // TODO: Forwarder to RtlLeaveCriticalSection |
| | 388 | pub extern "kernel32" fn LeaveCriticalSection( |
| | 389 | lpCriticalSection: *CRITICAL_SECTION, |
| | 390 | ) callconv(WINAPI) void; |
| | 391 | |
| | 392 | // TODO: Forwarder to RtlDeleteCriticalSection |
| | 393 | pub extern "kernel32" fn DeleteCriticalSection( |
| | 394 | lpCriticalSection: *CRITICAL_SECTION, |
| | 395 | ) callconv(WINAPI) void; |
| | 396 | |
| | 397 | // TODO: Forwarder to RtlTryAcquireSRWLockExclusive |
| | 398 | pub extern "kernel32" fn TryAcquireSRWLockExclusive( |
| | 399 | SRWLock: *SRWLOCK, |
| | 400 | ) callconv(WINAPI) BOOLEAN; |
| | 401 | |
| | 402 | // TODO: Forwarder to RtlAcquireSRWLockExclusive |
| | 403 | pub extern "kernel32" fn AcquireSRWLockExclusive( |
| | 404 | SRWLock: *SRWLOCK, |
| | 405 | ) callconv(WINAPI) void; |
| | 406 | |
| | 407 | // TODO: Forwarder to RtlReleaseSRWLockExclusive |
| | 408 | pub extern "kernel32" fn ReleaseSRWLockExclusive( |
| | 409 | SRWLock: *SRWLOCK, |
| | 410 | ) callconv(WINAPI) void; |
| | 411 | |
| | 412 | pub extern "kernel32" fn InitOnceExecuteOnce( |
| | 413 | InitOnce: *INIT_ONCE, |
| | 414 | InitFn: INIT_ONCE_FN, |
| | 415 | Parameter: ?*anyopaque, |
| | 416 | Context: ?*anyopaque, |
| | 417 | ) callconv(WINAPI) BOOL; |
| 275 | | 418 | |
| 276 | pub extern "kernel32" fn Module32First(hSnapshot: HANDLE, lpme: *MODULEENTRY32) callconv(WINAPI) BOOL; | 419 | // TODO: Forwarder to RtlWakeConditionVariable |
| | 420 | pub extern "kernel32" fn WakeConditionVariable( |
| | 421 | ConditionVariable: *CONDITION_VARIABLE, |
| | 422 | ) callconv(WINAPI) void; |
| 277 | | 423 | |
| 278 | pub extern "kernel32" fn Module32Next(hSnapshot: HANDLE, lpme: *MODULEENTRY32) callconv(WINAPI) BOOL; | 424 | // TODO: Forwarder to RtlWakeAllConditionVariable |
| | 425 | pub extern "kernel32" fn WakeAllConditionVariable( |
| | 426 | ConditionVariable: *CONDITION_VARIABLE, |
| | 427 | ) callconv(WINAPI) void; |
| 279 | | 428 | |
| 280 | pub extern "kernel32" fn MoveFileExW( | 429 | // TODO: |
| 281 | lpExistingFileName: [*:0]const u16, | 430 | // - dwMilliseconds -> LARGE_INTEGER. |
| 282 | lpNewFileName: [*:0]const u16, | 431 | // - RtlSleepConditionVariableSRW |
| 283 | dwFlags: DWORD, | 432 | // - return rc != .TIMEOUT |
| | 433 | pub extern "kernel32" fn SleepConditionVariableSRW( |
| | 434 | ConditionVariable: *CONDITION_VARIABLE, |
| | 435 | SRWLock: *SRWLOCK, |
| | 436 | dwMilliseconds: DWORD, |
| | 437 | Flags: ULONG, |
| 284 | ) callconv(WINAPI) BOOL; | 438 | ) callconv(WINAPI) BOOL; |
| 285 | | 439 | |
| 286 | pub extern "kernel32" fn PostQueuedCompletionStatus(CompletionPort: HANDLE, dwNumberOfBytesTransferred: DWORD, dwCompletionKey: ULONG_PTR, lpOverlapped: ?*OVERLAPPED) callconv(WINAPI) BOOL; | 440 | // Console management |
| 287 | | 441 | |
| 288 | pub extern "kernel32" fn ReadDirectoryChangesW( | 442 | pub extern "kernel32" fn GetConsoleMode( |
| 289 | hDirectory: HANDLE, | 443 | hConsoleHandle: HANDLE, |
| 290 | lpBuffer: [*]align(@alignOf(FILE_NOTIFY_INFORMATION)) u8, | 444 | lpMode: *DWORD, |
| 291 | nBufferLength: DWORD, | | |
| 292 | bWatchSubtree: BOOL, | | |
| 293 | dwNotifyFilter: DWORD, | | |
| 294 | lpBytesReturned: ?*DWORD, | | |
| 295 | lpOverlapped: ?*OVERLAPPED, | | |
| 296 | lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE, | | |
| 297 | ) callconv(WINAPI) BOOL; | 445 | ) callconv(WINAPI) BOOL; |
| 298 | | 446 | |
| 299 | pub extern "kernel32" fn ReadFile( | 447 | pub extern "kernel32" fn SetConsoleMode( |
| 300 | in_hFile: HANDLE, | 448 | hConsoleHandle: HANDLE, |
| 301 | out_lpBuffer: [*]u8, | 449 | dwMode: DWORD, |
| 302 | in_nNumberOfBytesToRead: DWORD, | | |
| 303 | out_lpNumberOfBytesRead: ?*DWORD, | | |
| 304 | in_out_lpOverlapped: ?*OVERLAPPED, | | |
| 305 | ) callconv(WINAPI) BOOL; | 450 | ) callconv(WINAPI) BOOL; |
| 306 | | 451 | |
| 307 | pub extern "kernel32" fn RemoveDirectoryW(lpPathName: [*:0]const u16) callconv(WINAPI) BOOL; | 452 | pub extern "kernel32" fn GetConsoleScreenBufferInfo( |
| 308 | | 453 | hConsoleOutput: HANDLE, |
| 309 | pub extern "kernel32" fn RtlCaptureContext(ContextRecord: *CONTEXT) callconv(WINAPI) void; | 454 | lpConsoleScreenBufferInfo: *CONSOLE_SCREEN_BUFFER_INFO, |
| 310 | | 455 | ) callconv(WINAPI) BOOL; |
| 311 | pub extern "kernel32" fn RtlLookupFunctionEntry( | | |
| 312 | ControlPc: DWORD64, | | |
| 313 | ImageBase: *DWORD64, | | |
| 314 | HistoryTable: *UNWIND_HISTORY_TABLE, | | |
| 315 | ) callconv(WINAPI) ?*RUNTIME_FUNCTION; | | |
| 316 | | | |
| 317 | pub extern "kernel32" fn RtlVirtualUnwind( | | |
| 318 | HandlerType: DWORD, | | |
| 319 | ImageBase: DWORD64, | | |
| 320 | ControlPc: DWORD64, | | |
| 321 | FunctionEntry: *RUNTIME_FUNCTION, | | |
| 322 | ContextRecord: *CONTEXT, | | |
| 323 | HandlerData: *?PVOID, | | |
| 324 | EstablisherFrame: *DWORD64, | | |
| 325 | ContextPointers: ?*KNONVOLATILE_CONTEXT_POINTERS, | | |
| 326 | ) callconv(WINAPI) *EXCEPTION_ROUTINE; | | |
| 327 | | 456 | |
| 328 | pub extern "kernel32" fn SetConsoleTextAttribute(hConsoleOutput: HANDLE, wAttributes: WORD) callconv(WINAPI) BOOL; | 457 | pub extern "kernel32" fn SetConsoleTextAttribute( |
| | 458 | hConsoleOutput: HANDLE, |
| | 459 | wAttributes: WORD, |
| | 460 | ) callconv(WINAPI) BOOL; |
| 329 | | 461 | |
| 330 | pub extern "kernel32" fn SetConsoleCtrlHandler( | 462 | pub extern "kernel32" fn SetConsoleCtrlHandler( |
| 331 | HandlerRoutine: ?HANDLER_ROUTINE, | 463 | HandlerRoutine: ?HANDLER_ROUTINE, |
| 332 | Add: BOOL, | 464 | Add: BOOL, |
| 333 | ) callconv(WINAPI) BOOL; | 465 | ) callconv(WINAPI) BOOL; |
| 334 | | 466 | |
| 335 | pub extern "kernel32" fn SetConsoleOutputCP(wCodePageID: UINT) callconv(WINAPI) BOOL; | 467 | pub extern "kernel32" fn SetConsoleOutputCP( |
| | 468 | wCodePageID: UINT, |
| | 469 | ) callconv(WINAPI) BOOL; |
| 336 | | 470 | |
| 337 | pub extern "kernel32" fn SetFileCompletionNotificationModes( | 471 | pub extern "kernel32" fn GetConsoleOutputCP() callconv(WINAPI) UINT; |
| 338 | FileHandle: HANDLE, | 472 | |
| 339 | Flags: UCHAR, | 473 | pub extern "kernel32" fn FillConsoleOutputAttribute( |
| | 474 | hConsoleOutput: HANDLE, |
| | 475 | wAttribute: WORD, |
| | 476 | nLength: DWORD, |
| | 477 | dwWriteCoord: COORD, |
| | 478 | lpNumberOfAttrsWritten: *DWORD, |
| 340 | ) callconv(WINAPI) BOOL; | 479 | ) callconv(WINAPI) BOOL; |
| 341 | | 480 | |
| 342 | pub extern "kernel32" fn SetFilePointerEx( | 481 | pub extern "kernel32" fn FillConsoleOutputCharacterW( |
| 343 | in_fFile: HANDLE, | 482 | hConsoleOutput: HANDLE, |
| 344 | in_liDistanceToMove: LARGE_INTEGER, | 483 | cCharacter: WCHAR, |
| 345 | out_opt_ldNewFilePointer: ?*LARGE_INTEGER, | 484 | nLength: DWORD, |
| 346 | in_dwMoveMethod: DWORD, | 485 | dwWriteCoord: COORD, |
| | 486 | lpNumberOfCharsWritten: *DWORD, |
| 347 | ) callconv(WINAPI) BOOL; | 487 | ) callconv(WINAPI) BOOL; |
| 348 | | 488 | |
| 349 | pub extern "kernel32" fn SetFileTime( | 489 | pub extern "kernel32" fn SetConsoleCursorPosition( |
| 350 | hFile: HANDLE, | 490 | hConsoleOutput: HANDLE, |
| 351 | lpCreationTime: ?*const FILETIME, | 491 | dwCursorPosition: COORD, |
| 352 | lpLastAccessTime: ?*const FILETIME, | | |
| 353 | lpLastWriteTime: ?*const FILETIME, | | |
| 354 | ) callconv(WINAPI) BOOL; | 492 | ) callconv(WINAPI) BOOL; |
| 355 | | 493 | |
| 356 | pub extern "kernel32" fn SetHandleInformation(hObject: HANDLE, dwMask: DWORD, dwFlags: DWORD) callconv(WINAPI) BOOL; | 494 | pub extern "kernel32" fn WriteConsoleW( |
| | 495 | hConsoleOutput: HANDLE, |
| | 496 | lpBuffer: [*]const u16, |
| | 497 | nNumberOfCharsToWrite: DWORD, |
| | 498 | lpNumberOfCharsWritten: ?*DWORD, |
| | 499 | lpReserved: ?LPVOID, |
| | 500 | ) callconv(WINAPI) BOOL; |
| 357 | | 501 | |
| 358 | pub extern "kernel32" fn Sleep(dwMilliseconds: DWORD) callconv(WINAPI) void; | 502 | pub extern "kernel32" fn ReadConsoleOutputCharacterW( |
| | 503 | hConsoleOutput: HANDLE, |
| | 504 | lpCharacter: [*]u16, |
| | 505 | nLength: DWORD, |
| | 506 | dwReadCoord: COORD, |
| | 507 | lpNumberOfCharsRead: *DWORD, |
| | 508 | ) callconv(windows.WINAPI) BOOL; |
| | 509 | |
| | 510 | // Memory Mapping/Allocation |
| | 511 | |
| | 512 | // TODO: Wrapper around RtlCreateHeap. |
| | 513 | pub extern "kernel32" fn HeapCreate( |
| | 514 | flOptions: DWORD, |
| | 515 | dwInitialSize: SIZE_T, |
| | 516 | dwMaximumSize: SIZE_T, |
| | 517 | ) callconv(WINAPI) ?HANDLE; |
| 359 | | 518 | |
| 360 | pub extern "kernel32" fn SwitchToThread() callconv(WINAPI) BOOL; | 519 | // TODO: Wrapper around RtlDestroyHeap (BOOLEAN -> BOOL). |
| | 520 | pub extern "kernel32" fn HeapDestroy( |
| | 521 | hHeap: HANDLE, |
| | 522 | ) callconv(WINAPI) BOOL; |
| 361 | | 523 | |
| 362 | pub extern "kernel32" fn TerminateProcess(hProcess: HANDLE, uExitCode: UINT) callconv(WINAPI) BOOL; | 524 | // TODO: Forwarder to RtlReAllocateHeap. |
| | 525 | pub extern "kernel32" fn HeapReAlloc( |
| | 526 | hHeap: HANDLE, |
| | 527 | dwFlags: DWORD, |
| | 528 | lpMem: *anyopaque, |
| | 529 | dwBytes: SIZE_T, |
| | 530 | ) callconv(WINAPI) ?*anyopaque; |
| 363 | | 531 | |
| 364 | pub extern "kernel32" fn TlsAlloc() callconv(WINAPI) DWORD; | 532 | // TODO: Fowrarder to RtlAllocateHeap. |
| | 533 | pub extern "kernel32" fn HeapAlloc( |
| | 534 | hHeap: HANDLE, |
| | 535 | dwFlags: DWORD, |
| | 536 | dwBytes: SIZE_T, |
| | 537 | ) callconv(WINAPI) ?*anyopaque; |
| 365 | | 538 | |
| 366 | pub extern "kernel32" fn TlsFree(dwTlsIndex: DWORD) callconv(WINAPI) BOOL; | 539 | // TODO: Fowrarder to RtlFreeHeap. |
| | 540 | pub extern "kernel32" fn HeapFree( |
| | 541 | hHeap: HANDLE, |
| | 542 | dwFlags: DWORD, |
| | 543 | lpMem: LPVOID, |
| | 544 | ) callconv(WINAPI) BOOL; |
| 367 | | 545 | |
| 368 | pub extern "kernel32" fn WaitForSingleObject(hHandle: HANDLE, dwMilliseconds: DWORD) callconv(WINAPI) DWORD; | 546 | // TODO: Wrapper around RtlValidateHeap (BOOLEAN -> BOOL) |
| | 547 | pub extern "kernel32" fn HeapValidate( |
| | 548 | hHeap: HANDLE, |
| | 549 | dwFlags: DWORD, |
| | 550 | lpMem: ?*const anyopaque, |
| | 551 | ) callconv(WINAPI) BOOL; |
| 369 | | 552 | |
| 370 | pub extern "kernel32" fn WaitForSingleObjectEx(hHandle: HANDLE, dwMilliseconds: DWORD, bAlertable: BOOL) callconv(WINAPI) DWORD; | 553 | // TODO: Wrapper around NtAllocateVirtualMemory. |
| | 554 | pub extern "kernel32" fn VirtualAlloc( |
| | 555 | lpAddress: ?LPVOID, |
| | 556 | dwSize: SIZE_T, |
| | 557 | flAllocationType: DWORD, |
| | 558 | flProtect: DWORD, |
| | 559 | ) callconv(WINAPI) ?LPVOID; |
| | 560 | |
| | 561 | // TODO: Wrapper around NtFreeVirtualMemory. |
| | 562 | // If the return value is .INVALID_PAGE_PROTECTION, calls RtlFlushSecureMemoryCache and try again. |
| | 563 | pub extern "kernel32" fn VirtualFree( |
| | 564 | lpAddress: ?LPVOID, |
| | 565 | dwSize: SIZE_T, |
| | 566 | dwFreeType: DWORD, |
| | 567 | ) callconv(WINAPI) BOOL; |
| 371 | | 568 | |
| 372 | pub extern "kernel32" fn WaitForMultipleObjects(nCount: DWORD, lpHandle: [*]const HANDLE, bWaitAll: BOOL, dwMilliseconds: DWORD) callconv(WINAPI) DWORD; | 569 | // TODO: Wrapper around NtQueryVirtualMemory. |
| | 570 | pub extern "kernel32" fn VirtualQuery( |
| | 571 | lpAddress: ?LPVOID, |
| | 572 | lpBuffer: PMEMORY_BASIC_INFORMATION, |
| | 573 | dwLength: SIZE_T, |
| | 574 | ) callconv(WINAPI) SIZE_T; |
| 373 | | 575 | |
| 374 | pub extern "kernel32" fn WaitForMultipleObjectsEx( | 576 | pub extern "kernel32" fn LocalFree( |
| 375 | nCount: DWORD, | 577 | hMem: HLOCAL, |
| 376 | lpHandle: [*]const HANDLE, | 578 | ) callconv(WINAPI) ?HLOCAL; |
| 377 | bWaitAll: BOOL, | 579 | |
| 378 | dwMilliseconds: DWORD, | 580 | // TODO: Getter for peb.ProcessHeap |
| 379 | bAlertable: BOOL, | 581 | pub extern "kernel32" fn GetProcessHeap() callconv(WINAPI) ?HANDLE; |
| | 582 | |
| | 583 | // Code Libraries/Modules |
| | 584 | |
| | 585 | // TODO: Wrapper around LdrGetDllFullName. |
| | 586 | pub extern "kernel32" fn GetModuleFileNameW( |
| | 587 | hModule: ?HMODULE, |
| | 588 | lpFilename: LPWSTR, |
| | 589 | nSize: DWORD, |
| 380 | ) callconv(WINAPI) DWORD; | 590 | ) callconv(WINAPI) DWORD; |
| 381 | | 591 | |
| 382 | pub extern "kernel32" fn WriteFile( | 592 | extern "kernel32" fn K32GetModuleFileNameExW( |
| 383 | in_hFile: HANDLE, | 593 | hProcess: HANDLE, |
| 384 | in_lpBuffer: [*]const u8, | 594 | hModule: ?HMODULE, |
| 385 | in_nNumberOfBytesToWrite: DWORD, | 595 | lpFilename: LPWSTR, |
| 386 | out_lpNumberOfBytesWritten: ?*DWORD, | 596 | nSize: DWORD, |
| 387 | in_out_lpOverlapped: ?*OVERLAPPED, | 597 | ) callconv(WINAPI) DWORD; |
| | 598 | pub const GetModuleFileNameExW = K32GetModuleFileNameExW; |
| | 599 | |
| | 600 | // TODO: Wrapper around ntdll.LdrGetDllHandle, which is a wrapper around LdrGetDllHandleEx |
| | 601 | pub extern "kernel32" fn GetModuleHandleW( |
| | 602 | lpModuleName: ?LPCWSTR, |
| | 603 | ) callconv(WINAPI) ?HMODULE; |
| | 604 | |
| | 605 | pub extern "kernel32" fn Module32First( |
| | 606 | hSnapshot: HANDLE, |
| | 607 | lpme: *MODULEENTRY32, |
| 388 | ) callconv(WINAPI) BOOL; | 608 | ) callconv(WINAPI) BOOL; |
| 389 | | 609 | |
| 390 | pub extern "kernel32" fn WriteFileEx( | 610 | pub extern "kernel32" fn Module32Next( |
| 391 | hFile: HANDLE, | 611 | hSnapshot: HANDLE, |
| 392 | lpBuffer: [*]const u8, | 612 | lpme: *MODULEENTRY32, |
| 393 | nNumberOfBytesToWrite: DWORD, | | |
| 394 | lpOverlapped: *OVERLAPPED, | | |
| 395 | lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE, | | |
| 396 | ) callconv(WINAPI) BOOL; | | |
| 397 | | | |
| 398 | pub extern "kernel32" fn LoadLibraryW(lpLibFileName: [*:0]const u16) callconv(WINAPI) ?HMODULE; | | |
| 399 | pub extern "kernel32" fn LoadLibraryExW(lpLibFileName: [*:0]const u16, hFile: ?HANDLE, dwFlags: DWORD) callconv(WINAPI) ?HMODULE; | | |
| 400 | | | |
| 401 | pub extern "kernel32" fn GetProcAddress(hModule: HMODULE, lpProcName: [*:0]const u8) callconv(WINAPI) ?FARPROC; | | |
| 402 | | | |
| 403 | pub extern "kernel32" fn FreeLibrary(hModule: HMODULE) callconv(WINAPI) BOOL; | | |
| 404 | | | |
| 405 | pub extern "kernel32" fn InitializeCriticalSection(lpCriticalSection: *CRITICAL_SECTION) callconv(WINAPI) void; | | |
| 406 | pub extern "kernel32" fn EnterCriticalSection(lpCriticalSection: *CRITICAL_SECTION) callconv(WINAPI) void; | | |
| 407 | pub extern "kernel32" fn LeaveCriticalSection(lpCriticalSection: *CRITICAL_SECTION) callconv(WINAPI) void; | | |
| 408 | pub extern "kernel32" fn DeleteCriticalSection(lpCriticalSection: *CRITICAL_SECTION) callconv(WINAPI) void; | | |
| 409 | | | |
| 410 | pub extern "kernel32" fn InitOnceExecuteOnce(InitOnce: *INIT_ONCE, InitFn: INIT_ONCE_FN, Parameter: ?*anyopaque, Context: ?*anyopaque) callconv(WINAPI) BOOL; | | |
| 411 | | | |
| 412 | pub extern "kernel32" fn K32EmptyWorkingSet(hProcess: HANDLE) callconv(WINAPI) BOOL; | | |
| 413 | pub extern "kernel32" fn K32EnumDeviceDrivers(lpImageBase: [*]LPVOID, cb: DWORD, lpcbNeeded: *DWORD) callconv(WINAPI) BOOL; | | |
| 414 | pub extern "kernel32" fn K32EnumPageFilesA(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKA, pContext: LPVOID) callconv(WINAPI) BOOL; | | |
| 415 | pub extern "kernel32" fn K32EnumPageFilesW(pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKW, pContext: LPVOID) callconv(WINAPI) BOOL; | | |
| 416 | pub extern "kernel32" fn K32EnumProcessModules(hProcess: HANDLE, lphModule: [*]HMODULE, cb: DWORD, lpcbNeeded: *DWORD) callconv(WINAPI) BOOL; | | |
| 417 | pub extern "kernel32" fn K32EnumProcessModulesEx(hProcess: HANDLE, lphModule: [*]HMODULE, cb: DWORD, lpcbNeeded: *DWORD, dwFilterFlag: DWORD) callconv(WINAPI) BOOL; | | |
| 418 | pub extern "kernel32" fn K32EnumProcesses(lpidProcess: [*]DWORD, cb: DWORD, cbNeeded: *DWORD) callconv(WINAPI) BOOL; | | |
| 419 | pub extern "kernel32" fn K32GetDeviceDriverBaseNameA(ImageBase: LPVOID, lpBaseName: LPSTR, nSize: DWORD) callconv(WINAPI) DWORD; | | |
| 420 | pub extern "kernel32" fn K32GetDeviceDriverBaseNameW(ImageBase: LPVOID, lpBaseName: LPWSTR, nSize: DWORD) callconv(WINAPI) DWORD; | | |
| 421 | pub extern "kernel32" fn K32GetDeviceDriverFileNameA(ImageBase: LPVOID, lpFilename: LPSTR, nSize: DWORD) callconv(WINAPI) DWORD; | | |
| 422 | pub extern "kernel32" fn K32GetDeviceDriverFileNameW(ImageBase: LPVOID, lpFilename: LPWSTR, nSize: DWORD) callconv(WINAPI) DWORD; | | |
| 423 | pub extern "kernel32" fn K32GetMappedFileNameA(hProcess: HANDLE, lpv: ?LPVOID, lpFilename: LPSTR, nSize: DWORD) callconv(WINAPI) DWORD; | | |
| 424 | pub extern "kernel32" fn K32GetMappedFileNameW(hProcess: HANDLE, lpv: ?LPVOID, lpFilename: LPWSTR, nSize: DWORD) callconv(WINAPI) DWORD; | | |
| 425 | pub extern "kernel32" fn K32GetModuleBaseNameA(hProcess: HANDLE, hModule: ?HMODULE, lpBaseName: LPSTR, nSize: DWORD) callconv(WINAPI) DWORD; | | |
| 426 | pub extern "kernel32" fn K32GetModuleBaseNameW(hProcess: HANDLE, hModule: ?HMODULE, lpBaseName: LPWSTR, nSize: DWORD) callconv(WINAPI) DWORD; | | |
| 427 | pub extern "kernel32" fn K32GetModuleFileNameExA(hProcess: HANDLE, hModule: ?HMODULE, lpFilename: LPSTR, nSize: DWORD) callconv(WINAPI) DWORD; | | |
| 428 | pub extern "kernel32" fn K32GetModuleFileNameExW(hProcess: HANDLE, hModule: ?HMODULE, lpFilename: LPWSTR, nSize: DWORD) callconv(WINAPI) DWORD; | | |
| 429 | pub extern "kernel32" fn K32GetModuleInformation(hProcess: HANDLE, hModule: HMODULE, lpmodinfo: *MODULEINFO, cb: DWORD) callconv(WINAPI) BOOL; | | |
| 430 | pub extern "kernel32" fn K32GetPerformanceInfo(pPerformanceInformation: *PERFORMANCE_INFORMATION, cb: DWORD) callconv(WINAPI) BOOL; | | |
| 431 | pub extern "kernel32" fn K32GetProcessImageFileNameA(hProcess: HANDLE, lpImageFileName: LPSTR, nSize: DWORD) callconv(WINAPI) DWORD; | | |
| 432 | pub extern "kernel32" fn K32GetProcessImageFileNameW(hProcess: HANDLE, lpImageFileName: LPWSTR, nSize: DWORD) callconv(WINAPI) DWORD; | | |
| 433 | pub extern "kernel32" fn K32GetProcessMemoryInfo(Process: HANDLE, ppsmemCounters: *PROCESS_MEMORY_COUNTERS, cb: DWORD) callconv(WINAPI) BOOL; | | |
| 434 | pub extern "kernel32" fn K32GetWsChanges(hProcess: HANDLE, lpWatchInfo: *PSAPI_WS_WATCH_INFORMATION, cb: DWORD) callconv(WINAPI) BOOL; | | |
| 435 | pub extern "kernel32" fn K32GetWsChangesEx(hProcess: HANDLE, lpWatchInfoEx: *PSAPI_WS_WATCH_INFORMATION_EX, cb: DWORD) callconv(WINAPI) BOOL; | | |
| 436 | pub extern "kernel32" fn K32InitializeProcessForWsWatch(hProcess: HANDLE) callconv(WINAPI) BOOL; | | |
| 437 | pub extern "kernel32" fn K32QueryWorkingSet(hProcess: HANDLE, pv: PVOID, cb: DWORD) callconv(WINAPI) BOOL; | | |
| 438 | pub extern "kernel32" fn K32QueryWorkingSetEx(hProcess: HANDLE, pv: PVOID, cb: DWORD) callconv(WINAPI) BOOL; | | |
| 439 | | | |
| 440 | pub extern "kernel32" fn FlushFileBuffers(hFile: HANDLE) callconv(WINAPI) BOOL; | | |
| 441 | | | |
| 442 | pub extern "kernel32" fn WakeAllConditionVariable(c: *CONDITION_VARIABLE) callconv(WINAPI) void; | | |
| 443 | pub extern "kernel32" fn WakeConditionVariable(c: *CONDITION_VARIABLE) callconv(WINAPI) void; | | |
| 444 | pub extern "kernel32" fn SleepConditionVariableSRW( | | |
| 445 | c: *CONDITION_VARIABLE, | | |
| 446 | s: *SRWLOCK, | | |
| 447 | t: DWORD, | | |
| 448 | f: ULONG, | | |
| 449 | ) callconv(WINAPI) BOOL; | 613 | ) callconv(WINAPI) BOOL; |
| 450 | | 614 | |
| 451 | pub extern "kernel32" fn TryAcquireSRWLockExclusive(s: *SRWLOCK) callconv(WINAPI) BOOLEAN; | 615 | pub extern "kernel32" fn LoadLibraryW( |
| 452 | pub extern "kernel32" fn AcquireSRWLockExclusive(s: *SRWLOCK) callconv(WINAPI) void; | 616 | lpLibFileName: LPCWSTR, |
| 453 | pub extern "kernel32" fn ReleaseSRWLockExclusive(s: *SRWLOCK) callconv(WINAPI) void; | 617 | ) callconv(WINAPI) ?HMODULE; |
| | 618 | |
| | 619 | pub extern "kernel32" fn LoadLibraryExW( |
| | 620 | lpLibFileName: LPCWSTR, |
| | 621 | hFile: ?HANDLE, |
| | 622 | dwFlags: DWORD, |
| | 623 | ) callconv(WINAPI) ?HMODULE; |
| | 624 | |
| | 625 | pub extern "kernel32" fn GetProcAddress( |
| | 626 | hModule: HMODULE, |
| | 627 | lpProcName: LPCSTR, |
| | 628 | ) callconv(WINAPI) ?FARPROC; |
| | 629 | |
| | 630 | pub extern "kernel32" fn FreeLibrary( |
| | 631 | hModule: HMODULE, |
| | 632 | ) callconv(WINAPI) BOOL; |
| | 633 | |
| | 634 | // Error Management |
| | 635 | |
| | 636 | pub extern "kernel32" fn FormatMessageW( |
| | 637 | dwFlags: DWORD, |
| | 638 | lpSource: ?LPCVOID, |
| | 639 | dwMessageId: Win32Error, |
| | 640 | dwLanguageId: DWORD, |
| | 641 | lpBuffer: LPWSTR, |
| | 642 | nSize: DWORD, |
| | 643 | Arguments: ?*va_list, |
| | 644 | ) callconv(WINAPI) DWORD; |
| | 645 | |
| | 646 | // TODO: Getter for teb().LastErrorValue. |
| | 647 | pub extern "kernel32" fn GetLastError() callconv(WINAPI) Win32Error; |
| | 648 | |
| | 649 | // TODO: Wrapper around RtlSetLastWin32Error. |
| | 650 | pub extern "kernel32" fn SetLastError( |
| | 651 | dwErrCode: Win32Error, |
| | 652 | ) callconv(WINAPI) void; |
| 454 | | 653 | |
| 455 | pub extern "kernel32" fn RegOpenKeyExW( | 654 | // Everything Else |
| 456 | hkey: HKEY, | | |
| 457 | lpSubKey: LPCWSTR, | | |
| 458 | ulOptions: DWORD, | | |
| 459 | samDesired: REGSAM, | | |
| 460 | phkResult: *HKEY, | | |
| 461 | ) callconv(WINAPI) LSTATUS; | | |
| 462 | | 655 | |
| 463 | pub extern "kernel32" fn GetPhysicallyInstalledSystemMemory(TotalMemoryInKilobytes: *ULONGLONG) BOOL; | 656 | // TODO: |
| | 657 | // Wrapper around KUSER_SHARED_DATA.SystemTime. |
| | 658 | // Much better to use NtQuerySystemTime or NtQuerySystemTimePrecise for guaranteed 0.1ns precision. |
| | 659 | pub extern "kernel32" fn GetSystemTimeAsFileTime( |
| | 660 | lpSystemTimeAsFileTime: *FILETIME, |
| | 661 | ) callconv(WINAPI) void; |