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