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