-/* TEB/PEB parameters */\r
-#ifndef __INCLUDE_INTERNAL_TEB\r
-#define __INCLUDE_INTERNAL_TEB\r
-\r
-#include <napi/types.h>\r
-\r
-typedef struct _CLIENT_ID\r
-{\r
- HANDLE UniqueProcess;\r
- HANDLE UniqueThread;\r
-} CLIENT_ID, *PCLIENT_ID;\r
-\r
-typedef struct _CURDIR\r
-{\r
- UNICODE_STRING DosPath;\r
- PVOID Handle;\r
-} CURDIR, *PCURDIR;\r
-\r
-typedef struct RTL_DRIVE_LETTER_CURDIR\r
-{\r
- USHORT Flags;\r
- USHORT Length;\r
- ULONG TimeStamp;\r
- UNICODE_STRING DosPath;\r
-} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;\r
-\r
-typedef struct _PEB_FREE_BLOCK\r
-{\r
- struct _PEB_FREE_BLOCK* Next;\r
- ULONG Size;\r
-} PEB_FREE_BLOCK, *PPEB_FREE_BLOCK;\r
-\r
-/* RTL_USER_PROCESS_PARAMETERS.Flags */\r
-#define PPF_NORMALIZED (1)\r
-\r
-typedef struct _RTL_USER_PROCESS_PARAMETERS {\r
- ULONG AllocationSize;\r
- ULONG Size;\r
- ULONG Flags;\r
- ULONG DebugFlags;\r
- HANDLE hConsole;\r
- ULONG ProcessGroup;\r
- HANDLE hStdInput;\r
- HANDLE hStdOutput;\r
- HANDLE hStdError;\r
- UNICODE_STRING CurrentDirectoryName;\r
- HANDLE CurrentDirectoryHandle;\r
- UNICODE_STRING DllPath;\r
- UNICODE_STRING ImagePathName;\r
- UNICODE_STRING CommandLine;\r
- PWSTR Environment;\r
- ULONG dwX;\r
- ULONG dwY;\r
- ULONG dwXSize;\r
- ULONG dwYSize;\r
- ULONG dwXCountChars;\r
- ULONG dwYCountChars;\r
- ULONG dwFillAttribute;\r
- ULONG dwFlags;\r
- ULONG wShowWindow;\r
- UNICODE_STRING WindowTitle;\r
- UNICODE_STRING DesktopInfo;\r
- UNICODE_STRING ShellInfo;\r
- UNICODE_STRING RuntimeInfo;\r
-} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;\r
-\r
-#define PEB_BASE (0x7FFDF000)\r
-\r
-typedef struct _PEB_LDR_DATA\r
-{\r
- ULONG Length;\r
- BOOLEAN Initialized;\r
- PVOID SsHandle;\r
- LIST_ENTRY InLoadOrderModuleList;\r
- LIST_ENTRY InMemoryOrderModuleList;\r
- LIST_ENTRY InInitializationOrderModuleList;\r
-} PEB_LDR_DATA, *PPEB_LDR_DATA;\r
-\r
-typedef VOID STDCALL (*PPEBLOCKROUTINE)(PVOID);\r
-\r
-typedef struct _PEB\r
-{\r
- UCHAR InheritedAddressSpace; // 00h\r
- UCHAR ReadImageFileExecOptions; // 01h\r
- UCHAR BeingDebugged; // 02h\r
- UCHAR Spare; // 03h\r
- PVOID Mutant; // 04h\r
- PVOID ImageBaseAddress; // 08h\r
- PPEB_LDR_DATA Ldr; // 0Ch\r
- PRTL_USER_PROCESS_PARAMETERS ProcessParameters; // 10h\r
- PVOID SubSystemData; // 14h\r
- PVOID ProcessHeap; // 18h\r
- PVOID FastPebLock; // 1Ch\r
- PPEBLOCKROUTINE FastPebLockRoutine; // 20h\r
- PPEBLOCKROUTINE FastPebUnlockRoutine; // 24h\r
- ULONG EnvironmentUpdateCount; // 28h\r
- PVOID* KernelCallbackTable; // 2Ch\r
- PVOID EventLogSection; // 30h\r
- PVOID EventLog; // 34h\r
- PPEB_FREE_BLOCK FreeList; // 38h\r
- ULONG TlsExpansionCounter; // 3Ch\r
- PVOID TlsBitmap; // 40h\r
- ULONG TlsBitmapBits[0x2]; // 44h\r
- PVOID ReadOnlySharedMemoryBase; // 4Ch\r
- PVOID ReadOnlySharedMemoryHeap; // 50h\r
- PVOID* ReadOnlyStaticServerData; // 54h\r
- PVOID AnsiCodePageData; // 58h\r
- PVOID OemCodePageData; // 5Ch\r
- PVOID UnicodeCaseTableData; // 60h\r
- ULONG NumberOfProcessors; // 64h\r
- ULONG NtGlobalFlag; // 68h\r
- UCHAR Spare2[0x4]; // 6Ch\r
- LARGE_INTEGER CriticalSectionTimeout; // 70h\r
- ULONG HeapSegmentReserve; // 78h\r
- ULONG HeapSegmentCommit; // 7Ch\r
- ULONG HeapDeCommitTotalFreeThreshold; // 80h\r
- ULONG HeapDeCommitFreeBlockThreshold; // 84h\r
- ULONG NumberOfHeaps; // 88h\r
- ULONG MaximumNumberOfHeaps; // 8Ch\r
- PVOID** ProcessHeaps; // 90h\r
- PVOID GdiSharedHandleTable; // 94h\r
- PVOID ProcessStarterHelper; // 98h\r
- PVOID GdiDCAttributeList; // 9Ch\r
- PVOID LoaderLock; // A0h\r
- ULONG OSMajorVersion; // A4h\r
- ULONG OSMinorVersion; // A8h\r
- ULONG OSBuildNumber; // ACh\r
- ULONG OSPlatformId; // B0h\r
- ULONG ImageSubSystem; // B4h\r
- ULONG ImageSubSystemMajorVersion; // B8h\r
- ULONG ImageSubSystemMinorVersion; // C0h\r
- ULONG GdiHandleBuffer[0x22]; // C4h\r
-} PEB, *PPEB;\r
-\r
-\r
-typedef struct _NT_TIB {\r
- struct _EXCEPTION_REGISTRATION_RECORD* ExceptionList; // 00h\r
- PVOID StackBase; // 04h\r
- PVOID StackLimit; // 08h\r
- PVOID SubSystemTib; // 0Ch\r
- union {\r
- PVOID FiberData; // 10h\r
- ULONG Version; // 10h\r
- } Fib;\r
- PVOID ArbitraryUserPointer; // 14h\r
- struct _NT_TIB *Self; // 18h\r
-} NT_TIB, *PNT_TIB;\r
-\r
-typedef struct _GDI_TEB_BATCH\r
-{\r
- ULONG Offset;\r
- ULONG HDC;\r
- ULONG Buffer[0x136];\r
-} GDI_TEB_BATCH, *PGDI_TEB_BATCH;\r
-\r
-typedef struct _TEB\r
-{\r
- NT_TIB Tib; // 00h\r
- PVOID EnvironmentPointer; // 1Ch\r
- CLIENT_ID Cid; // 20h\r
- PVOID ActiveRpcInfo; // 28h\r
- PVOID ThreadLocalStoragePointer; // 2Ch\r
- PPEB Peb; // 30h\r
- ULONG LastErrorValue; // 34h\r
- ULONG CountOfOwnedCriticalSections; // 38h\r
- PVOID CsrClientThread; // 3Ch\r
- struct _W32THREAD* Win32ThreadInfo; // 40h\r
- ULONG Win32ClientInfo[0x1F]; // 44h\r
- PVOID WOW32Reserved; // C0h\r
- ULONG CurrentLocale; // C4h\r
- ULONG FpSoftwareStatusRegister; // C8h\r
- PVOID SystemReserved1[0x36]; // CCh\r
- PVOID Spare1; // 1A4h\r
- LONG ExceptionCode; // 1A8h\r
- ULONG SpareBytes1[0x28]; // 1ACh\r
- PVOID SystemReserved2[0xA]; // 1D4h\r
-// GDI_TEB_BATCH GdiTebBatch; // 1FCh\r
- ULONG gdiRgn; // 6DCh\r
- ULONG gdiPen; // 6E0h\r
- ULONG gdiBrush; // 6E4h\r
- CLIENT_ID RealClientId; // 6E8h\r
- PVOID GdiCachedProcessHandle; // 6F0h\r
- ULONG GdiClientPID; // 6F4h\r
- ULONG GdiClientTID; // 6F8h\r
- PVOID GdiThreadLocaleInfo; // 6FCh\r
- PVOID UserReserved[5]; // 700h\r
- PVOID glDispatchTable[0x118]; // 714h\r
- ULONG glReserved1[0x1A]; // B74h\r
- PVOID glReserved2; // BDCh\r
- PVOID glSectionInfo; // BE0h\r
- PVOID glSection; // BE4h\r
- PVOID glTable; // BE8h\r
- PVOID glCurrentRC; // BECh\r
- PVOID glContext; // BF0h\r
- NTSTATUS LastStatusValue; // BF4h\r
- UNICODE_STRING StaticUnicodeString; // BF8h\r
- WCHAR StaticUnicodeBuffer[0x105]; // C00h\r
- PVOID DeallocationStack; // E0Ch\r
- PVOID TlsSlots[0x40]; // E10h\r
- LIST_ENTRY TlsLinks; // F10h\r
- PVOID Vdm; // F18h\r
- PVOID ReservedForNtRpc; // F1Ch\r
- PVOID DbgSsReserved[0x2]; // F20h\r
- ULONG HardErrorDisabled; // F28h\r
- PVOID Instrumentation[0x10]; // F2Ch\r
- PVOID WinSockData; // F6Ch\r
- ULONG GdiBatchCount; // F70h\r
- ULONG Spare2; // F74h\r
- ULONG Spare3; // F78h\r
- ULONG Spare4; // F7Ch\r
- PVOID ReservedForOle; // F80h\r
- ULONG WaitingOnLoaderLock; // F84h\r
- PVOID WineDebugInfo; // Needed for WINE DLL's\r
-} TEB, *PTEB;\r
-\r
-\r
-#define NtCurrentPeb() (NtCurrentTeb()->Peb)\r
-\r
-static inline PTEB NtCurrentTeb(VOID)\r
-{\r
- int x;\r
- \r
- __asm__ __volatile__("movl %%fs:0x18, %0\n\t"\r
- : "=r" (x) /* can't have two memory operands */\r
- : /* no inputs */\r
- );\r
- \r
- return((PTEB)x);\r
-}\r
-\r
-\r
-\r
-#endif /* __INCLUDE_INTERNAL_TEB */\r
+/* TEB/PEB parameters */
+#ifndef __INCLUDE_INTERNAL_TEB
+#define __INCLUDE_INTERNAL_TEB
+
+#include <napi/types.h>
+
+#ifdef __USE_W32API
+#include <ddk/ntapi.h>
+#endif /* !__USE_W32API */
+
+#ifndef __USE_W32API
+
+typedef struct _CLIENT_ID
+{
+ HANDLE UniqueProcess;
+ HANDLE UniqueThread;
+} CLIENT_ID, *PCLIENT_ID;
+
+typedef struct _RTL_USER_PROCESS_PARAMETERS {
+ ULONG AllocationSize;
+ ULONG Size;
+ ULONG Flags;
+ ULONG DebugFlags;
+ HANDLE hConsole;
+ ULONG ProcessGroup;
+ HANDLE hStdInput;
+ HANDLE hStdOutput;
+ HANDLE hStdError;
+ UNICODE_STRING CurrentDirectoryName;
+ HANDLE CurrentDirectoryHandle;
+ UNICODE_STRING DllPath;
+ UNICODE_STRING ImagePathName;
+ UNICODE_STRING CommandLine;
+ PWSTR Environment;
+ ULONG dwX;
+ ULONG dwY;
+ ULONG dwXSize;
+ ULONG dwYSize;
+ ULONG dwXCountChars;
+ ULONG dwYCountChars;
+ ULONG dwFillAttribute;
+ ULONG dwFlags;
+ ULONG wShowWindow;
+ UNICODE_STRING WindowTitle;
+ UNICODE_STRING DesktopInfo;
+ UNICODE_STRING ShellInfo;
+ UNICODE_STRING RuntimeInfo;
+} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
+
+typedef struct _NT_TIB {
+ struct _EXCEPTION_REGISTRATION_RECORD* ExceptionList; // 00h
+ PVOID StackBase; // 04h
+ PVOID StackLimit; // 08h
+ PVOID SubSystemTib; // 0Ch
+ union {
+ PVOID FiberData; // 10h
+ ULONG Version; // 10h
+ } Fib;
+ PVOID ArbitraryUserPointer; // 14h
+ struct _NT_TIB *Self; // 18h
+} NT_TIB, *PNT_TIB;
+
+#endif /* !__USE_W32API */
+
+typedef struct _CURDIR
+{
+ UNICODE_STRING DosPath;
+ PVOID Handle;
+} CURDIR, *PCURDIR;
+
+typedef struct RTL_DRIVE_LETTER_CURDIR
+{
+ USHORT Flags;
+ USHORT Length;
+ ULONG TimeStamp;
+ UNICODE_STRING DosPath;
+} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
+
+typedef struct _PEB_FREE_BLOCK
+{
+ struct _PEB_FREE_BLOCK* Next;
+ ULONG Size;
+} PEB_FREE_BLOCK, *PPEB_FREE_BLOCK;
+
+/* RTL_USER_PROCESS_PARAMETERS.Flags */
+#define PPF_NORMALIZED (1)
+
+#define PEB_BASE (0x7FFDF000)
+
+typedef struct _PEB_LDR_DATA
+{
+ ULONG Length;
+ BOOLEAN Initialized;
+ PVOID SsHandle;
+ LIST_ENTRY InLoadOrderModuleList;
+ LIST_ENTRY InMemoryOrderModuleList;
+ LIST_ENTRY InInitializationOrderModuleList;
+} PEB_LDR_DATA, *PPEB_LDR_DATA;
+
+typedef VOID STDCALL_FUNC (*PPEBLOCKROUTINE)(PVOID);
+
+typedef struct _PEB
+{
+ UCHAR InheritedAddressSpace; // 00h
+ UCHAR ReadImageFileExecOptions; // 01h
+ UCHAR BeingDebugged; // 02h
+ UCHAR Spare; // 03h
+ PVOID Mutant; // 04h
+ PVOID ImageBaseAddress; // 08h
+ PPEB_LDR_DATA Ldr; // 0Ch
+ PRTL_USER_PROCESS_PARAMETERS ProcessParameters; // 10h
+ PVOID SubSystemData; // 14h
+ PVOID ProcessHeap; // 18h
+ PVOID FastPebLock; // 1Ch
+ PPEBLOCKROUTINE FastPebLockRoutine; // 20h
+ PPEBLOCKROUTINE FastPebUnlockRoutine; // 24h
+ ULONG EnvironmentUpdateCount; // 28h
+ PVOID* KernelCallbackTable; // 2Ch
+ PVOID EventLogSection; // 30h
+ PVOID EventLog; // 34h
+ PPEB_FREE_BLOCK FreeList; // 38h
+ ULONG TlsExpansionCounter; // 3Ch
+ PVOID TlsBitmap; // 40h
+ ULONG TlsBitmapBits[0x2]; // 44h
+ PVOID ReadOnlySharedMemoryBase; // 4Ch
+ PVOID ReadOnlySharedMemoryHeap; // 50h
+ PVOID* ReadOnlyStaticServerData; // 54h
+ PVOID AnsiCodePageData; // 58h
+ PVOID OemCodePageData; // 5Ch
+ PVOID UnicodeCaseTableData; // 60h
+ ULONG NumberOfProcessors; // 64h
+ ULONG NtGlobalFlag; // 68h
+ UCHAR Spare2[0x4]; // 6Ch
+ LARGE_INTEGER CriticalSectionTimeout; // 70h
+ ULONG HeapSegmentReserve; // 78h
+ ULONG HeapSegmentCommit; // 7Ch
+ ULONG HeapDeCommitTotalFreeThreshold; // 80h
+ ULONG HeapDeCommitFreeBlockThreshold; // 84h
+ ULONG NumberOfHeaps; // 88h
+ ULONG MaximumNumberOfHeaps; // 8Ch
+ PVOID** ProcessHeaps; // 90h
+ PVOID GdiSharedHandleTable; // 94h
+ PVOID ProcessStarterHelper; // 98h
+ PVOID GdiDCAttributeList; // 9Ch
+ PVOID LoaderLock; // A0h
+ ULONG OSMajorVersion; // A4h
+ ULONG OSMinorVersion; // A8h
+ USHORT OSBuildNumber; // ACh
+ UCHAR SPMajorVersion; // AEh
+ UCHAR SPMinorVersion; // AFh
+ ULONG OSPlatformId; // B0h
+ ULONG ImageSubSystem; // B4h
+ ULONG ImageSubSystemMajorVersion; // B8h
+ ULONG ImageSubSystemMinorVersion; // C0h
+ ULONG GdiHandleBuffer[0x22]; // C4h
+} PEB;
+
+#ifndef __USE_W32API
+
+typedef PEB *PPEB;
+
+#endif /* !__USE_W32API */
+
+typedef struct _GDI_TEB_BATCH
+{
+ ULONG Offset;
+ ULONG HDC;
+ ULONG Buffer[0x136];
+} GDI_TEB_BATCH, *PGDI_TEB_BATCH;
+
+typedef struct _TEB
+{
+ NT_TIB Tib; // 00h
+ PVOID EnvironmentPointer; // 1Ch
+ CLIENT_ID Cid; // 20h
+ PVOID ActiveRpcInfo; // 28h
+ PVOID ThreadLocalStoragePointer; // 2Ch
+ PPEB Peb; // 30h
+ ULONG LastErrorValue; // 34h
+ ULONG CountOfOwnedCriticalSections; // 38h
+ PVOID CsrClientThread; // 3Ch
+ struct _W32THREAD* Win32ThreadInfo; // 40h
+ ULONG Win32ClientInfo[0x1F]; // 44h
+ PVOID WOW32Reserved; // C0h
+ ULONG CurrentLocale; // C4h
+ ULONG FpSoftwareStatusRegister; // C8h
+ PVOID SystemReserved1[0x36]; // CCh
+ PVOID Spare1; // 1A4h
+ LONG ExceptionCode; // 1A8h
+ ULONG SpareBytes1[0x28]; // 1ACh
+ PVOID SystemReserved2[0xA]; // 1D4h
+// GDI_TEB_BATCH GdiTebBatch; // 1FCh
+ ULONG gdiRgn; // 6DCh
+ ULONG gdiPen; // 6E0h
+ ULONG gdiBrush; // 6E4h
+ CLIENT_ID RealClientId; // 6E8h
+ PVOID GdiCachedProcessHandle; // 6F0h
+ ULONG GdiClientPID; // 6F4h
+ ULONG GdiClientTID; // 6F8h
+ PVOID GdiThreadLocaleInfo; // 6FCh
+ PVOID UserReserved[5]; // 700h
+ PVOID glDispatchTable[0x118]; // 714h
+ ULONG glReserved1[0x1A]; // B74h
+ PVOID glReserved2; // BDCh
+ PVOID glSectionInfo; // BE0h
+ PVOID glSection; // BE4h
+ PVOID glTable; // BE8h
+ PVOID glCurrentRC; // BECh
+ PVOID glContext; // BF0h
+ NTSTATUS LastStatusValue; // BF4h
+ UNICODE_STRING StaticUnicodeString; // BF8h
+ WCHAR StaticUnicodeBuffer[0x105]; // C00h
+ PVOID DeallocationStack; // E0Ch
+ PVOID TlsSlots[0x40]; // E10h
+ LIST_ENTRY TlsLinks; // F10h
+ PVOID Vdm; // F18h
+ PVOID ReservedForNtRpc; // F1Ch
+ PVOID DbgSsReserved[0x2]; // F20h
+ ULONG HardErrorDisabled; // F28h
+ PVOID Instrumentation[0x10]; // F2Ch
+ PVOID WinSockData; // F6Ch
+ ULONG GdiBatchCount; // F70h
+ ULONG Spare2; // F74h
+ ULONG Spare3; // F78h
+ ULONG Spare4; // F7Ch
+ PVOID ReservedForOle; // F80h
+ ULONG WaitingOnLoaderLock; // F84h
+ PVOID WineDebugInfo; // Needed for WINE DLL's
+} TEB, *PTEB;
+
+
+#define NtCurrentPeb() (NtCurrentTeb()->Peb)
+
+#ifdef G_GNUC_UNUSED
+static inline PTEB NtCurrentTeb(VOID) G_GNUC_UNUSED;
+#endif /* G_GNUC_UNUSED */
+static inline PTEB NtCurrentTeb(VOID)
+{
+ int x;
+
+ __asm__ __volatile__("movl %%fs:0x18, %0\n\t"
+ : "=r" (x) /* can't have two memory operands */
+ : /* no inputs */
+ );
+
+ return((PTEB)x);
+}
+
+#endif /* __INCLUDE_INTERNAL_TEB */