feature. See also
. The project being documented here (as the example) is the Zig library itself.
Windows.loadNtdllProc
fn loadNtdllProc(si: *SelfInfo, name: []const u8) Io.UnexpectedError!*anyopaque
File
Code
fn loadNtdllProc(si: *SelfInfo, name: []const u8) Io.UnexpectedError!*anyopaque {
const ntdll_handle = si.ntdll_handle orelse ntdll_handle: {
var ntdll_handle: *anyopaque = undefined;
switch (windows.ntdll.LdrLoadDll(null, null, &.init(
&.{ 'n', 't', 'd', 'l', 'l', '.', 'd', 'l', 'l' },
), &ntdll_handle)) {
.SUCCESS => {},
.DLL_NOT_FOUND => return error.Unexpected,
else => |status| return windows.unexpectedStatus(status),
}
si.ntdll_handle = ntdll_handle;
break :ntdll_handle ntdll_handle;
};
var proc_addr: *anyopaque = undefined;
switch (windows.ntdll.LdrGetProcedureAddress(ntdll_handle, &.init(name), 0, &proc_addr)) {
.SUCCESS => {},
else => |status| return windows.unexpectedStatus(status),
}
return proc_addr;
}