Zookeeper/NightBeliever/XboxKernel/nttypes.hpp

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;