summaryrefslogtreecommitdiffstats
path: root/third_party/rust/ntapi/src/ntwow64.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/ntapi/src/ntwow64.rs')
-rw-r--r--third_party/rust/ntapi/src/ntwow64.rs476
1 files changed, 476 insertions, 0 deletions
diff --git a/third_party/rust/ntapi/src/ntwow64.rs b/third_party/rust/ntapi/src/ntwow64.rs
new file mode 100644
index 0000000000..9a95ae2aea
--- /dev/null
+++ b/third_party/rust/ntapi/src/ntwow64.rs
@@ -0,0 +1,476 @@
+use core::mem::size_of;
+use crate::ntapi_base::CLIENT_ID32;
+use crate::ntldr::{LDR_DDAG_STATE, LDR_DLL_LOAD_REASON};
+use crate::ntpsapi::GDI_HANDLE_BUFFER32;
+use crate::ntrtl::RTL_MAX_DRIVE_LETTERS;
+use crate::string::{UTF16Const, UTF8Const};
+use winapi::shared::guiddef::GUID;
+use winapi::shared::ntdef::{
+ BOOLEAN, CHAR, LARGE_INTEGER, LCID, LIST_ENTRY32, LONG, NTSTATUS, PROCESSOR_NUMBER,
+ SINGLE_LIST_ENTRY32, STRING32, UCHAR, ULARGE_INTEGER, ULONG, ULONGLONG, UNICODE_STRING,
+ UNICODE_STRING32, USHORT, WCHAR,
+};
+use winapi::um::winnt::{FLS_MAXIMUM_AVAILABLE, NT_TIB32};
+pub const WOW64_SYSTEM_DIRECTORY: UTF8Const = UTF8Const("SysWOW64\0");
+/// "SysWOW64"
+pub const WOW64_SYSTEM_DIRECTORY_U: UTF16Const = UTF16Const(&[
+ 0x0053, 0x0079, 0x0073, 0x0057, 0x004F, 0x0057, 0x0036, 0x0034, 0u16,
+]);
+pub const WOW64_X86_TAG: UTF8Const = UTF8Const(" (x86)\0");
+/// " (x86)"
+pub const WOW64_X86_TAG_U: UTF16Const = UTF16Const(&[
+ 0x0020, 0x0028, 0x0078, 0x0038, 0x0036, 0x0029, 0u16,
+]);
+ENUM!{enum WOW64_SHARED_INFORMATION {
+ SharedNtdll32LdrInitializeThunk = 0,
+ SharedNtdll32KiUserExceptionDispatcher = 1,
+ SharedNtdll32KiUserApcDispatcher = 2,
+ SharedNtdll32KiUserCallbackDispatcher = 3,
+ SharedNtdll32ExpInterlockedPopEntrySListFault = 4,
+ SharedNtdll32ExpInterlockedPopEntrySListResume = 5,
+ SharedNtdll32ExpInterlockedPopEntrySListEnd = 6,
+ SharedNtdll32RtlUserThreadStart = 7,
+ SharedNtdll32pQueryProcessDebugInformationRemote = 8,
+ SharedNtdll32BaseAddress = 9,
+ SharedNtdll32LdrSystemDllInitBlock = 10,
+ Wow64SharedPageEntriesCount = 11,
+}}
+STRUCT!{struct RTL_BALANCED_NODE32_u_s {
+ Left: ULONG, // WOW64_POINTER
+ Right: ULONG, // WOW64_POINTER
+}}
+UNION!{union RTL_BALANCED_NODE32_u {
+ Children: [ULONG; 2], // WOW64_POINTER
+ s: RTL_BALANCED_NODE32_u_s,
+}}
+STRUCT!{struct RTL_BALANCED_NODE32 {
+ u: RTL_BALANCED_NODE32_u,
+ ParentValue: ULONG,
+}}
+pub type PRTL_BALANCED_NODE32 = *mut RTL_BALANCED_NODE32;
+STRUCT!{struct RTL_RB_TREE32 {
+ Root: ULONG, // WOW64_POINTER
+ Min: ULONG, // WOW64_POINTER
+}}
+pub type PRTL_RB_TREE32 = *mut RTL_RB_TREE32;
+STRUCT!{struct PEB_LDR_DATA32 {
+ Length: ULONG,
+ Initialized: BOOLEAN,
+ SsHandle: ULONG,
+ InLoadOrderModuleList: LIST_ENTRY32,
+ InMemoryOrderModuleList: LIST_ENTRY32,
+ InInitializationOrderModuleList: LIST_ENTRY32,
+ EntryInProgress: ULONG,
+ ShutdownInProgress: BOOLEAN,
+ ShutdownThreadId: ULONG,
+}}
+pub type PPEB_LDR_DATA32 = *mut PEB_LDR_DATA32;
+STRUCT!{struct LDR_SERVICE_TAG_RECORD32 {
+ Next: ULONG,
+ ServiceTag: ULONG,
+}}
+pub type PLDR_SERVICE_TAG_RECORD32 = *mut LDR_SERVICE_TAG_RECORD32;
+STRUCT!{struct LDRP_CSLIST32 {
+ Tail: ULONG, // WOW64_POINTER
+}}
+pub type PLDRP_CSLIST32 = *mut LDRP_CSLIST32;
+UNION!{union LDR_DDAG_NODE32_u {
+ Dependencies: LDRP_CSLIST32,
+ RemovalLink: SINGLE_LIST_ENTRY32,
+}}
+STRUCT!{struct LDR_DDAG_NODE32 {
+ Modules: LIST_ENTRY32,
+ ServiceTagList: ULONG, // WOW64_POINTER
+ LoadCount: ULONG,
+ LoadWhileUnloadingCount: ULONG,
+ LowestLink: ULONG,
+ u: LDR_DDAG_NODE32_u,
+ IncomingDependencies: LDRP_CSLIST32,
+ State: LDR_DDAG_STATE,
+ CondenseLink: SINGLE_LIST_ENTRY32,
+ PreorderNumber: ULONG,
+}}
+pub type PLDR_DDAG_NODE32 = *mut LDR_DDAG_NODE32;
+pub const LDR_DATA_TABLE_ENTRY_SIZE_WINXP_32: usize = 80;
+pub const LDR_DATA_TABLE_ENTRY_SIZE_WIN7_32: usize = 144;
+pub const LDR_DATA_TABLE_ENTRY_SIZE_WIN8_32: usize = 152;
+UNION!{union LDR_DATA_TABLE_ENTRY32_u1 {
+ InInitializationOrderLinks: LIST_ENTRY32,
+ InProgressLinks: LIST_ENTRY32,
+}}
+UNION!{union LDR_DATA_TABLE_ENTRY32_u2 {
+ FlagGroup: [UCHAR; 4],
+ Flags: ULONG,
+}}
+STRUCT!{struct LDR_DATA_TABLE_ENTRY32 {
+ InLoadOrderLinks: LIST_ENTRY32,
+ InMemoryOrderLinks: LIST_ENTRY32,
+ u1: LDR_DATA_TABLE_ENTRY32_u1,
+ DllBase: ULONG, // WOW64_POINTER
+ EntryPoint: ULONG, // WOW64_POINTER
+ SizeOfImage: ULONG,
+ FullDllName: UNICODE_STRING32,
+ BaseDllName: UNICODE_STRING32,
+ u2: LDR_DATA_TABLE_ENTRY32_u2,
+ ObsoleteLoadCount: USHORT,
+ TlsIndex: USHORT,
+ HashLinks: LIST_ENTRY32,
+ TimeDateStamp: ULONG,
+ EntryPointActivationContext: ULONG, // WOW64_POINTER
+ Lock: ULONG, // WOW64_POINTER
+ DdagNode: ULONG, // WOW64_POINTER
+ NodeModuleLink: LIST_ENTRY32,
+ LoadContext: ULONG, // WOW64_POINTER
+ ParentDllBase: ULONG, // WOW64_POINTER
+ SwitchBackContext: ULONG, // WOW64_POINTER
+ BaseAddressIndexNode: RTL_BALANCED_NODE32,
+ MappingInfoIndexNode: RTL_BALANCED_NODE32,
+ OriginalBase: ULONG,
+ LoadTime: LARGE_INTEGER,
+ BaseNameHashValue: ULONG,
+ LoadReason: LDR_DLL_LOAD_REASON,
+ ImplicitPathOptions: ULONG,
+ ReferenceCount: ULONG,
+ DependentLoadFlags: ULONG,
+ SigningLevel: UCHAR,
+}}
+BITFIELD!{unsafe LDR_DATA_TABLE_ENTRY32_u2 Flags: ULONG [
+ PackagedBinary set_PackagedBinary[0..1],
+ MarkedForRemoval set_MarkedForRemoval[1..2],
+ ImageDll set_ImageDll[2..3],
+ LoadNotificationsSent set_LoadNotificationsSent[3..4],
+ TelemetryEntryProcessed set_TelemetryEntryProcessed[4..5],
+ ProcessStaticImport set_ProcessStaticImport[5..6],
+ InLegacyLists set_InLegacyLists[6..7],
+ InIndexes set_InIndexes[7..8],
+ ShimDll set_ShimDll[8..9],
+ InExceptionTable set_InExceptionTable[9..10],
+ ReservedFlags1 set_ReservedFlags1[10..12],
+ LoadInProgress set_LoadInProgress[12..13],
+ LoadConfigProcessed set_LoadConfigProcessed[13..14],
+ EntryProcessed set_EntryProcessed[14..15],
+ ProtectDelayLoad set_ProtectDelayLoad[15..16],
+ ReservedFlags3 set_ReservedFlags3[16..18],
+ DontCallForThreads set_DontCallForThreads[18..19],
+ ProcessAttachCalled set_ProcessAttachCalled[19..20],
+ ProcessAttachFailed set_ProcessAttachFailed[20..21],
+ CorDeferredValidate set_CorDeferredValidate[21..22],
+ CorImage set_CorImage[22..23],
+ DontRelocate set_DontRelocate[23..24],
+ CorILOnly set_CorILOnly[24..25],
+ ReservedFlags5 set_ReservedFlags5[25..28],
+ Redirected set_Redirected[28..29],
+ ReservedFlags6 set_ReservedFlags6[29..31],
+ CompatDatabaseProcessed set_CompatDatabaseProcessed[31..32],
+]}
+pub type PLDR_DATA_TABLE_ENTRY32 = *mut LDR_DATA_TABLE_ENTRY32;
+STRUCT!{struct CURDIR32 {
+ DosPath: UNICODE_STRING32,
+ Handle: ULONG, // WOW64_POINTER
+}}
+pub type PCURDIR32 = *mut CURDIR32;
+STRUCT!{struct RTL_DRIVE_LETTER_CURDIR32 {
+ Flags: USHORT,
+ Length: USHORT,
+ TimeStamp: ULONG,
+ DosPath: STRING32,
+}}
+pub type PRTL_DRIVE_LETTER_CURDIR32 = *mut RTL_DRIVE_LETTER_CURDIR32;
+STRUCT!{struct RTL_USER_PROCESS_PARAMETERS32 {
+ MaximumLength: ULONG,
+ Length: ULONG,
+ Flags: ULONG,
+ DebugFlags: ULONG,
+ ConsoleHandle: ULONG, // WOW64_POINTER
+ ConsoleFlags: ULONG,
+ StandardInput: ULONG, // WOW64_POINTER
+ StandardOutput: ULONG, // WOW64_POINTER
+ StandardError: ULONG, // WOW64_POINTER
+ CurrentDirectory: CURDIR32,
+ DllPath: UNICODE_STRING32,
+ ImagePathName: UNICODE_STRING32,
+ CommandLine: UNICODE_STRING32,
+ Environment: ULONG, // WOW64_POINTER
+ StartingX: ULONG,
+ StartingY: ULONG,
+ CountX: ULONG,
+ CountY: ULONG,
+ CountCharsX: ULONG,
+ CountCharsY: ULONG,
+ FillAttribute: ULONG,
+ WindowFlags: ULONG,
+ ShowWindowFlags: ULONG,
+ WindowTitle: UNICODE_STRING32,
+ DesktopInfo: UNICODE_STRING32,
+ ShellInfo: UNICODE_STRING32,
+ RuntimeData: UNICODE_STRING32,
+ CurrentDirectories: [RTL_DRIVE_LETTER_CURDIR32; RTL_MAX_DRIVE_LETTERS],
+ EnvironmentSize: ULONG,
+ EnvironmentVersion: ULONG,
+ PackageDependencyData: ULONG, // WOW64_POINTER
+ ProcessGroupId: ULONG,
+ LoaderThreads: ULONG,
+}}
+pub type PRTL_USER_PROCESS_PARAMETERS32 = *mut RTL_USER_PROCESS_PARAMETERS32;
+UNION!{union PEB32_u {
+ KernelCallbackTable: ULONG, // WOW64_POINTER
+ UserSharedInfoPtr: ULONG, // WOW64_POINTER
+}}
+STRUCT!{struct PEB32 {
+ InheritedAddressSpace: BOOLEAN,
+ ReadImageFileExecOptions: BOOLEAN,
+ BeingDebugged: BOOLEAN,
+ BitField: BOOLEAN,
+ Mutant: ULONG, // WOW64_POINTER
+ ImageBaseAddress: ULONG, // WOW64_POINTER
+ Ldr: ULONG, // WOW64_POINTER
+ ProcessParameters: ULONG, // WOW64_POINTER
+ SubSystemData: ULONG, // WOW64_POINTER
+ ProcessHeap: ULONG, // WOW64_POINTER
+ FastPebLock: ULONG, // WOW64_POINTER
+ AtlThunkSListPtr: ULONG, // WOW64_POINTER
+ IFEOKey: ULONG, // WOW64_POINTER
+ CrossProcessFlags: ULONG,
+ u: PEB32_u,
+ SystemReserved: [ULONG; 1],
+ AtlThunkSListPtr32: ULONG,
+ ApiSetMap: ULONG, // WOW64_POINTER
+ TlsExpansionCounter: ULONG,
+ TlsBitmap: ULONG, // WOW64_POINTER
+ TlsBitmapBits: [ULONG; 2],
+ ReadOnlySharedMemoryBase: ULONG, // WOW64_POINTER
+ HotpatchInformation: ULONG, // WOW64_POINTER
+ ReadOnlyStaticServerData: ULONG, // WOW64_POINTER
+ AnsiCodePageData: ULONG, // WOW64_POINTER
+ OemCodePageData: ULONG, // WOW64_POINTER
+ UnicodeCaseTableData: ULONG, // WOW64_POINTER
+ NumberOfProcessors: ULONG,
+ NtGlobalFlag: ULONG,
+ CriticalSectionTimeout: LARGE_INTEGER,
+ HeapSegmentReserve: ULONG,
+ HeapSegmentCommit: ULONG,
+ HeapDeCommitTotalFreeThreshold: ULONG,
+ HeapDeCommitFreeBlockThreshold: ULONG,
+ NumberOfHeaps: ULONG,
+ MaximumNumberOfHeaps: ULONG,
+ ProcessHeaps: ULONG, // WOW64_POINTER
+ GdiSharedHandleTable: ULONG, // WOW64_POINTER
+ ProcessStarterHelper: ULONG, // WOW64_POINTER
+ GdiDCAttributeList: ULONG,
+ LoaderLock: ULONG, // WOW64_POINTER
+ OSMajorVersion: ULONG,
+ OSMinorVersion: ULONG,
+ OSBuildNumber: USHORT,
+ OSCSDVersion: USHORT,
+ OSPlatformId: ULONG,
+ ImageSubsystem: ULONG,
+ ImageSubsystemMajorVersion: ULONG,
+ ImageSubsystemMinorVersion: ULONG,
+ ActiveProcessAffinityMask: ULONG,
+ GdiHandleBuffer: GDI_HANDLE_BUFFER32,
+ PostProcessInitRoutine: ULONG, // WOW64_POINTER
+ TlsExpansionBitmap: ULONG, // WOW64_POINTER
+ TlsExpansionBitmapBits: [ULONG; 32],
+ SessionId: ULONG,
+ AppCompatFlags: ULARGE_INTEGER,
+ AppCompatFlagsUser: ULARGE_INTEGER,
+ pShimData: ULONG, // WOW64_POINTER
+ AppCompatInfo: ULONG, // WOW64_POINTER
+ CSDVersion: UNICODE_STRING32,
+ ActivationContextData: ULONG, // WOW64_POINTER
+ ProcessAssemblyStorageMap: ULONG, // WOW64_POINTER
+ SystemDefaultActivationContextData: ULONG, // WOW64_POINTER
+ SystemAssemblyStorageMap: ULONG, // WOW64_POINTER
+ MinimumStackCommit: ULONG,
+ FlsCallback: ULONG, // WOW64_POINTER
+ FlsListHead: LIST_ENTRY32,
+ FlsBitmap: ULONG, // WOW64_POINTER
+ FlsBitmapBits: [ULONG; FLS_MAXIMUM_AVAILABLE as usize / (size_of::<ULONG>() * 8)],
+ FlsHighIndex: ULONG,
+ WerRegistrationData: ULONG, // WOW64_POINTER
+ WerShipAssertPtr: ULONG, // WOW64_POINTER
+ pContextData: ULONG, // WOW64_POINTER
+ pImageHeaderHash: ULONG, // WOW64_POINTER
+ TracingFlags: ULONG,
+ CsrServerReadOnlySharedMemoryBase: ULONGLONG,
+ TppWorkerpListLock: ULONG, // WOW64_POINTER
+ TppWorkerpList: LIST_ENTRY32,
+ WaitOnAddressHashTable: [ULONG; 128], // WOW64_POINTER
+ TelemetryCoverageHeader: ULONG, // WOW64_POINTER
+ CloudFileFlags: ULONG,
+ CloudFileDiagFlags: ULONG,
+ PlaceholderCompatibilityMode: CHAR,
+ PlaceholderCompatibilityModeReserved: [CHAR; 7],
+}}
+BITFIELD!{PEB32 BitField: BOOLEAN [
+ ImageUsesLargePages set_ImageUsesLargePages[0..1],
+ IsProtectedProcess set_IsProtectedProcess[1..2],
+ IsImageDynamicallyRelocated set_IsImageDynamicallyRelocated[2..3],
+ SkipPatchingUser32Forwarders set_SkipPatchingUser32Forwarders[3..4],
+ IsPackagedProcess set_IsPackagedProcess[4..5],
+ IsAppContainer set_IsAppContainer[5..6],
+ IsProtectedProcessLight set_IsProtectedProcessLight[6..7],
+ IsLongPathAwareProcess set_IsLongPathAwareProcess[7..8],
+]}
+BITFIELD!{PEB32 CrossProcessFlags: ULONG [
+ ProcessInJob set_ProcessInJob[0..1],
+ ProcessInitializing set_ProcessInitializing[1..2],
+ ProcessUsingVEH set_ProcessUsingVEH[2..3],
+ ProcessUsingVCH set_ProcessUsingVCH[3..4],
+ ProcessUsingFTH set_ProcessUsingFTH[4..5],
+ ReservedBits0 set_ReservedBits0[5..32],
+]}
+BITFIELD!{PEB32 TracingFlags: ULONG [
+ HeapTracingEnabled set_HeapTracingEnabled[0..1],
+ CritSecTracingEnabled set_CritSecTracingEnabled[1..2],
+ LibLoaderTracingEnabled set_LibLoaderTracingEnabled[2..3],
+ SpareTracingBits set_SpareTracingBits[3..32],
+]}
+pub type PPEB32 = *mut PEB32;
+pub const GDI_BATCH_BUFFER_SIZE: usize = 310;
+STRUCT!{struct GDI_TEB_BATCH32 {
+ Offset: ULONG,
+ HDC: ULONG,
+ Buffer: [ULONG; GDI_BATCH_BUFFER_SIZE],
+}}
+pub type PGDI_TEB_BATCH32 = *mut GDI_TEB_BATCH32;
+STRUCT!{struct TEB32_u_s {
+ ReservedPad0: UCHAR,
+ ReservedPad1: UCHAR,
+ ReservedPad2: UCHAR,
+ IdealProcessor: UCHAR,
+}}
+UNION!{union TEB32_u {
+ CurrentIdealProcessor: PROCESSOR_NUMBER,
+ IdealProcessorValue: ULONG,
+ s: TEB32_u_s,
+}}
+STRUCT!{struct TEB32 {
+ NtTib: NT_TIB32,
+ EnvironmentPointer: ULONG, // WOW64_POINTER
+ ClientId: CLIENT_ID32,
+ ActiveRpcHandle: ULONG, // WOW64_POINTER
+ ThreadLocalStoragePointer: ULONG, // WOW64_POINTER
+ ProcessEnvironmentBlock: ULONG, // WOW64_POINTER
+ LastErrorValue: ULONG,
+ CountOfOwnedCriticalSections: ULONG,
+ CsrClientThread: ULONG, // WOW64_POINTER
+ Win32ThreadInfo: ULONG, // WOW64_POINTER
+ User32Reserved: [ULONG; 26],
+ UserReserved: [ULONG; 5],
+ WOW32Reserved: ULONG, // WOW64_POINTER
+ CurrentLocale: LCID,
+ FpSoftwareStatusRegister: ULONG,
+ ReservedForDebuggerInstrumentation: [ULONG; 16], // WOW64_POINTER
+ SystemReserved1: [ULONG; 36], // WOW64_POINTER
+ WorkingOnBehalfTicket: [UCHAR; 8],
+ ExceptionCode: NTSTATUS,
+ ActivationContextStackPointer: ULONG, // WOW64_POINTER
+ InstrumentationCallbackSp: ULONG,
+ InstrumentationCallbackPreviousPc: ULONG,
+ InstrumentationCallbackPreviousSp: ULONG,
+ InstrumentationCallbackDisabled: BOOLEAN,
+ SpareBytes: [UCHAR; 23],
+ TxFsContext: ULONG,
+ GdiTebBatch: GDI_TEB_BATCH32,
+ RealClientId: CLIENT_ID32,
+ GdiCachedProcessHandle: ULONG, // WOW64_POINTER
+ GdiClientPID: ULONG,
+ GdiClientTID: ULONG,
+ GdiThreadLocalInfo: ULONG, // WOW64_POINTER
+ Win32ClientInfo: [ULONG; 62],
+ glDispatchTable: [ULONG; 233], // WOW64_POINTER
+ glReserved1: [ULONG; 29], // WOW64_POINTER
+ glReserved2: ULONG, // WOW64_POINTER
+ glSectionInfo: ULONG, // WOW64_POINTER
+ glSection: ULONG, // WOW64_POINTER
+ glTable: ULONG, // WOW64_POINTER
+ glCurrentRC: ULONG, // WOW64_POINTER
+ glContext: ULONG, // WOW64_POINTER
+ LastStatusValue: NTSTATUS,
+ StaticUnicodeString: UNICODE_STRING32,
+ StaticUnicodeBuffer: [WCHAR; 261],
+ DeallocationStack: ULONG, // WOW64_POINTER
+ TlsSlots: [ULONG; 64], // WOW64_POINTER
+ TlsLinks: LIST_ENTRY32,
+ Vdm: ULONG, // WOW64_POINTER
+ ReservedForNtRpc: ULONG, // WOW64_POINTER
+ DbgSsReserved: [ULONG; 2], // WOW64_POINTER
+ HardErrorMode: ULONG,
+ Instrumentation: [ULONG; 9], // WOW64_POINTER
+ ActivityId: GUID,
+ SubProcessTag: ULONG, // WOW64_POINTER
+ PerflibData: ULONG, // WOW64_POINTER
+ EtwTraceData: ULONG, // WOW64_POINTER
+ WinSockData: ULONG, // WOW64_POINTER
+ GdiBatchCount: ULONG,
+ u: TEB32_u,
+ GuaranteedStackBytes: ULONG,
+ ReservedForPerf: ULONG, // WOW64_POINTER
+ ReservedForOle: ULONG, // WOW64_POINTER
+ WaitingOnLoaderLock: ULONG,
+ SavedPriorityState: ULONG, // WOW64_POINTER
+ ReservedForCodeCoverage: ULONG,
+ ThreadPoolData: ULONG, // WOW64_POINTER
+ TlsExpansionSlots: ULONG, // WOW64_POINTER
+ MuiGeneration: ULONG,
+ IsImpersonating: ULONG,
+ NlsCache: ULONG, // WOW64_POINTER
+ pShimData: ULONG, // WOW64_POINTER
+ HeapVirtualAffinity: USHORT,
+ LowFragHeapDataSlot: USHORT,
+ CurrentTransactionHandle: ULONG, // WOW64_POINTER
+ ActiveFrame: ULONG, // WOW64_POINTER
+ FlsData: ULONG, // WOW64_POINTER
+ PreferredLanguages: ULONG, // WOW64_POINTER
+ UserPrefLanguages: ULONG, // WOW64_POINTER
+ MergedPrefLanguages: ULONG, // WOW64_POINTER
+ MuiImpersonation: ULONG,
+ CrossTebFlags: USHORT,
+ SameTebFlags: USHORT,
+ TxnScopeEnterCallback: ULONG, // WOW64_POINTER
+ TxnScopeExitCallback: ULONG, // WOW64_POINTER
+ TxnScopeContext: ULONG, // WOW64_POINTER
+ LockCount: ULONG,
+ WowTebOffset: LONG,
+ ResourceRetValue: ULONG, // WOW64_POINTER
+ ReservedForWdf: ULONG, // WOW64_POINTER
+ ReservedForCrt: ULONGLONG,
+ EffectiveContainerId: GUID,
+}}
+BITFIELD!{TEB32 SameTebFlags: USHORT [
+ SafeThunkCall set_SafeThunkCall[0..1],
+ InDebugPrint set_InDebugPrint[1..2],
+ HasFiberData set_HasFiberData[2..3],
+ SkipThreadAttach set_SkipThreadAttach[3..4],
+ WerInShipAssertCode set_WerInShipAssertCode[4..5],
+ RanProcessInit set_RanProcessInit[5..6],
+ ClonedThread set_ClonedThread[6..7],
+ SuppressDebugMsg set_SuppressDebugMsg[7..8],
+ DisableUserStackWalk set_DisableUserStackWalk[8..9],
+ RtlExceptionAttached set_RtlExceptionAttached[9..10],
+ InitialThread set_InitialThread[10..11],
+ SessionAware set_SessionAware[11..12],
+ LoadOwner set_LoadOwner[12..13],
+ LoaderWorker set_LoaderWorker[13..14],
+ SpareSameTebBits set_SpareSameTebBits[14..16],
+]}
+pub type PTEB32 = *mut TEB32;
+#[inline]
+pub fn UStr32ToUStr(
+ Destination: &mut UNICODE_STRING,
+ Source: &UNICODE_STRING32,
+) {
+ Destination.Length = Source.Length;
+ Destination.MaximumLength = Source.MaximumLength;
+ Destination.Buffer = Source.Buffer as *mut u16;
+}
+#[inline]
+pub fn UStrToUStr32(
+ Destination: &mut UNICODE_STRING32,
+ Source: &UNICODE_STRING,
+) {
+ Destination.Length = Source.Length;
+ Destination.MaximumLength = Source.MaximumLength;
+ Destination.Buffer = Source.Buffer as u32;
+}