1111 lines
35 KiB
C
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
|
|
|
|
|