mirror of
https://github.com/ziglang/zig.git
synced 2026-01-21 06:45:24 +00:00
std: Work around unexported NtCurrentTeb
Apparently NtCurrentTeb is only exported for i386 and some other platforms but not for x86_64 nor AArch64. Let's go with the flow and provide our own NtCurrentTeb like the Windows headers do. Thank you Microsoft.
This commit is contained in:
parent
b9a1d67637
commit
2e04b61275
@ -1083,8 +1083,26 @@ pub fn SetFileTime(
|
||||
}
|
||||
}
|
||||
|
||||
pub fn teb() *TEB {
|
||||
return switch (builtin.arch) {
|
||||
.i386 => asm volatile (
|
||||
\\ movl %%fs:0x18, %[ptr]
|
||||
: [ptr] "=r" (-> *TEB)
|
||||
),
|
||||
.x86_64 => asm volatile (
|
||||
\\ movq %%gs:0x30, %[ptr]
|
||||
: [ptr] "=r" (-> *TEB)
|
||||
),
|
||||
.aarch64 => asm volatile (
|
||||
\\ mov %[ptr], x18
|
||||
: [ptr] "=r" (-> *TEB)
|
||||
),
|
||||
else => @compileError("unsupported arch"),
|
||||
};
|
||||
}
|
||||
|
||||
pub fn peb() *PEB {
|
||||
return ntdll.NtCurrentTeb().ProcessEnvironmentBlock;
|
||||
return teb().ProcessEnvironmentBlock;
|
||||
}
|
||||
|
||||
/// A file time is a 64-bit value that represents the number of 100-nanosecond
|
||||
|
||||
@ -16,7 +16,6 @@ pub extern "NtDll" fn NtQueryInformationFile(
|
||||
Length: ULONG,
|
||||
FileInformationClass: FILE_INFORMATION_CLASS,
|
||||
) callconv(.Stdcall) NTSTATUS;
|
||||
pub extern "NtDll" fn NtCurrentTeb() callconv(.Stdcall) *TEB;
|
||||
|
||||
pub extern "NtDll" fn NtQueryAttributesFile(
|
||||
ObjectAttributes: *OBJECT_ATTRIBUTES,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user