Cxbx-Reloaded/import/OpenXDK/include/xboxkrnl/xboxkrnl.h

1111 lines
35 KiB
C

// ******************************************************************
// *
// * proj : OpenXDK
// *
// * desc : Open Source XBox Development Kit
// *
// * file : xboxkrnl.h
// *
// * note : XBox Kernel Declarations
// *
// ******************************************************************
#ifndef XBOXKRNL_H
#define XBOXKRNL_H
#if defined(__cplusplus)
extern "C"
{
#endif
// ******************************************************************
// * dll import/export
// ******************************************************************
#define DECLSPEC_IMPORT __declspec(dllimport)
#define DECLSPEC_EXPORT __declspec(dllexport)
// ******************************************************************
// * kernel exports, others either import or link locally
// ******************************************************************
#define XBSYSAPI DECLSPEC_IMPORT
#ifdef _XBOXKRNL_INTERNAL_
#undef XBSYSAPI
#define XBSYSAPI DECLSPEC_EXPORT
#endif
#ifdef _XBOXKRNL_DEFEXTRN_
#undef XBSYSAPI
#define XBSYSAPI extern
#endif
// ******************************************************************
// * Null
// ******************************************************************
#ifndef NULL
#define NULL 0
#endif
// ******************************************************************
// * TRUE / FALSE
// ******************************************************************
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
// ******************************************************************
// * CONST
// ******************************************************************
#define CONST const
// ******************************************************************
// * VOID
// ******************************************************************
#ifndef VOID
typedef void VOID;
//#define VOID void
#endif
// ******************************************************************
// * Basic types
// ******************************************************************
typedef char CHAR, CCHAR;
typedef short SHORT, CSHORT;
typedef long LONG;
typedef unsigned char UCHAR;
typedef unsigned char BYTE;
typedef unsigned char BOOLEAN;
typedef unsigned short USHORT;
typedef unsigned short WORD;
typedef unsigned long ULONG;
typedef unsigned long DWORD;
typedef unsigned long SIZE_T, *PSIZE_T;
typedef unsigned long ACCESS_MASK, *PACCESS_MASK;
typedef unsigned long PHYSICAL_ADDRESS;
typedef long INT_PTR;
typedef signed __int64 LONGLONG;
typedef unsigned __int64 ULONGLONG;
typedef unsigned short WCHAR;
// ******************************************************************
// * Pointer types
// ******************************************************************
typedef CHAR *PCHAR;
typedef CHAR *PCSZ;
typedef BYTE *PBYTE;
typedef BOOLEAN *PBOOLEAN;
typedef UCHAR *PUCHAR;
typedef USHORT *PUSHORT;
typedef ULONG *PULONG;
typedef DWORD *PDWORD, *LPDWORD;
typedef ACCESS_MASK *PACCESS_MASK;
typedef LONG *PLONG, *LONG_PTR;
typedef ULONG *ULONG_PTR;
typedef INT_PTR *PINT_PTR;
typedef VOID *PVOID, *LPVOID;
typedef void *HANDLE;
typedef HANDLE *PHANDLE;
// ******************************************************************
// * LPSECURITY_ATTRIBUTES
// ******************************************************************
typedef void* LPSECURITY_ATTRIBUTES;
// ******************************************************************
// * NTSTATUS
// ******************************************************************
typedef long NTSTATUS;
#define NT_SUCCESS(Status) ((NTSTATUS) (Status) >= 0)
#define STATUS_SUCCESS ((DWORD )0x00000000L)
#ifndef STATUS_PENDING
#define STATUS_PENDING ((DWORD )0x00000103L)
#endif
#define STATUS_TIMER_RESUME_IGNORED ((DWORD )0x40000025L)
#define STATUS_UNSUCCESSFUL ((DWORD )0xC0000001)
#define STATUS_UNRECOGNIZED_MEDIA ((DWORD )0xC0000014)
#ifndef STATUS_NO_MEMORY
#define STATUS_NO_MEMORY ((DWORD )0xC0000017L)
#endif
#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)
// ******************************************************************
// * PAGE Masks
// ******************************************************************
#define PAGE_NOACCESS 0x01
#define PAGE_READONLY 0x02
#define PAGE_READWRITE 0x04
#define PAGE_WRITECOPY 0x08
#define PAGE_EXECUTE 0x10
#define PAGE_EXECUTE_READ 0x20
#define PAGE_EXECUTE_READWRITE 0x40
#define PAGE_EXECUTE_WRITECOPY 0x80
#define PAGE_GUARD 0x100
#define PAGE_NOCACHE 0x200
#define PAGE_WRITECOMBINE 0x400
// ******************************************************************
// * calling conventions
// ******************************************************************
#define NTAPI __stdcall
#define CDECL __cdecl
#define INLINE __inline
#define DECLSPEC_NORETURN __declspec(noreturn)
// ******************************************************************
// * documentation purposes only
// ******************************************************************
#define EXPORTNUM(a)
#define UNALIGNED
#define OPTIONAL
#define IN
#define OUT
// ******************************************************************
// * KPROCESSOR_MODE
// ******************************************************************
typedef CCHAR KPROCESSOR_MODE;
// ******************************************************************
// * MODE
// ******************************************************************
typedef enum _MODE
{
KernelMode,
UserMode,
MaximumMode
}
MODE;
// ******************************************************************
// * WAIT_TYPE
// ******************************************************************
typedef enum _WAIT_TYPE
{
WaitAll = 0,
WaitAny = 1
}
WAIT_TYPE;
// ******************************************************************
// * LARGE_INTEGER
// ******************************************************************
typedef union _LARGE_INTEGER
{
struct
{
DWORD LowPart;
LONG HighPart;
}
u;
LONGLONG QuadPart;
}
LARGE_INTEGER, *PLARGE_INTEGER;
// ******************************************************************
// * ULARGE_INTEGER
// ******************************************************************
typedef union _ULARGE_INTEGER
{
struct
{
DWORD LowPart;
DWORD HighPart;
}
u1;
struct
{
DWORD LowPart;
DWORD HighPart;
}
u;
ULONGLONG QuadPart;
}
ULARGE_INTEGER, *PULARGE_INTEGER;
// ******************************************************************
// * STRING
// ******************************************************************
typedef struct _STRING
{
USHORT Length;
USHORT MaximumLength;
PCHAR Buffer;
}
STRING, ANSI_STRING, *PSTRING, *PANSI_STRING;
typedef STRING OBJECT_STRING;
// ******************************************************************
// * UNICODE_STRING
// ******************************************************************
typedef struct _UNICODE_STRING
{
USHORT Length;
USHORT MaximumLength;
USHORT *Buffer;
}
UNICODE_STRING, *PUNICODE_STRING;
// ******************************************************************
// * LIST_ENTRY
// ******************************************************************
typedef struct _LIST_ENTRY
{
struct _LIST_ENTRY *Flink;
struct _LIST_ENTRY *Blink;
}
LIST_ENTRY, *PLIST_ENTRY;
// ******************************************************************
// * FILE_FS_SIZE_INFORMATION
// ******************************************************************
typedef struct _FILE_FS_SIZE_INFORMATION
{
LARGE_INTEGER TotalAllocationUnits;
LARGE_INTEGER AvailableAllocationUnits;
ULONG SectorsPerAllocationUnit;
ULONG BytesPerSector;
}
FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
// ******************************************************************
// * FILE_INFORMATION_CLASS
// ******************************************************************
typedef enum _FILE_INFORMATION_CLASS
{
FileDirectoryInformation = 1,
FileFullDirectoryInformation,
FileBothDirectoryInformation,
FileBasicInformation,
FileStandardInformation,
FileInternalInformation,
FileEaInformation,
FileAccessInformation,
FileNameInformation,
FileRenameInformation,
FileLinkInformation,
FileNamesInformation,
FileDispositionInformation,
FilePositionInformation,
FileFullEaInformation,
FileModeInformation,
FileAlignmentInformation,
FileAllInformation,
FileAllocationInformation,
FileEndOfFileInformation,
FileAlternateNameInformation,
FileStreamInformation,
FilePipeInformation,
FilePipeLocalInformation,
FilePipeRemoteInformation,
FileMailslotQueryInformation,
FileMailslotSetInformation,
FileCompressionInformation,
FileCopyOnWriteInformation,
FileCompletionInformation,
FileMoveClusterInformation,
FileQuotaInformation,
FileReparsePointInformation,
FileNetworkOpenInformation,
FileObjectIdInformation,
FileTrackingInformation,
FileOleDirectoryInformation,
FileContentIndexInformation,
FileInheritContentIndexInformation,
FileOleInformation,
FileMaximumInformation
}
FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
// ******************************************************************
// * CreateDisposition Values for NtCreateFile
// ******************************************************************
#define FILE_SUPERSEDE 0x00000000
#define FILE_OPEN 0x00000001
#define FILE_CREATE 0x00000002
#define FILE_OPEN_IF 0x00000003
#define FILE_OVERWRITE 0x00000004
#define FILE_OVERWRITE_IF 0x00000005
#define FILE_MAXIMUM_DISPOSITION 0x00000005
// ******************************************************************
// * CreateOption Values for NtCreateFile
// ******************************************************************
// FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT is what CreateFile
// uses for most things when translating to NtCreateFile.
#define FILE_DIRECTORY_FILE 0x00000001
#define FILE_WRITE_THROUGH 0x00000002
#define FILE_SEQUENTIAL_ONLY 0x00000004
#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
#define FILE_NON_DIRECTORY_FILE 0x00000040
#define FILE_CREATE_TREE_CONNECTION 0x00000080
#define FILE_COMPLETE_IF_OPLOCKED 0x00000100
#define FILE_NO_EA_KNOWLEDGE 0x00000200
#define FILE_OPEN_FOR_RECOVERY 0x00000400
#define FILE_RANDOM_ACCESS 0x00000800
#define FILE_DELETE_ON_CLOSE 0x00001000
#define FILE_OPEN_BY_FILE_ID 0x00002000
#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
#define FILE_NO_COMPRESSION 0x00008000
#define FILE_RESERVE_OPFILTER 0x00100000
#define FILE_OPEN_REPARSE_POINT 0x00200000
#define FILE_OPEN_NO_RECALL 0x00400000
#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
#define FILE_COPY_STRUCTURED_STORAGE 0x00000041
#define FILE_STRUCTURED_STORAGE 0x00000441
#define FILE_VALID_OPTION_FLAGS 0x00ffffff
#define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
#define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
#define FILE_VALID_SET_FLAGS 0x00000036
// ******************************************************************
// * OBJECT_ATTRIBUTES
// ******************************************************************
typedef struct _OBJECT_ATTRIBUTES
{
HANDLE RootDirectory;
PSTRING ObjectName;
ULONG Attributes;
}
OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
// ******************************************************************
// * FSINFOCLASS
// ******************************************************************
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;
// ******************************************************************
// * FILE_DIRECTORY_INFORMATION
// ******************************************************************
typedef struct _FILE_DIRECTORY_INFORMATION
{
ULONG NextEntryOffset;
ULONG FileIndex;
LARGE_INTEGER CreationTime;
LARGE_INTEGER LastAccessTime;
LARGE_INTEGER LastWriteTime;
LARGE_INTEGER ChangeTime;
LARGE_INTEGER EndOfFile;
LARGE_INTEGER AllocationSize;
ULONG FileAttributes;
ULONG FileNameLength;
CHAR FileName[1]; // Offset: 0x40
}
FILE_DIRECTORY_INFORMATION;
// ******************************************************************
// * MM_STATISTICS
// ******************************************************************
typedef struct _MM_STATISTICS
{
ULONG Length;
ULONG TotalPhysicalPages;
ULONG AvailablePages;
ULONG VirtualMemoryBytesCommitted;
ULONG VirtualMemoryBytesReserved;
ULONG CachePagesCommitted;
ULONG PoolPagesCommitted;
ULONG StackPagesCommitted;
ULONG ImagePagesCommitted;
}
MM_STATISTICS, *PMM_STATISTICS;
// ******************************************************************
// * IO_STATUS_BLOCK *Same as Win2k/XP*
// ******************************************************************
typedef struct _IO_STATUS_BLOCK
{
union
{
NTSTATUS Status;
PVOID Pointer;
}
u1;
ULONG_PTR Information;
}
IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
// ******************************************************************
// * IO_APC_ROUTINE
// ******************************************************************
typedef VOID (NTAPI *PIO_APC_ROUTINE)
(
IN PVOID ApcContext,
IN PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG Reserved
);
// ******************************************************************
// * MEMORY_BASIC_INFORMATION *Same as Win2k/XP*
// ******************************************************************
typedef struct _MEMORY_BASIC_INFORMATION
{
PVOID BaseAddress;
PVOID AllocationBase;
DWORD AllocationProtect;
SIZE_T RegionSize;
DWORD State;
DWORD Protect;
DWORD Type;
}
MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;
// ******************************************************************
// * EVENT_TYPE
// ******************************************************************
typedef enum _EVENT_TYPE
{
NotificationEvent = 0,
SynchronizationEvent
}
EVENT_TYPE;
// ******************************************************************
// * BUS_DATA_TYPE
// ******************************************************************
typedef enum _BUS_DATA_TYPE
{
ConfigurationSpaceUndefined = 0xFF,
Cmos = 0x0,
EisaConfiguration = 0x1,
Pos = 0x2,
CbusConfiguration = 0x3,
PCIConfiguration = 0x4,
VMEConfiguration = 0x5,
NuBusConfiguration = 0x6,
PCMCIAConfiguration = 0x7,
MPIConfiguration = 0x8,
MPSAConfiguration = 0x9,
PNPISAConfiguration = 0xA,
SgiInternalConfiguration = 0xB,
MaximumBusDataType = 0xC,
}
BUS_DATA_TYPE;
// ******************************************************************
// * PCI_SLOT_NUMBER
// ******************************************************************
typedef struct _PCI_SLOT_NUMBER
{
union
{
struct
{
ULONG DeviceNumber:5;
ULONG FunctionNumber:3;
ULONG Reserved:24;
}
bits;
ULONG AsULONG;
}u;
}
PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
#define PCI_TYPE0_ADDRESSES 6
#define PCI_TYPE1_ADDRESSES 2
#define PCI_TYPE2_ADDRESSES 5
// ******************************************************************
// * PCI_COMMON_CONFIG
// ******************************************************************
typedef struct _PCI_COMMON_CONFIG
{
USHORT VendorID; // 0x00 (ro)
USHORT DeviceID; // 0x02 (ro)
USHORT Command; // 0x04 Device control
USHORT Status; // 0x06
UCHAR RevisionID; // 0x08 (ro)
UCHAR ProgIf; // 0x09 (ro)
UCHAR SubClass; // 0x0A (ro)
UCHAR BaseClass; // 0x0B (ro)
UCHAR CacheLineSize; // 0x0C (ro+)
UCHAR LatencyTimer; // 0x0D (ro+)
UCHAR HeaderType; // 0x0E (ro)
UCHAR BIST; // 0x0F Built in self test
union
{
struct _PCI_HEADER_TYPE_0
{
ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; // 0x10
ULONG CIS;
USHORT SubVendorID;
USHORT SubSystemID;
ULONG ROMBaseAddress;
UCHAR CapabilitiesPtr;
UCHAR Reserved1[3];
ULONG Reserved2;
UCHAR InterruptLine; //
UCHAR InterruptPin; // (ro)
UCHAR MinimumGrant; // (ro)
UCHAR MaximumLatency; // (ro)
}
type0;
}u;
UCHAR DeviceSpecific[192];
}
PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
#define FIELD_OFFSET(type, field) ((LONG)(LONG_PTR)&(((type *)0)->field))
#define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET (PCI_COMMON_CONFIG, DeviceSpecific))
#define PCI_MAX_DEVICES 32
#define PCI_MAX_FUNCTION 8
#define PCI_MAX_BRIDGE_NUMBER 0xFF
#define PCI_INVALID_VENDORID 0xFFFF
#define PCI_VENDOR_NVIDIA_CORPORATION 0x10DE
#define PCI_USB0_DEVICE_ID 2
#define PCI_USB0_FUNCTION_ID 0
#define PCI_USB0_IRQ 1
#define PCI_USB0_REGISTER_BASE 0xFED00000
#define PCI_USB0_REGISTER_LENGTH 0x00001000
#define PCI_USB0_OHCI_CONTROLLER 0x01C2
// ******************************************************************
// * RETURN_FIRMWARE
// ******************************************************************
typedef enum _RETURN_FIRMWARE
{
ReturnFirmwareHalt = 0x0,
ReturnFirmwareReboot = 0x1,
ReturnFirmwareQuickReboot = 0x2,
ReturnFirmwareHard = 0x3,
ReturnFirmwareFatal = 0x4,
ReturnFirmwareAll = 0x5
}
RETURN_FIRMWARE, *LPRETURN_FIRMWARE;
// ******************************************************************
// * LAUNCH_DATA_HEADER
// ******************************************************************
typedef struct _LAUNCH_DATA_HEADER
{
DWORD dwLaunchDataType;
DWORD dwTitleId;
char szLaunchPath[520];
DWORD dwFlags;
}
LAUNCH_DATA_HEADER, *PLAUNCH_DATA_HEADER;
// ******************************************************************
// * LAUNCH_DATA_PAGE
// ******************************************************************
typedef struct _LAUNCH_DATA_PAGE
{
LAUNCH_DATA_HEADER Header;
UCHAR Pad[492];
UCHAR LaunchData[3072];
}
LAUNCH_DATA_PAGE, *PLAUNCH_DATA_PAGE;
// ******************************************************************
// * DISPATCHER_HEADER
// ******************************************************************
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;
// ******************************************************************
// * TIMER_TYPE
// ******************************************************************
typedef enum _TIMER_TYPE
{
NotificationTimer = 0,
SynchronizationTimer = 1
}
TIMER_TYPE;
// ******************************************************************
// * KTIMER (Timer Object)
// ******************************************************************
typedef struct _KTIMER
{
DISPATCHER_HEADER Header; // 0x00
ULARGE_INTEGER DueTime; // 0x10
LIST_ENTRY TimerListEntry; // 0x18
struct _KDPC *Dpc; // 0x20
LONG Period; // 0x24
}
KTIMER, *PKTIMER;
// ******************************************************************
// * PKSTART_ROUTINE
// ******************************************************************
// *
// * NOTE: Non-standard call. Similar to stdcall, but first argument
// * must be located at ebp+4 before calling.
// *
// * This is different from the NT version: 2 parameters as
// * opposed to 1.
// *
// ******************************************************************
typedef VOID (NTAPI *PKSTART_ROUTINE)
(
IN PVOID StartContext1,
IN PVOID StartContext2
);
struct _KDPC;
// ******************************************************************
// * PKDEFERRED_ROUTINE
// ******************************************************************
typedef VOID (*PKDEFERRED_ROUTINE)
(
IN struct _KDPC *Dpc,
IN PVOID DeferredContext,
IN PVOID SystemArgument1,
IN PVOID SystemArgument2
);
// ******************************************************************
// * KDPC (Deferred Procedure Call (DPC) Object)
// ******************************************************************
typedef struct _KDPC
{
CSHORT Type; // 0x00
BOOLEAN Inserted; // 0x02
BYTE Padding; // 0x03
LIST_ENTRY DpcListEntry; // 0x04
PKDEFERRED_ROUTINE DeferredRoutine; // 0x0C
PVOID DeferredContext;
PVOID SystemArgument1;
PVOID SystemArgument2;
}
KDPC, *PKDPC;
// ******************************************************************
// * KOBJECTS
// ******************************************************************
typedef enum _KOBJECTS
{
DpcObject = 0x13,
}
KOBJECTS, *PKOBJECTS;
// ******************************************************************
// * KINTERRUPR
// ******************************************************************
typedef struct _KINTERRUPT
{
unsigned char UnknownA[0x0C];
unsigned char KIRQL;
unsigned char PaddingA[0x03];
unsigned char UnknownB[0x08];
unsigned char ISR[0x58];
}
KINTERRUPT, *PKINTERRUPT;
// ******************************************************************
// * PKSERVICE_ROUTINE
// ******************************************************************
typedef void* PKSERVICE_ROUTINE;
typedef CHAR KIRQL;
// ******************************************************************
// * KINTERRUPT_MODE
// ******************************************************************
typedef enum _KINTERRUPT_MODE
{
LevelSensitive,
Latched,
}
KINTERRUPT_MODE;
// ******************************************************************
// * RTL_CRITICAL_SECTION
// ******************************************************************
typedef struct _RTL_CRITICAL_SECTION
{
DWORD Unknown[4]; // 0x00
LONG LockCount; // 0x10
LONG RecursionCount; // 0x14
HANDLE OwningThread; // 0x18
}
RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
// ******************************************************************
// * NT_TIB
// ******************************************************************
typedef struct _NT_TIB
{
struct _EXCEPTION_REGISTRATION_RECORD *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;
// ******************************************************************
// * KTHREAD
// ******************************************************************
// *
// * NOTE: INCOMPLETE!!
// *
// ******************************************************************
typedef struct _KTHREAD
{
UCHAR UnknownA[0x28];
PVOID TlsData; // 0x28
UCHAR UnknownB[0xE4]; // 0x2C
}
KTHREAD, *PKTHREAD;
// ******************************************************************
// * ETHREAD
// ******************************************************************
// *
// * NOTE: INCOMPLETE!!
// *
// ******************************************************************
typedef struct _ETHREAD
{
struct _KTHREAD Tcb;
UCHAR UnknownA[0x1C]; // 0x110
DWORD UniqueThread; // 0x12C
}
ETHREAD, *PETHREAD;
// ******************************************************************
// * KPCRB
// ******************************************************************
// *
// * NOTE: INCOMPLETE!!
// *
// ******************************************************************
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;
// ******************************************************************
// * KPCR
// ******************************************************************
// *
// * NOTE: KPCR is the structure which exists at the FS: segment.
// *
// ******************************************************************
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;
// ******************************************************************
// * EEPROM_INDEX
// ******************************************************************
typedef enum _EEPROM_INDEX
{
EEPROM_LANGUAGE = 0x7,
EEPROM_VIDEO = 0x8,
EEPROM_AUDIO = 0x9,
EEPROM_P_CONTROL_GAMES = 0xA,
EEPROM_P_CONTROL_PASSWORD = 0xB,
EEPROM_P_CONTROL_MOVIES = 0xC,
EEPROM_ONLINE_IP_ADDRESS = 0xD,
EEPROM_ONLINE_DNS_ADDRESS = 0xE,
EEPROM_ONLINE_DEFAULT_GATEWAY_ADDRESS = 0xF,
EEPROM_ONLINE_SUBNET_ADDRESS= 0x10,
EEPROM_MISC = 0x11,
EEPROM_DVD_REGION = 0x12,
EEPROM_MAX_OS = 0xFF,
// Break
EEPROM_FACTORY_SERIAL_NUMBER= 0x100,
EEPROM_FACTORY_ETHERNET_ADDR= 0x101,
EEPROM_FACTORY_ONLINE_KEY = 0x102,
EEPROM_FACTORY_AV_REGION = 0x103,
EEPROM_FACTORY_GAME_REGION = 0x104,
EEPROM_MAX_FACTORY = 0x1FF,
// Break
EEPROM_ENCRYPTED_SECTION = 0xFFFE,
EEPROM_MAX_ALL = 0xFFFF
}
EEPROM_INDEX, *PEEPROM_INDEX;
// ******************************************************************
// * XBOX_HARDWARE_INFO
// ******************************************************************
typedef struct _XBOX_HARDWARE_INFO
{
ULONG Flags;
UCHAR Unknown1;
UCHAR Unknown2;
UCHAR Unknown3;
UCHAR Unknown4;
}
XBOX_HARDWARE_INFO;
// ******************************************************************
// * TIME_FIELDS
// ******************************************************************
typedef struct _TIME_FIELDS
{
USHORT Year;
USHORT Month;
USHORT Day;
USHORT Hour;
USHORT Minute;
USHORT Second;
USHORT Millisecond;
USHORT Weekday;
}
TIME_FIELDS, *PTIME_FIELDS;
// ******************************************************************
// * READ_REGISTER_UCHAR
// ******************************************************************
// *
// * Use this to access I/O mapped memory. Just a good standard.
// *
// ******************************************************************
INLINE static UCHAR READ_REGISTER_UCHAR(PUCHAR Address)
{
return *(volatile UCHAR *)Address;
}
// ******************************************************************
// * READ_REGISTER_USHORT
// ******************************************************************
// *
// * Use this to access I/O mapped memory. Just a good standard.
// *
// ******************************************************************
INLINE static USHORT READ_REGISTER_USHORT(PUSHORT Address)
{
return *(volatile USHORT *)Address;
}
// ******************************************************************
// * READ_REGISTER_ULONG
// ******************************************************************
// *
// * Use this to access I/O mapped memory. Just a good standard.
// *
// ******************************************************************
INLINE static ULONG READ_REGISTER_ULONG(PULONG Address)
{
return *(volatile ULONG *)Address;
}
// ******************************************************************
// * WRITE_REGISTER_UCHAR
// ******************************************************************
// *
// * Use this to access I/O mapped memory (without this, writing a
// * value and then reading it back can produce an incorrect result
// * because the write may not be completed yet.)
// *
// ******************************************************************
static VOID WRITE_REGISTER_UCHAR(PVOID Address, UCHAR Value)
{
__asm
{
mov edx, Address
mov ah, Value
mov [edx], ah
lock or Address, edx
};
}
// ******************************************************************
// * WRITE_REGISTER_USHORT
// ******************************************************************
// *
// * Use this to access I/O mapped memory (without this, writing a
// * value and then reading it back can produce an incorrect result
// * because the write may not be completed yet.)
// *
// ******************************************************************
static VOID WRITE_REGISTER_USHORT(PVOID Address, USHORT Value)
{
__asm
{
mov edx, Address
mov ax, Value
mov [edx], ax
lock or Address, edx
};
}
// ******************************************************************
// * WRITE_REGISTER_ULONG
// ******************************************************************
// *
// * Use this to access I/O mapped memory (without this, writing a
// * value and then reading it back can produce an incorrect result
// * because the write may not be completed yet.)
// *
// ******************************************************************
static VOID WRITE_REGISTER_ULONG(PVOID Address, ULONG Value)
{
__asm
{
mov edx, Address
mov eax, Value
mov [edx], eax
lock or Address, edx
};
}
typedef struct _SCSI_PASS_THROUGH_DIRECT {
USHORT Length;
UCHAR ScsiStatus;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
UCHAR CdbLength;
UCHAR SenseInfoLength;
UCHAR DataIn;
ULONG DataTransferLength;
ULONG TimeOutValue;
PVOID DataBuffer;
ULONG SenseInfoOffset;
UCHAR Cdb[16];
}SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
typedef struct _MODE_PARAMETER_HEADER10 {
UCHAR ModeDataLength[2];
UCHAR MediumType;
UCHAR DeviceSpecificParameter;
UCHAR Reserved[2];
UCHAR BlockDescriptorLength[2];
}MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10;
typedef struct _DVDX2_AUTHENTICATION_PAGE {
UCHAR Unknown[2];
UCHAR PartitionArea;
UCHAR CDFValid;
UCHAR Authentication;
UCHAR Unknown2[3];
ULONG Unknown3[3];
} DVDX2_AUTHENTICATION_PAGE, *PDVDX2_AUTHENTICATION_PAGE;
typedef struct _DVDX2_AUTHENTICATION {
MODE_PARAMETER_HEADER10 Header;
DVDX2_AUTHENTICATION_PAGE AuthenticationPage;
} DVDX2_AUTHENTICATION, *PDVDX2_AUTHENTICATION;
// ******************************************************************
// * Debug
// ******************************************************************
#include "dbg.h"
// ******************************************************************
// * Executive
// ******************************************************************
#include "ex.h"
// ******************************************************************
// * Hardware Abstraction Layer
// ******************************************************************
#include "hal.h"
// ******************************************************************
// * I/O Manager
// ******************************************************************
#include "io.h"
// ******************************************************************
// * Kernel
// ******************************************************************
#include "kernel.h"
// ******************************************************************
// * Memory Manager
// ******************************************************************
#include "mm.h"
// ******************************************************************
// * NT
// ******************************************************************
#include "nt.h"
// ******************************************************************
// * Object Manager
// ******************************************************************
#include "ob.h"
// ******************************************************************
// * Process Structure
// ******************************************************************
#include "ps.h"
// ******************************************************************
// * Run-time Library
// ******************************************************************
#include "rtl.h"
// ******************************************************************
// * XBox
// ******************************************************************
#include "xbox.h"
#if defined(__cplusplus)
}
#endif
#endif