1 use winapi::shared::basetsd::{DWORD64, SIZE_T, ULONG64};
2 use winapi::shared::minwindef::DWORD;
3 use winapi::um::winnt::{HANDLE, PVOID};
4 #[doc(hidden)]
5 #[inline]
UInt32x32To64(a: u32, b: u32) -> u646 pub const fn UInt32x32To64(a: u32, b: u32) -> u64 {
7 a as u64 * b as u64
8 }
9 #[cfg(all(feature = "nightly", not(target_arch = "aarch64")))]
10 IFDEF!{
11 use crate::ntpebteb::TEB;
12 #[inline]
13 pub unsafe fn _bittest64(Base: *const i64, Offset: i64) -> u8 {
14 let out: u8;
15 llvm_asm!("bt $1, $2; setb $0"
16 : "=r"(out)
17 : "*m"(Base), "r"(Offset)
18 : "cc"
19 : "intel"
20 );
21 out
22 }
23 #[inline]
24 pub unsafe fn __readfsdword(Offset: DWORD) -> DWORD {
25 let out: u32;
26 llvm_asm!("mov $0, fs:[$1]"
27 : "=r"(out)
28 : "ri"(Offset)
29 :
30 : "intel"
31 );
32 out
33 }
34 #[inline]
35 pub unsafe fn __readgsqword(Offset: DWORD) -> DWORD64 {
36 let out: u64;
37 llvm_asm!("mov $0, gs:[$1]"
38 : "=r"(out)
39 : "ri"(Offset)
40 :
41 : "intel"
42 );
43 out
44 }
45 #[inline] #[allow(unused_unsafe)]
46 pub unsafe fn NtCurrentTeb() -> *mut TEB {
47 use winapi::um::winnt::NT_TIB;
48 let teb_offset = FIELD_OFFSET!(NT_TIB, _Self) as u32;
49 #[cfg(target_arch = "x86_64")] {
50 __readgsqword(teb_offset) as *mut TEB
51 }
52 #[cfg(target_arch = "x86")] {
53 __readfsdword(teb_offset) as *mut TEB
54 }
55 }
56 }
57 ENUM!{enum MEM_EXTENDED_PARAMETER_TYPE {
58 MemExtendedParameterInvalidType = 0,
59 MemExtendedParameterAddressRequirements = 1,
60 MemExtendedParameterNumaNode = 2,
61 MemExtendedParameterPartitionHandle = 3,
62 MemExtendedParameterMax = 4,
63 }}
64 pub type PMEM_EXTENDED_PARAMETER_TYPE = *mut MEM_EXTENDED_PARAMETER_TYPE;
65 UNION!{union MEM_EXTENDED_PARAMETER_u {
66 ULong64: DWORD64,
67 Pointer: PVOID,
68 Size: SIZE_T,
69 Handle: HANDLE,
70 ULong: DWORD,
71 }}
72 STRUCT!{struct MEM_EXTENDED_PARAMETER {
73 BitFields: ULONG64,
74 u: MEM_EXTENDED_PARAMETER_u,
75 }}
76 BITFIELD!{MEM_EXTENDED_PARAMETER BitFields: ULONG64 [
77 Type set_Type[0..8],
78 Reserved set_Reserved[8..64],
79 ]}
80 pub type PMEM_EXTENDED_PARAMETER = *mut MEM_EXTENDED_PARAMETER;
81