From e2659819b8193b151980e80679af1fa4748eb640 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Fri, 5 Mar 2021 15:53:19 +0100 Subject: [PATCH] include: Always define 32- and 64-bit versions of the TEB and PEB structures. Signed-off-by: Alexandre Julliard --- dlls/dbghelp/dbghelp_private.h | 21 --- dlls/kernelbase/debug.c | 32 ----- include/winternl.h | 251 ++++++++++++++++++++++++++++++++- 3 files changed, 248 insertions(+), 56 deletions(-) diff --git a/dlls/dbghelp/dbghelp_private.h b/dlls/dbghelp/dbghelp_private.h index b51e8800403..3415fc1557c 100644 --- a/dlls/dbghelp/dbghelp_private.h +++ b/dlls/dbghelp/dbghelp_private.h @@ -578,27 +578,6 @@ struct cpu extern struct cpu* dbghelp_current_cpu DECLSPEC_HIDDEN; -/* Abbreviated 32-bit PEB */ -typedef struct _PEB32 -{ - BOOLEAN InheritedAddressSpace; - BOOLEAN ReadImageFileExecOptions; - BOOLEAN BeingDebugged; - BOOLEAN SpareBool; - DWORD Mutant; - DWORD ImageBaseAddress; - DWORD LdrData; - DWORD ProcessParameters; - DWORD SubSystemData; - DWORD ProcessHeap; - DWORD FastPebLock; - DWORD FastPebLockRoutine; - DWORD FastPebUnlockRoutine; - ULONG EnvironmentUpdateCount; - DWORD KernelCallbackTable; - ULONG Reserved[2]; -} PEB32; - /* dbghelp.c */ extern struct process* process_find_by_handle(HANDLE hProcess) DECLSPEC_HIDDEN; extern BOOL validate_addr64(DWORD64 addr) DECLSPEC_HIDDEN; diff --git a/dlls/kernelbase/debug.c b/dlls/kernelbase/debug.c index cbc53e22ac1..5d83e692222 100644 --- a/dlls/kernelbase/debug.c +++ b/dlls/kernelbase/debug.c @@ -741,38 +741,6 @@ HRESULT WINAPI /* DECLSPEC_HOTPATCH */ WerUnregisterRuntimeExceptionModule( cons ***********************************************************************/ -typedef struct _PEB32 -{ - BOOLEAN InheritedAddressSpace; - BOOLEAN ReadImageFileExecOptions; - BOOLEAN BeingDebugged; - BOOLEAN SpareBool; - DWORD Mutant; - DWORD ImageBaseAddress; - DWORD LdrData; -} PEB32; - -typedef struct _LIST_ENTRY32 -{ - DWORD Flink; - DWORD Blink; -} LIST_ENTRY32; - -typedef struct _PEB_LDR_DATA32 -{ - ULONG Length; - BOOLEAN Initialized; - DWORD SsHandle; - LIST_ENTRY32 InLoadOrderModuleList; -} PEB_LDR_DATA32; - -typedef struct _UNICODE_STRING32 -{ - USHORT Length; - USHORT MaximumLength; - DWORD Buffer; -} UNICODE_STRING32; - typedef struct _LDR_DATA_TABLE_ENTRY32 { LIST_ENTRY32 InLoadOrderModuleList; diff --git a/include/winternl.h b/include/winternl.h index f0ab223ef2e..d35d509eb41 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -504,9 +504,18 @@ typedef struct _TEB /*********************************************************************** - * The 64-bit version of the PEB and TEB for WoW64 + * The 32-bit/64-bit version of the PEB and TEB for WoW64 */ -#ifndef _WIN64 +typedef struct _NT_TIB32 +{ + ULONG ExceptionList; /* 0000 */ + ULONG StackBase; /* 0004 */ + ULONG StackLimit; /* 0008 */ + ULONG SubSystemTib; /* 000c */ + ULONG FiberData; /* 0010 */ + ULONG ArbitraryUserPointer; /* 0014 */ + ULONG Self; /* 0018 */ +} NT_TIB32; typedef struct _NT_TIB64 { @@ -519,18 +528,37 @@ typedef struct _NT_TIB64 ULONG64 Self; /* 0030 */ } NT_TIB64; +typedef struct _CLIENT_ID32 +{ + ULONG UniqueProcess; + ULONG UniqueThread; +} CLIENT_ID32; + typedef struct _CLIENT_ID64 { ULONG64 UniqueProcess; ULONG64 UniqueThread; } CLIENT_ID64; +typedef struct _LIST_ENTRY32 +{ + ULONG Flink; + ULONG Blink; +} LIST_ENTRY32; + typedef struct _LIST_ENTRY64 { ULONG64 Flink; ULONG64 Blink; } LIST_ENTRY64; +typedef struct _UNICODE_STRING32 +{ + USHORT Length; + USHORT MaximumLength; + ULONG Buffer; +} UNICODE_STRING32; + typedef struct _UNICODE_STRING64 { USHORT Length; @@ -538,6 +566,15 @@ typedef struct _UNICODE_STRING64 ULONG64 Buffer; } UNICODE_STRING64; +typedef struct _ACTIVATION_CONTEXT_STACK32 +{ + ULONG ActiveFrame; + LIST_ENTRY32 FrameListCache; + ULONG Flags; + ULONG NextCookieSequenceNumber; + ULONG32 StackId; +} ACTIVATION_CONTEXT_STACK32; + typedef struct _ACTIVATION_CONTEXT_STACK64 { ULONG64 ActiveFrame; @@ -547,6 +584,123 @@ typedef struct _ACTIVATION_CONTEXT_STACK64 ULONG64 StackId; } ACTIVATION_CONTEXT_STACK64; +typedef struct _PEB_LDR_DATA32 +{ + ULONG Length; + BOOLEAN Initialized; + ULONG SsHandle; + LIST_ENTRY32 InLoadOrderModuleList; + LIST_ENTRY32 InMemoryOrderModuleList; + LIST_ENTRY32 InInitializationOrderModuleList; + ULONG EntryInProgress; + BOOLEAN ShutdownInProgress; + ULONG ShutdownThreadId; +} PEB_LDR_DATA32, *PPEB_LDR_DATA32; + +typedef struct _PEB_LDR_DATA64 +{ + ULONG Length; + BOOLEAN Initialized; + ULONG64 SsHandle; + LIST_ENTRY64 InLoadOrderModuleList; + LIST_ENTRY64 InMemoryOrderModuleList; + LIST_ENTRY64 InInitializationOrderModuleList; + ULONG64 EntryInProgress; + BOOLEAN ShutdownInProgress; + ULONG64 ShutdownThreadId; +} PEB_LDR_DATA64, *PPEB_LDR_DATA64; + +typedef struct _PEB32 +{ + BOOLEAN InheritedAddressSpace; /* 0000 */ + BOOLEAN ReadImageFileExecOptions; /* 0001 */ + BOOLEAN BeingDebugged; /* 0002 */ + BOOLEAN SpareBool; /* 0003 */ + ULONG Mutant; /* 0004 */ + ULONG ImageBaseAddress; /* 0008 */ + ULONG LdrData; /* 000c */ + ULONG ProcessParameters; /* 0010 */ + ULONG SubSystemData; /* 0014 */ + ULONG ProcessHeap; /* 0018 */ + ULONG FastPebLock; /* 001c */ + ULONG FastPebLockRoutine; /* 0020 */ + ULONG FastPebUnlockRoutine; /* 0024 */ + ULONG EnvironmentUpdateCount; /* 0028 */ + ULONG KernelCallbackTable; /* 002c */ + ULONG Reserved; /* 0030 */ + ULONG AtlThunkSListPtr32; /* 0034 */ + ULONG FreeList; /* 0038 */ + ULONG TlsExpansionCounter; /* 003c */ + ULONG TlsBitmap; /* 0040 */ + ULONG TlsBitmapBits[2]; /* 0044 */ + ULONG ReadOnlySharedMemoryBase; /* 004c */ + ULONG ReadOnlySharedMemoryHeap; /* 0050 */ + ULONG ReadOnlyStaticServerData; /* 0054 */ + ULONG AnsiCodePageData; /* 0058 */ + ULONG OemCodePageData; /* 005c */ + ULONG UnicodeCaseTableData; /* 0060 */ + ULONG NumberOfProcessors; /* 0064 */ + ULONG NtGlobalFlag; /* 0068 */ + LARGE_INTEGER CriticalSectionTimeout; /* 0070 */ + ULONG HeapSegmentReserve; /* 0078 */ + ULONG HeapSegmentCommit; /* 007c */ + ULONG HeapDeCommitTotalFreeThreshold; /* 0080 */ + ULONG HeapDeCommitFreeBlockThreshold; /* 0084 */ + ULONG NumberOfHeaps; /* 0088 */ + ULONG MaximumNumberOfHeaps; /* 008c */ + ULONG ProcessHeaps; /* 0090 */ + ULONG GdiSharedHandleTable; /* 0094 */ + ULONG ProcessStarterHelper; /* 0098 */ + ULONG GdiDCAttributeList; /* 009c */ + ULONG LoaderLock; /* 00a0 */ + ULONG OSMajorVersion; /* 00a4 */ + ULONG OSMinorVersion; /* 00a8 */ + ULONG OSBuildNumber; /* 00ac */ + ULONG OSPlatformId; /* 00b0 */ + ULONG ImageSubSystem; /* 00b4 */ + ULONG ImageSubSystemMajorVersion; /* 00b8 */ + ULONG ImageSubSystemMinorVersion; /* 00bc */ + ULONG ImageProcessAffinityMask; /* 00c0 */ + ULONG GdiHandleBuffer[28]; /* 00c4 */ + ULONG unknown[6]; /* 0134 */ + ULONG PostProcessInitRoutine; /* 014c */ + ULONG TlsExpansionBitmap; /* 0150 */ + ULONG TlsExpansionBitmapBits[32]; /* 0154 */ + ULONG SessionId; /* 01d4 */ + ULARGE_INTEGER AppCompatFlags; /* 01d8 */ + ULARGE_INTEGER AppCompatFlagsUser; /* 01e0 */ + ULONG ShimData; /* 01e8 */ + ULONG AppCompatInfo; /* 01ec */ + UNICODE_STRING CSDVersion; /* 01f0 */ + ULONG ActivationContextData; /* 01f8 */ + ULONG ProcessAssemblyStorageMap; /* 01fc */ + ULONG SystemDefaultActivationData; /* 0200 */ + ULONG SystemAssemblyStorageMap; /* 0204 */ + ULONG MinimumStackCommit; /* 0208 */ + ULONG FlsCallback; /* 020c */ + LIST_ENTRY FlsListHead; /* 0210 */ + ULONG FlsBitmap; /* 0218 */ + ULONG FlsBitmapBits[4]; /* 021c */ + ULONG FlsHighIndex; /* 022c */ + ULONG WerRegistrationData; /* 0230 */ + ULONG WerShipAssertPtr; /* 0234 */ + ULONG pUnused; /* 0238 */ + ULONG pImageHeaderHash; /* 023c */ + ULONG TracingFlags; /* 0240 */ + ULONGLONG CsrServerReadOnlySharedMemoryBase; /* 0248 */ + ULONG TppWorkerpListLock; /* 0250 */ + LIST_ENTRY TppWorkerpList; /* 0254 */ + ULONG WaitOnAddressHashTable [0x80]; /* 025c */ + ULONG TelemetryCoverageHeader; /* 045c */ + ULONG CloudFileFlags; /* 0460 */ + ULONG CloudFileDiagFlags; /* 0464 */ + CHAR PlaceholderCompatibilityMode; /* 0468 */ + CHAR PlaceholderCompatibilityModeReserved[7]; /* 0469 */ + ULONG LeapSecondData; /* 0470 */ + ULONG LeapSecondFlags; /* 0474 */ + ULONG NtGlobalFlag2; /* 0478 */ +} PEB32; + typedef struct _PEB64 { BOOLEAN InheritedAddressSpace; /* 0000 */ @@ -638,6 +792,98 @@ typedef struct _PEB64 ULONG NtGlobalFlag2; /* 07c4 */ } PEB64; +typedef struct _TEB32 +{ + NT_TIB32 Tib; /* 0000 */ + ULONG EnvironmentPointer; /* 001c */ + CLIENT_ID32 ClientId; /* 0020 */ + ULONG ActiveRpcHandle; /* 0028 */ + ULONG ThreadLocalStoragePointer; /* 002c */ + ULONG Peb; /* 0030 */ + ULONG LastErrorValue; /* 0034 */ + ULONG CountOfOwnedCriticalSections; /* 0038 */ + ULONG CsrClientThread; /* 003c */ + ULONG Win32ThreadInfo; /* 0040 */ + ULONG User32Reserved[26]; /* 0044 */ + ULONG UserReserved[5]; /* 00ac */ + ULONG WOW32Reserved; /* 00c0 */ + ULONG CurrentLocale; /* 00c4 */ + ULONG FpSoftwareStatusRegister; /* 00c8 */ + ULONG ReservedForDebuggerInstrumentation[16]; /* 00cc */ + ULONG SystemReserved1[26]; /* 010c */ + char PlaceholderCompatibilityMode; /* 0174 */ + char PlaceholderReserved[11]; /* 0175 */ + DWORD ProxiedProcessId; /* 0180 */ + ACTIVATION_CONTEXT_STACK32 ActivationContextStack; /* 0184 */ + UCHAR WorkingOnBehalfOfTicket[8]; /* 019c */ + LONG ExceptionCode; /* 01a4 */ + ULONG ActivationContextStackPointer; /* 01a8 */ + ULONG InstrumentationCallbackSp; /* 01ac */ + ULONG InstrumentationCallbackPreviousPc; /* 01b0 */ + ULONG InstrumentationCallbackPreviousSp; /* 01b4 */ + BOOLEAN InstrumentationCallbackDisabled; /* 01b8 */ + BYTE SpareBytes1[23]; /* 01b9 */ + ULONG TxFsContext; /* 01d0 */ + ULONG GdiTebBatch[0x138]; /* 01d4 */ + CLIENT_ID32 RealClientId; /* 06b4 */ + ULONG GdiCachedProcessHandle; /* 06bc */ + ULONG GdiClientPID; /* 06c0 */ + ULONG GdiClientTID; /* 06c4 */ + ULONG GdiThreadLocaleInfo; /* 06c8 */ + ULONG Win32ClientInfo[62]; /* 06cc */ + ULONG glDispatchTable[233]; /* 07c4 */ + ULONG glReserved1[29]; /* 0b68 */ + ULONG glReserved2; /* 0bdc */ + ULONG glSectionInfo; /* 0be0 */ + ULONG glSection; /* 0be4 */ + ULONG glTable; /* 0be8 */ + ULONG glCurrentRC; /* 0bec */ + ULONG glContext; /* 0bf0 */ + ULONG LastStatusValue; /* 0bf4 */ + UNICODE_STRING32 StaticUnicodeString; /* 0bf8 */ + WCHAR StaticUnicodeBuffer[261]; /* 0c00 */ + ULONG DeallocationStack; /* 0e0c */ + ULONG TlsSlots[64]; /* 0e10 */ + LIST_ENTRY32 TlsLinks; /* 0f10 */ + ULONG Vdm; /* 0f18 */ + ULONG ReservedForNtRpc; /* 0f1c */ + ULONG DbgSsReserved[2]; /* 0f20 */ + ULONG HardErrorDisabled; /* 0f28 */ + ULONG Instrumentation[16]; /* 0f2c */ + ULONG WinSockData; /* 0f6c */ + ULONG GdiBatchCount; /* 0f70 */ + ULONG Spare2; /* 0f74 */ + ULONG GuaranteedStackBytes; /* 0f78 */ + ULONG ReservedForPerf; /* 0f7c */ + ULONG ReservedForOle; /* 0f80 */ + ULONG WaitingOnLoaderLock; /* 0f84 */ + ULONG Reserved5[3]; /* 0f88 */ + ULONG TlsExpansionSlots; /* 0f94 */ + ULONG ImpersonationLocale; /* 0f98 */ + ULONG IsImpersonating; /* 0f9c */ + ULONG NlsCache; /* 0fa0 */ + ULONG ShimData; /* 0fa4 */ + ULONG HeapVirtualAffinity; /* 0fa8 */ + ULONG CurrentTransactionHandle; /* 0fac */ + ULONG ActiveFrame; /* 0fb0 */ + ULONG FlsSlots; /* 0fb4 */ + ULONG PreferredLanguages; /* 0fb8 */ + ULONG UserPrefLanguages; /* 0fbc */ + ULONG MergedPrefLanguages; /* 0fc0 */ + ULONG MuiImpersonation; /* 0fc4 */ + USHORT CrossTebFlags; /* 0fc8 */ + USHORT SameTebFlags; /* 0fca */ + ULONG TxnScopeEnterCallback; /* 0fcc */ + ULONG TxnScopeExitCallback; /* 0fd0 */ + ULONG TxnScopeContext; /* 0fd4 */ + ULONG LockCount; /* 0fd8 */ + LONG WowTebOffset; /* 0fdc */ + ULONG ResourceRetValue; /* 0fe0 */ + ULONG ReservedForWdf; /* 0fe4 */ + ULONGLONG ReservedForCrt; /* 0fe8 */ + GUID EffectiveContainerId; /* 0ff0 */ +} TEB32; + typedef struct _TEB64 { NT_TIB64 Tib; /* 0000 */ @@ -734,7 +980,6 @@ typedef struct _TEB64 /* reserved TEB64 TLS slots for Wow64 */ #define WOW64_TLS_FILESYSREDIR 8 -#endif /* _WIN64 */ /*********************************************************************** * Enums