// 2018-05-02: -now can be compiled alongside windows.h (without changes) or by defining WANT_ALL_WINDOWS_H_DEFINITIONS so this file can be used standalone
// -this file may also be included alongside tebpeb32.h which can be found at http://bytepointer.com/resources/tebpeb32.h
// -64-bit types no longer clash with the 32-bit ones; e.g. UNICODE_STRING64, RTL_USER_PROCESS_PARAMETERS64, PEB64 (same result whether 32 or 64-bit compiler is used)
// -added more QWORD aliases (i.e. HANDLE64 and PTR64) so underlying types are clearer, however most PEB members remain generic QWORD placeholders for now
// -fixed missing semicolon bug in UNICODE_STRING64
// -added prliminary RTL_USER_PROCESS_PARAMETERS64 and TEB64 with offsets
//UNCOMMENT line below if you are not including windows.h
//#define WANT_ALL_WINDOWS_H_DEFINITIONS
#ifdef WANT_ALL_WINDOWS_H_DEFINITIONS
//base types
typedefunsignedcharBYTE;
typedefcharCHAR;
typedefunsignedshortWORD;
typedefshortINT16;
typedefunsignedlongDWORD;
typedeflongINT32;
typedefunsigned__int64QWORD;
typedef__int64INT64;
typedefvoid*HANDLE;
typedefunsignedshortWCHAR;
//base structures
unionLARGE_INTEGER
{
struct
{
DWORDLowPart;
INT32HighPart;
}u;
INT64QuadPart;
};
unionULARGE_INTEGER
{
struct
{
DWORDLowPart;
DWORDHighPart;
}u;
QWORDQuadPart;
};
#endif //#ifdef WANT_ALL_WINDOWS_H_DEFINITIONS
structUNICODE_STRING64
{
union
{
struct
{
WORDLength;
WORDMaximumLength;
}u;
QWORDdummyalign;
};
QWORDBuffer;
};
typedefstruct_CLIENT_ID64
{
QWORDProcessId;
QWORDThreadId;
}CLIENT_ID64;
typedefstruct_LDR_DATA_TABLE_ENTRY
{
LIST_ENTRYInLoadOrderLinks;
LIST_ENTRYInMemoryOrderLinks;
union
{
LIST_ENTRYInInitializationOrderLinks;
LIST_ENTRYInProgressLinks;
};
PVOIDDllBase;
PVOIDEntryPoint;
ULONGSizeOfImage;
UNICODE_STRING64FullDllName;
UNICODE_STRING64BaseDllName;
}LDR_DATA_TABLE_ENTRY,*PLDR_DATA_TABLE_ENTRY;// [ PIXIE ]: Narrowed down version, don't need full.
//NOTE: the members of this structure are not yet complete
typedefstruct_RTL_USER_PROCESS_PARAMETERS64
{
BYTEReserved1[16];//0x00
QWORDReserved2[5];//0x10
UNICODE_STRING64CurrentDirectoryPath;//0x38
QWORDCurrentDirectoryHandle;//0x48
UNICODE_STRING64DllPath;//0x50
UNICODE_STRING64ImagePathName;//0x60
UNICODE_STRING64CommandLine;//0x70
PTR64Environment;//0x80
}RTL_USER_PROCESS_PARAMETERS64;
//
// PEB64 structure - TODO: comb more through http://terminus.rewolf.pl/terminus/structures/ntdll/_PEB_x64.html and add OS delineations and Windows 10 updates
//
// The structure represented here is a work-in-progress as only members thru offset 0x320 are listed; the actual sizes per OS are:
// 0x0358 XP/WS03
// 0x0368 Vista
// 0x037C Windows 7
// 0x0388 Windows 8
// 0x07A0 Windows 10
//
structPEB64
{
union
{
struct
{
BYTEInheritedAddressSpace;//0x000
BYTEReadImageFileExecOptions;//0x001
BYTEBeingDebugged;//0x002
BYTE_SYSTEM_DEPENDENT_01;//0x003
}flags;
QWORDdummyalign;
}dword0;
QWORDMutant;//0x0008
QWORDImageBaseAddress;//0x0010
PPEB_LDR_DATALdr;//0x0018
PTR64ProcessParameters;//0x0020 / pointer to RTL_USER_PROCESS_PARAMETERS64
QWORDSubSystemData;//0x0028
QWORDProcessHeap;//0x0030
QWORDFastPebLock;//0x0038
QWORD_SYSTEM_DEPENDENT_02;//0x0040
QWORD_SYSTEM_DEPENDENT_03;//0x0048
QWORD_SYSTEM_DEPENDENT_04;//0x0050
union
{
QWORDKernelCallbackTable;//0x0058
QWORDUserSharedInfoPtr;//0x0058
};
DWORDSystemReserved;//0x0060
DWORD_SYSTEM_DEPENDENT_05;//0x0064
QWORD_SYSTEM_DEPENDENT_06;//0x0068
QWORDTlsExpansionCounter;//0x0070
QWORDTlsBitmap;//0x0078
DWORDTlsBitmapBits[2];//0x0080
QWORDReadOnlySharedMemoryBase;//0x0088
QWORD_SYSTEM_DEPENDENT_07;//0x0090
QWORDReadOnlyStaticServerData;//0x0098
QWORDAnsiCodePageData;//0x00A0
QWORDOemCodePageData;//0x00A8
QWORDUnicodeCaseTableData;//0x00B0
DWORDNumberOfProcessors;//0x00B8
union
{
DWORDNtGlobalFlag;//0x00BC
DWORDdummy02;//0x00BC
};
LARGE_INTEGERCriticalSectionTimeout;//0x00C0
QWORDHeapSegmentReserve;//0x00C8
QWORDHeapSegmentCommit;//0x00D0
QWORDHeapDeCommitTotalFreeThreshold;//0x00D8
QWORDHeapDeCommitFreeBlockThreshold;//0x00E0
DWORDNumberOfHeaps;//0x00E8
DWORDMaximumNumberOfHeaps;//0x00EC
QWORDProcessHeaps;//0x00F0
QWORDGdiSharedHandleTable;//0x00F8
QWORDProcessStarterHelper;//0x0100
QWORDGdiDCAttributeList;//0x0108
QWORDLoaderLock;//0x0110
DWORDOSMajorVersion;//0x0118
DWORDOSMinorVersion;//0x011C
WORDOSBuildNumber;//0x0120
WORDOSCSDVersion;//0x0122
DWORDOSPlatformId;//0x0124
DWORDImageSubsystem;//0x0128
DWORDImageSubsystemMajorVersion;//0x012C
QWORDImageSubsystemMinorVersion;//0x0130
union
{
QWORDImageProcessAffinityMask;//0x0138
QWORDActiveProcessAffinityMask;//0x0138
};
QWORDGdiHandleBuffer[30];//0x0140
QWORDPostProcessInitRoutine;//0x0230
QWORDTlsExpansionBitmap;//0x0238
DWORDTlsExpansionBitmapBits[32];//0x0240
QWORDSessionId;//0x02C0
ULARGE_INTEGERAppCompatFlags;//0x02C8
ULARGE_INTEGERAppCompatFlagsUser;//0x02D0
QWORDpShimData;//0x02D8
QWORDAppCompatInfo;//0x02E0
UNICODE_STRING64CSDVersion;//0x02E8
QWORDActivationContextData;//0x02F8
QWORDProcessAssemblyStorageMap;//0x0300
QWORDSystemDefaultActivationContextData;//0x0308
QWORDSystemAssemblyStorageMap;//0x0310
QWORDMinimumStackCommit;//0x0318
};//struct PEB64
//
// TEB64 structure - preliminary structure; the portion listed current at least as of Windows 8