Skip to content

Commit 51a229c

Browse files
committed
std.os.windows: eliminate forwarder function in kernel32
#1840
1 parent 74c23a2 commit 51a229c

File tree

2 files changed

+85
-89
lines changed

2 files changed

+85
-89
lines changed

lib/std/os/windows/kernel32.zig

Lines changed: 26 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
const std = @import("../../std.zig");
22
const windows = std.os.windows;
3+
const ntdll = windows.ntdll;
34

45
const BOOL = windows.BOOL;
5-
const BOOLEAN = windows.BOOLEAN;
66
const CONDITION_VARIABLE = windows.CONDITION_VARIABLE;
77
const CONSOLE_SCREEN_BUFFER_INFO = windows.CONSOLE_SCREEN_BUFFER_INFO;
88
const COORD = windows.COORD;
9-
const CRITICAL_SECTION = windows.CRITICAL_SECTION;
109
const DWORD = windows.DWORD;
1110
const FARPROC = windows.FARPROC;
1211
const FILETIME = windows.FILETIME;
1312
const HANDLE = windows.HANDLE;
1413
const HANDLER_ROUTINE = windows.HANDLER_ROUTINE;
15-
const HLOCAL = windows.HLOCAL;
1614
const HMODULE = windows.HMODULE;
1715
const INIT_ONCE = windows.INIT_ONCE;
1816
const INIT_ONCE_FN = windows.INIT_ONCE_FN;
@@ -32,30 +30,29 @@ const SECURITY_ATTRIBUTES = windows.SECURITY_ATTRIBUTES;
3230
const SIZE_T = windows.SIZE_T;
3331
const SRWLOCK = windows.SRWLOCK;
3432
const STARTUPINFOW = windows.STARTUPINFOW;
33+
const SYSTEM_INFO = windows.SYSTEM_INFO;
3534
const UCHAR = windows.UCHAR;
3635
const UINT = windows.UINT;
3736
const ULONG = windows.ULONG;
3837
const ULONG_PTR = windows.ULONG_PTR;
3938
const va_list = windows.va_list;
40-
const VECTORED_EXCEPTION_HANDLER = windows.VECTORED_EXCEPTION_HANDLER;
4139
const WCHAR = windows.WCHAR;
4240
const WIN32_FIND_DATAW = windows.WIN32_FIND_DATAW;
4341
const Win32Error = windows.Win32Error;
4442
const WORD = windows.WORD;
45-
const SYSTEM_INFO = windows.SYSTEM_INFO;
4643

4744
// I/O - Filesystem
4845

4946
pub extern "kernel32" fn ReadDirectoryChangesW(
50-
hDirectory: windows.HANDLE,
47+
hDirectory: HANDLE,
5148
lpBuffer: [*]align(@alignOf(windows.FILE_NOTIFY_INFORMATION)) u8,
52-
nBufferLength: windows.DWORD,
53-
bWatchSubtree: windows.BOOL,
49+
nBufferLength: DWORD,
50+
bWatchSubtree: BOOL,
5451
dwNotifyFilter: windows.FileNotifyChangeFilter,
55-
lpBytesReturned: ?*windows.DWORD,
56-
lpOverlapped: ?*windows.OVERLAPPED,
52+
lpBytesReturned: ?*DWORD,
53+
lpOverlapped: ?*OVERLAPPED,
5754
lpCompletionRoutine: windows.LPOVERLAPPED_COMPLETION_ROUTINE,
58-
) callconv(.winapi) windows.BOOL;
55+
) callconv(.winapi) BOOL;
5956

6057
// TODO: Wrapper around NtCancelIoFile.
6158
pub extern "kernel32" fn CancelIo(
@@ -258,16 +255,8 @@ pub extern "kernel32" fn CreateIoCompletionPort(
258255
NumberOfConcurrentThreads: DWORD,
259256
) callconv(.winapi) ?HANDLE;
260257

261-
// TODO: Forwarder to NtAddVectoredExceptionHandler.
262-
pub extern "kernel32" fn AddVectoredExceptionHandler(
263-
First: ULONG,
264-
Handler: ?VECTORED_EXCEPTION_HANDLER,
265-
) callconv(.winapi) ?LPVOID;
266-
267-
// TODO: Forwarder to NtRemoveVectoredExceptionHandler.
268-
pub extern "kernel32" fn RemoveVectoredExceptionHandler(
269-
Handle: HANDLE,
270-
) callconv(.winapi) ULONG;
258+
pub const AddVectoredExceptionHandler = ntdll.RtlAddVectoredExceptionHandler;
259+
pub const RemoveVectoredExceptionHandler = ntdll.RtlRemoveVectoredExceptionHandler;
271260

272261
// TODO: Wrapper around RtlReportSilentProcessExit + NtTerminateProcess.
273262
pub extern "kernel32" fn TerminateProcess(
@@ -321,10 +310,7 @@ pub extern "kernel32" fn CreateProcessW(
321310
lpProcessInformation: *PROCESS_INFORMATION,
322311
) callconv(.winapi) BOOL;
323312

324-
// TODO: Fowarder to RtlExitUserProcess.
325-
pub extern "kernel32" fn ExitProcess(
326-
exit_code: UINT,
327-
) callconv(.winapi) noreturn;
313+
pub const ExitProcess = ntdll.RtlExitUserProcess;
328314

329315
// TODO: implement via ntdll instead
330316
pub extern "kernel32" fn SleepEx(
@@ -372,40 +358,14 @@ pub extern "kernel32" fn SwitchToThread() callconv(.winapi) BOOL;
372358

373359
// Locks, critical sections, initializers
374360

375-
// TODO: Forwarder to RtlInitializeCriticalSection
376-
pub extern "kernel32" fn InitializeCriticalSection(
377-
lpCriticalSection: *CRITICAL_SECTION,
378-
) callconv(.winapi) void;
379-
380-
// TODO: Forwarder to RtlEnterCriticalSection
381-
pub extern "kernel32" fn EnterCriticalSection(
382-
lpCriticalSection: *CRITICAL_SECTION,
383-
) callconv(.winapi) void;
384-
385-
// TODO: Forwarder to RtlLeaveCriticalSection
386-
pub extern "kernel32" fn LeaveCriticalSection(
387-
lpCriticalSection: *CRITICAL_SECTION,
388-
) callconv(.winapi) void;
389-
390-
// TODO: Forwarder to RtlDeleteCriticalSection
391-
pub extern "kernel32" fn DeleteCriticalSection(
392-
lpCriticalSection: *CRITICAL_SECTION,
393-
) callconv(.winapi) void;
394-
395-
// TODO: Forwarder to RtlTryAcquireSRWLockExclusive
396-
pub extern "kernel32" fn TryAcquireSRWLockExclusive(
397-
SRWLock: *SRWLOCK,
398-
) callconv(.winapi) BOOLEAN;
399-
400-
// TODO: Forwarder to RtlAcquireSRWLockExclusive
401-
pub extern "kernel32" fn AcquireSRWLockExclusive(
402-
SRWLock: *SRWLOCK,
403-
) callconv(.winapi) void;
361+
pub const InitializeCriticalSection = ntdll.RtlInitializeCriticalSection;
362+
pub const EnterCriticalSection = ntdll.RtlEnterCriticalSection;
363+
pub const LeaveCriticalSection = ntdll.RtlLeaveCriticalSection;
364+
pub const DeleteCriticalSection = ntdll.RtlDeleteCriticalSection;
404365

405-
// TODO: Forwarder to RtlReleaseSRWLockExclusive
406-
pub extern "kernel32" fn ReleaseSRWLockExclusive(
407-
SRWLock: *SRWLOCK,
408-
) callconv(.winapi) void;
366+
pub const TryAcquireSRWLockExclusive = ntdll.RtlTryAcquireSRWLockExclusive;
367+
pub const AcquireSRWLockExclusive = ntdll.RtlAcquireSRWLockExclusive;
368+
pub const ReleaseSRWLockExclusive = ntdll.RtlReleaseSRWLockExclusive;
409369

410370
pub extern "kernel32" fn InitOnceExecuteOnce(
411371
InitOnce: *INIT_ONCE,
@@ -414,15 +374,8 @@ pub extern "kernel32" fn InitOnceExecuteOnce(
414374
Context: ?*anyopaque,
415375
) callconv(.winapi) BOOL;
416376

417-
// TODO: Forwarder to RtlWakeConditionVariable
418-
pub extern "kernel32" fn WakeConditionVariable(
419-
ConditionVariable: *CONDITION_VARIABLE,
420-
) callconv(.winapi) void;
421-
422-
// TODO: Forwarder to RtlWakeAllConditionVariable
423-
pub extern "kernel32" fn WakeAllConditionVariable(
424-
ConditionVariable: *CONDITION_VARIABLE,
425-
) callconv(.winapi) void;
377+
pub const WakeConditionVariable = ntdll.RtlWakeConditionVariable;
378+
pub const WakeAllConditionVariable = ntdll.RtlWakeAllConditionVariable;
426379

427380
// TODO:
428381
// - dwMilliseconds -> LARGE_INTEGER.
@@ -514,27 +467,9 @@ pub extern "kernel32" fn HeapCreate(
514467
dwMaximumSize: SIZE_T,
515468
) callconv(.winapi) ?HANDLE;
516469

517-
// TODO: Forwarder to RtlReAllocateHeap.
518-
pub extern "kernel32" fn HeapReAlloc(
519-
hHeap: HANDLE,
520-
dwFlags: DWORD,
521-
lpMem: *anyopaque,
522-
dwBytes: SIZE_T,
523-
) callconv(.winapi) ?*anyopaque;
524-
525-
// TODO: Fowrarder to RtlAllocateHeap.
526-
pub extern "kernel32" fn HeapAlloc(
527-
hHeap: HANDLE,
528-
dwFlags: DWORD,
529-
dwBytes: SIZE_T,
530-
) callconv(.winapi) ?*anyopaque;
531-
532-
// TODO: Fowrarder to RtlFreeHeap.
533-
pub extern "kernel32" fn HeapFree(
534-
hHeap: HANDLE,
535-
dwFlags: DWORD,
536-
lpMem: LPVOID,
537-
) callconv(.winapi) BOOL;
470+
pub const HeapReAlloc = ntdll.RtlReAllocateHeap;
471+
pub const HeapAlloc = ntdll.RtlAllocateHeap;
472+
pub const HeapFree = ntdll.RtlFreeHeap;
538473

539474
// TODO: Wrapper around RtlValidateHeap (BOOLEAN -> BOOL)
540475
pub extern "kernel32" fn HeapValidate(
@@ -642,4 +577,6 @@ pub extern "kernel32" fn SetLastError(
642577

643578
// Everything Else
644579

645-
pub extern "kernel32" fn GetSystemInfo(lpSystemInfo: *SYSTEM_INFO) callconv(.winapi) void;
580+
pub extern "kernel32" fn GetSystemInfo(
581+
lpSystemInfo: *SYSTEM_INFO,
582+
) callconv(.winapi) void;

lib/std/os/windows/ntdll.zig

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ const PROCESSINFOCLASS = windows.PROCESSINFOCLASS;
3737
const LPVOID = windows.LPVOID;
3838
const LPCVOID = windows.LPCVOID;
3939
const SECTION_INHERIT = windows.SECTION_INHERIT;
40+
const VECTORED_EXCEPTION_HANDLER = windows.VECTORED_EXCEPTION_HANDLER;
41+
const CRITICAL_SECTION = windows.CRITICAL_SECTION;
42+
const SRWLOCK = windows.SRWLOCK;
43+
const CONDITION_VARIABLE = windows.CONDITION_VARIABLE;
4044

4145
pub extern "ntdll" fn NtQueryInformationProcess(
4246
ProcessHandle: HANDLE,
@@ -375,3 +379,58 @@ pub extern "ntdll" fn NtFreeVirtualMemory(
375379
RegionSize: *SIZE_T,
376380
FreeType: ULONG,
377381
) callconv(.winapi) NTSTATUS;
382+
383+
pub extern "ntdll" fn RtlAddVectoredExceptionHandler(
384+
First: ULONG,
385+
Handler: ?VECTORED_EXCEPTION_HANDLER,
386+
) callconv(.winapi) ?LPVOID;
387+
pub extern "ntdll" fn RtlRemoveVectoredExceptionHandler(
388+
Handle: HANDLE,
389+
) callconv(.winapi) ULONG;
390+
391+
pub extern "ntdll" fn RtlInitializeCriticalSection(
392+
lpCriticalSection: *CRITICAL_SECTION,
393+
) callconv(.winapi) void;
394+
pub extern "ntdll" fn RtlEnterCriticalSection(
395+
lpCriticalSection: *CRITICAL_SECTION,
396+
) callconv(.winapi) void;
397+
pub extern "ntdll" fn RtlLeaveCriticalSection(
398+
lpCriticalSection: *CRITICAL_SECTION,
399+
) callconv(.winapi) void;
400+
pub extern "ntdll" fn RtlDeleteCriticalSection(
401+
lpCriticalSection: *CRITICAL_SECTION,
402+
) callconv(.winapi) void;
403+
404+
pub extern "ntdll" fn RtlTryAcquireSRWLockExclusive(
405+
SRWLock: *SRWLOCK,
406+
) callconv(.winapi) BOOLEAN;
407+
pub extern "ntdll" fn RtlAcquireSRWLockExclusive(
408+
SRWLock: *SRWLOCK,
409+
) callconv(.winapi) void;
410+
pub extern "ntdll" fn RtlReleaseSRWLockExclusive(
411+
SRWLock: *SRWLOCK,
412+
) callconv(.winapi) void;
413+
414+
pub extern "ntdll" fn RtlWakeConditionVariable(
415+
ConditionVariable: *CONDITION_VARIABLE,
416+
) callconv(.winapi) void;
417+
pub extern "ntdll" fn RtlWakeAllConditionVariable(
418+
ConditionVariable: *CONDITION_VARIABLE,
419+
) callconv(.winapi) void;
420+
421+
pub extern "ntdll" fn RtlReAllocateHeap(
422+
hHeap: HANDLE,
423+
dwFlags: DWORD,
424+
lpMem: *anyopaque,
425+
dwBytes: SIZE_T,
426+
) callconv(.winapi) ?*anyopaque;
427+
pub extern "ntdll" fn RtlAllocateHeap(
428+
hHeap: HANDLE,
429+
dwFlags: DWORD,
430+
dwBytes: SIZE_T,
431+
) callconv(.winapi) ?*anyopaque;
432+
pub extern "ntdll" fn RtlFreeHeap(
433+
hHeap: HANDLE,
434+
dwFlags: DWORD,
435+
lpMem: LPVOID,
436+
) callconv(.winapi) BOOL;

0 commit comments

Comments
 (0)