mirror of
https://github.com/daeken/Zookeeper.git
synced 2025-04-02 10:52:54 -04:00
236 lines
7.4 KiB
C++
236 lines
7.4 KiB
C++
// These types owe a ton to CXBX and Wine!
|
|
|
|
#pragma once
|
|
|
|
#define OUT
|
|
#define IN
|
|
#define OPTIONAL
|
|
|
|
typedef int32_t NTSTATUS;
|
|
typedef uint32_t HANDLE;
|
|
typedef HANDLE *PHANDLE;
|
|
|
|
typedef int8_t CHAR;
|
|
typedef int8_t *PCHAR;
|
|
typedef uint8_t BYTE;
|
|
typedef uint8_t UCHAR;
|
|
typedef uint8_t *PUCHAR;
|
|
typedef int16_t SHORT;
|
|
typedef uint16_t USHORT;
|
|
typedef int32_t LONG;
|
|
typedef uint32_t ULONG;
|
|
typedef uint32_t DWORD;
|
|
typedef uint32_t SIZE_T;
|
|
typedef uint32_t *PSIZE_T;
|
|
typedef ULONG *PULONG;
|
|
typedef int64_t LONGLONG;
|
|
typedef uint64_t ULONGLONG;
|
|
typedef bool BOOLEAN;
|
|
typedef void VOID;
|
|
typedef VOID *PVOID;
|
|
|
|
typedef uint8_t KIRQL;
|
|
|
|
typedef VOID (NTAPI KSTART_ROUTINE)(IN PVOID StartContext);
|
|
typedef KSTART_ROUTINE *PKSTART_ROUTINE;
|
|
|
|
#define NT_SUCCESS(Status) ((NTSTATUS) (Status) >= 0)
|
|
#define STATUS_SUCCESS ((DWORD )0x00000000L)
|
|
#define STATUS_PENDING ((DWORD )0x00000103L)
|
|
#define STATUS_TIMER_RESUME_IGNORED ((DWORD )0x40000025L)
|
|
#define STATUS_UNSUCCESSFUL ((DWORD )0xC0000001)
|
|
#define STATUS_UNRECOGNIZED_MEDIA ((DWORD )0xC0000014)
|
|
#define STATUS_NO_MEMORY ((DWORD )0xC0000017L)
|
|
#define STATUS_ALERTED ((DWORD )0x00000101)
|
|
#define STATUS_USER_APC ((DWORD )0x000000C0L)
|
|
// The SCSI input buffer was too large (not necessarily an error!)
|
|
#define STATUS_DATA_OVERRUN ((DWORD )0xC000003CL)
|
|
#define STATUS_INVALID_IMAGE_FORMAT ((DWORD )0xC000007BL)
|
|
#define STATUS_INSUFFICIENT_RESOURCES ((DWORD )0xC000009AL)
|
|
#define STATUS_TOO_MANY_SECRETS ((DWORD )0xC0000156L)
|
|
#define STATUS_XBE_REGION_MISMATCH ((DWORD )0xC0050001L)
|
|
#define STATUS_XBE_MEDIA_MISMATCH ((DWORD )0xC0050002L)
|
|
#define STATUS_OBJECT_NAME_NOT_FOUND ((DWORD )0xC0000034L)
|
|
#define STATUS_OBJECT_NAME_COLLISION ((DWORD )0xC0000035L)
|
|
|
|
typedef struct _NT_TIB {
|
|
PVOID ExceptionList; // 0x00
|
|
PVOID StackBase; // 0x04
|
|
PVOID StackLimit; // 0x08
|
|
PVOID SubSystemTib; // 0x0C
|
|
union {
|
|
PVOID FiberData; // 0x10 for TIB
|
|
ULONG Version; // 0x10 for TEB (?)
|
|
} u_a;
|
|
PVOID ArbitraryUserPointer; // 0x14
|
|
struct _NT_TIB *Self; // 0x18
|
|
} NT_TIB, *PNT_TIB;
|
|
|
|
typedef struct _KTHREAD {
|
|
UCHAR UnknownA[0x28];
|
|
PVOID TlsData; // 0x28
|
|
UCHAR UnknownB[0xE4]; // 0x2C
|
|
} KTHREAD, *PKTHREAD;
|
|
|
|
typedef struct _ETHREAD {
|
|
struct _KTHREAD Tcb;
|
|
UCHAR UnknownA[0x1C]; // 0x110
|
|
DWORD UniqueThread; // 0x12C
|
|
} ETHREAD, *PETHREAD;
|
|
|
|
typedef struct _KPRCB {
|
|
struct _KTHREAD* CurrentThread; // 0x00, KPCR : 0x28
|
|
struct _KTHREAD* NextThread; // 0x04, KPCR : 0x2C
|
|
struct _KTHREAD* IdleThread; // 0x08, KPCR : 0x30
|
|
|
|
// This is the total size of the structure (presumably)
|
|
UCHAR Unknown[0x250]; // 0x0C, KPCR : 0x34
|
|
} KPRCB, *PKPRCB;
|
|
|
|
typedef struct _KPCR {
|
|
struct _NT_TIB NtTib; // 0x00
|
|
struct _KPCR *SelfPcr; // 0x1C
|
|
struct _KPRCB *Prcb; // 0x20
|
|
UCHAR Irql; // 0x24
|
|
struct _KPRCB PrcbData; // 0x28
|
|
} KPCR, *PKPCR;
|
|
|
|
typedef struct _RTL_CRITICAL_SECTION {
|
|
DWORD Unknown[4]; // 0x00
|
|
LONG LockCount; // 0x10
|
|
LONG RecursionCount; // 0x14
|
|
ULONG OwningThread; // 0x18
|
|
} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
|
|
|
|
typedef struct _XBOX_HARDWARE_INFO {
|
|
ULONG Flags;
|
|
UCHAR Unknown1;
|
|
UCHAR Unknown2;
|
|
UCHAR Unknown3;
|
|
UCHAR Unknown4;
|
|
} XBOX_HARDWARE_INFO;
|
|
|
|
typedef struct _LIST_ENTRY {
|
|
struct _LIST_ENTRY *Flink;
|
|
struct _LIST_ENTRY *Blink;
|
|
} LIST_ENTRY, *PLIST_ENTRY;
|
|
|
|
typedef struct HAL_SHUTDOWN_REGISTRATION { // 0x10
|
|
PVOID NotificationRoutine; // +0x0(0x4)
|
|
DWORD Priority; // +0x4(0x4)
|
|
LIST_ENTRY ListEntry; // +0x8(0x8)
|
|
} *PHAL_SHUTDOWN_REGISTRATION;
|
|
|
|
typedef VOID (*PKDEFERRED_ROUTINE)(
|
|
IN struct _KDPC *Dpc,
|
|
IN PVOID DeferredContext,
|
|
IN PVOID SystemArgument1,
|
|
IN PVOID SystemArgument2
|
|
);
|
|
|
|
typedef struct _KDPC {
|
|
SHORT Type; // 0x00
|
|
UCHAR Number; // 0x02
|
|
UCHAR Importance; // 0x03
|
|
LIST_ENTRY DpcListEntry; // 0x04
|
|
PKDEFERRED_ROUTINE DeferredRoutine; // 0x0C
|
|
PVOID DeferredContext;
|
|
PVOID SystemArgument1;
|
|
PVOID SystemArgument2;
|
|
} KDPC, *PKDPC;
|
|
|
|
typedef enum _KOBJECTS {
|
|
DpcObject = 0x13,
|
|
} KOBJECTS, *PKOBJECTS;
|
|
|
|
typedef union _ULARGE_INTEGER {
|
|
struct {
|
|
DWORD LowPart;
|
|
DWORD HighPart;
|
|
} u;
|
|
|
|
ULONGLONG QuadPart;
|
|
} ULARGE_INTEGER, *PULARGE_INTEGER;
|
|
|
|
typedef union _LARGE_INTEGER {
|
|
struct {
|
|
DWORD LowPart;
|
|
LONG HighPart;
|
|
} u;
|
|
|
|
LONGLONG QuadPart;
|
|
} LARGE_INTEGER, *PLARGE_INTEGER;
|
|
|
|
typedef struct _DISPATCHER_HEADER {
|
|
UCHAR Type; // 0x00
|
|
UCHAR Absolute; // 0x01
|
|
UCHAR Size; // 0x02
|
|
UCHAR Inserted; // 0x03
|
|
LONG SignalState; // 0x04
|
|
LIST_ENTRY WaitListHead; // 0x08
|
|
} DISPATCHER_HEADER;
|
|
|
|
typedef struct _KTIMER {
|
|
DISPATCHER_HEADER Header; // 0x00
|
|
ULARGE_INTEGER DueTime; // 0x10
|
|
LIST_ENTRY TimerListEntry; // 0x18
|
|
struct _KDPC *Dpc; // 0x20
|
|
LONG Period; // 0x24
|
|
} KTIMER, *PKTIMER;
|
|
|
|
typedef enum _TIMER_TYPE {
|
|
NotificationTimer = 0,
|
|
SynchronizationTimer = 1
|
|
} TIMER_TYPE;
|
|
|
|
#define MEM_COMMIT 0x1000
|
|
#define MEM_RESERVE 0x2000
|
|
#define MEM_DECOMMIT 0x4000
|
|
#define MEM_RELEASE 0x8000
|
|
#define MEM_FREE 0x10000
|
|
#define MEM_PRIVATE 0x20000
|
|
#define MEM_MAPPED 0x40000
|
|
#define MEM_RESET 0x80000
|
|
#define MEM_TOP_DOWN 0x100000
|
|
|
|
typedef uint32_t ACCESS_MASK;
|
|
|
|
typedef struct _STRING {
|
|
USHORT Length;
|
|
USHORT MaximumLength;
|
|
PCHAR Buffer;
|
|
} STRING, ANSI_STRING, *PSTRING, *PANSI_STRING;
|
|
|
|
typedef struct _OBJECT_ATTRIBUTES {
|
|
HANDLE RootDirectory;
|
|
PSTRING ObjectName;
|
|
ULONG Attributes;
|
|
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
|
|
|
|
typedef struct _IO_STATUS_BLOCK {
|
|
union {
|
|
NTSTATUS Status;
|
|
PVOID Pointer;
|
|
} u1;
|
|
|
|
ULONG *Information;
|
|
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
|
|
|
|
typedef enum _FSINFOCLASS {
|
|
FileFsVolumeInformation = 1,
|
|
FileFsLabelInformation, // 2
|
|
FileFsSizeInformation, // 3
|
|
FileFsDeviceInformation, // 4
|
|
FileFsAttributeInformation, // 5
|
|
FileFsControlInformation, // 6
|
|
FileFsFullSizeInformation, // 7
|
|
FileFsObjectIdInformation, // 8
|
|
FileFsMaximumInformation
|
|
} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
|
|
|
|
typedef struct _FILE_FS_SIZE_INFORMATION {
|
|
LARGE_INTEGER TotalAllocationUnits; // 0
|
|
LARGE_INTEGER AvailableAllocationUnits; // 08h
|
|
ULONG SectorsPerAllocationUnit; // 10h
|
|
ULONG BytesPerSector; // 14h
|
|
} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
|