Advertisement
Guest User

kernel.h

a guest
Aug 14th, 2012
544
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.45 KB | None | 0 0
  1.  
  2. #ifndef _KERNEL_DEFINES_H
  3. #define _KERNEL_DEFINES_H
  4.  
  5. #include "types.h"
  6.  
  7. // an intrinsic they left out...
  8. #define __isync()        __emit(0x4C00012C)
  9.  
  10. #define CONSTANT_OBJECT_STRING(s)   { strlen( s ) / sizeof( OCHAR ), (strlen( s ) / sizeof( OCHAR ))+1, s }
  11. #define MAKE_STRING(s)   {(USHORT)(strlen(s)), (USHORT)((strlen(s))+1), (PCHAR)s}
  12. #define EXPORTNUM(x) // Just for documentation, thx XBMC!
  13.  
  14. #define STATUS_SUCCESS  0
  15. #define NT_EXTRACT_ST(Status)           ((((ULONG)(Status)) >> 30)& 0x3)
  16. #define NT_SUCCESS(Status)              (((NTSTATUS)(Status)) >= 0)
  17. #define NT_INFORMATION(Status)          (NT_EXTRACT_ST(Status) == 1)
  18. #define NT_WARNING(Status)              (NT_EXTRACT_ST(Status) == 2)
  19. #define NT_ERROR(Status)                (NT_EXTRACT_ST(Status) == 3)
  20.  
  21. #define STATUS_SUCCESS  0
  22. #define FILE_SYNCHRONOUS_IO_NONALERT    0x20
  23. #define OBJ_CASE_INSENSITIVE            0x40
  24.  
  25. // for KeGetCurrentProcessType()
  26. #define IDLE_PROC   0
  27. #define USER_PROC   1
  28. #define SYSTEM_PROC 2
  29.  
  30. typedef long            NTSTATUS;
  31. typedef ULONG           ACCESS_MASK;
  32.  
  33. typedef struct _STRING {
  34.     USHORT Length;
  35.     USHORT MaximumLength;
  36.     PCHAR Buffer;
  37. } STRING, *PSTRING;
  38.  
  39. typedef struct _CSTRING {
  40.     USHORT Length;
  41.     USHORT MaximumLength;
  42.     CONST char *Buffer;
  43. } CSTRING, *PCSTRING;
  44.  
  45. typedef struct _UNICODE_STRING {
  46.     USHORT Length;
  47.     USHORT MaximumLength;
  48.     PWSTR  Buffer;
  49. } UNICODE_STRING, *PUNICODE_STRING;
  50.  
  51. typedef STRING          OBJECT_STRING;
  52. typedef CSTRING         COBJECT_STRING;
  53. typedef PSTRING         POBJECT_STRING;
  54. typedef PCSTRING        PCOBJECT_STRING;
  55. typedef STRING          OEM_STRING;
  56. typedef PSTRING         POEM_STRING;
  57. typedef CHAR            OCHAR;
  58. typedef CHAR*           POCHAR;
  59. typedef PSTR            POSTR;
  60. typedef PCSTR           PCOSTR;
  61. typedef CHAR*           PSZ;
  62. typedef CONST CHAR*     PCSZ;
  63. typedef STRING          ANSI_STRING;
  64. typedef PSTRING         PANSI_STRING;
  65. typedef CSTRING         CANSI_STRING;
  66. typedef PCSTRING        PCANSI_STRING;
  67. #define ANSI_NULL       ((CHAR)0)     // winnt
  68. typedef CONST UNICODE_STRING*   PCUNICODE_STRING;
  69. #define UNICODE_NULL            ((WCHAR)0) // winnt
  70.  
  71. #define OTEXT(quote) __OTEXT(quote)
  72.  
  73.  
  74. typedef struct _IO_STATUS_BLOCK {
  75.     union {
  76.         NTSTATUS Status;
  77.         PVOID Pointer;
  78.     } st;
  79.     ULONG_PTR Information;
  80. } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
  81.  
  82. typedef VOID (NTAPI *PIO_APC_ROUTINE) (
  83.     IN PVOID ApcContext,
  84.     IN PIO_STATUS_BLOCK IoStatusBlock,
  85.     IN ULONG Reserved
  86.     );
  87.  
  88. typedef struct _OBJECT_ATTRIBUTES {
  89.     HANDLE RootDirectory;
  90.     POBJECT_STRING ObjectName;
  91.     ULONG Attributes;
  92. } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
  93.  
  94. // VOID InitializeObjectAttributes(
  95. //     OUT POBJECT_ATTRIBUTES p,
  96. //     IN STRING n,
  97. //     IN ULONG a,
  98. //     IN HANDLE r)
  99. #define InitializeObjectAttributes( p, name, attrib, root){     \
  100.     (p)->RootDirectory = root;                            \
  101.     (p)->Attributes = attrib;                             \
  102.     (p)->ObjectName = name;                               \
  103. }
  104.  
  105. // returned by a call to 'NtQueryInformationFile' with 0x22 = FileNetworkOpenInformation
  106. typedef struct _FILE_NETWORK_OPEN_INFORMATION {
  107.   LARGE_INTEGER  CreationTime;
  108.   LARGE_INTEGER  LastAccessTime;
  109.   LARGE_INTEGER  LastWriteTime;
  110.   LARGE_INTEGER  ChangeTime;
  111.   LARGE_INTEGER  AllocationSize;
  112.   LARGE_INTEGER  EndOfFile;
  113.   ULONG  FileAttributes;
  114. } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
  115.  
  116. /* description about xex exe headers in memory */
  117. typedef struct _XBOX_HARDWARE_INFO {
  118.     DWORD Flags;
  119.     unsigned char NumberOfProcessors;
  120.     unsigned char PCIBridgeRevisionID;
  121.     unsigned char Reserved[6];
  122.     unsigned short BldrMagic;
  123.     unsigned short BldrFlags;
  124. } XBOX_HARDWARE_INFO, *PXBOX_HARDWARE_INFO;
  125.  
  126. typedef struct _XEX_IMPORT_TABLE_ENT {
  127.     DWORD ImportDestAddr;
  128.     DWORD ImportStubAddr;
  129. } XEX_IMPORT_TABLE_ENT, *PXEX_IMPORT_TABLE_ENT;
  130.  
  131. typedef struct _XEX_IMPORT_TABLE {
  132.     DWORD TableSize;
  133.     BYTE NextImportDigest[20];
  134.     DWORD ModuleNumber;
  135.     DWORD Version[2];
  136.     BYTE Unused;
  137.     BYTE ModuleIndex;
  138.     WORD ImportCount;
  139.     DWORD ImportStubAddr[1];
  140. } XEX_IMPORT_TABLE, *PXEX_IMPORT_TABLE;
  141.  
  142. typedef struct _XEX_IMPORT_DESCRIPTOR {
  143.     DWORD Size;
  144.     DWORD NameTableSize;
  145.     DWORD ModuleCount;
  146.     // nametable is here of nametable size
  147.     // followed by modulecount number of xex import tables
  148. } XEX_IMPORT_DESCRIPTOR, *PXEX_IMPORT_DESCRIPTOR;
  149.  
  150. typedef struct _IMAGE_EXPORT_ADDRESS_TABLE {
  151.     DWORD Magic[3]; // 48 00 00 00 00 48 56 45 48 00 00 00
  152.     DWORD ModuleNumber[2];
  153.     DWORD Version[3];
  154.     DWORD ImageBaseAddress; // must be <<16 to be accurate
  155.     DWORD Count;
  156.     DWORD Base;
  157.     DWORD ordOffset[1]; // ordOffset[0]+ (ImageBaseAddress<<8) = function offset of ordinal 1
  158. } IMAGE_EXPORT_ADDRESS_TABLE, *PIMAGE_EXPORT_ADDRESS_TABLE;
  159.  
  160. typedef struct _XEX_SECURITY_INFO {
  161.     unsigned long Size;
  162.     DWORD ImageSize;
  163.     BYTE Signature[256];
  164.     DWORD InfoSize;
  165.     DWORD ImageFlags;
  166.     DWORD LoadAddress;
  167.     BYTE ImageHash[20];
  168.     DWORD ImportTableCount;
  169.     BYTE ImportDigest[20];
  170.     BYTE MediaID[16];
  171.     BYTE ImageKey[16];
  172.     PIMAGE_EXPORT_ADDRESS_TABLE ExportTableAddress;
  173.     BYTE HeaderHash[20];
  174.     DWORD GameRegion;
  175.     DWORD AllowedMediaTypes;
  176.     DWORD PageDescriptorCount;
  177. } XEX_SECURITY_INFO, *PXEX_SECURITY_INFO;
  178.  
  179. typedef struct _IMAGE_XEX_HEADER {
  180.     DWORD Magic;
  181.     DWORD ModuleFlags;
  182.     DWORD SizeOfHeaders;
  183.     DWORD SizeOfDiscardableHeaders;
  184.     PXEX_SECURITY_INFO SecurityInfo;
  185.     DWORD HeaderDirectoryEntryCount;
  186. } IMAGE_XEX_HEADER, *PIMAGE_XEX_HEADER;
  187.  
  188. typedef struct _LDR_DATA_TABLE_ENTRY {
  189.     LIST_ENTRY InLoadOrderLinks;
  190.     LIST_ENTRY InClosureOrderLinks;
  191.     LIST_ENTRY InInitializationOrderLinks;
  192.     PVOID NtHeadersBase;
  193.     PVOID ImageBase;
  194.     DWORD SizeOfNtImage;
  195.     UNICODE_STRING FullDllName;
  196.     UNICODE_STRING BaseDllName;
  197.     DWORD Flags;
  198.     DWORD SizeOfFullImage;
  199.     PVOID EntryPoint;
  200.     WORD LoadCount;
  201.     WORD ModuleIndex;
  202.     PVOID DllBaseOriginal;
  203.     DWORD CheckSum;
  204.     DWORD ModuleLoadFlags;
  205.     DWORD TimeDateStamp;
  206.     PVOID LoadedImports;
  207.     PVOID XexHeaderBase;
  208.     union{
  209.         STRING LoadFileName;
  210.         struct {
  211.             PVOID ClosureRoot; // LDR_DATA_TABLE_ENTRY
  212.             PVOID TraversalParent; // LDR_DATA_TABLE_ENTRY
  213.         } asEntry;
  214.     } inf;
  215. } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
  216.  
  217. typedef struct _XBOX_KRNL_VERSION{
  218.     USHORT Major; // for 360 this is always 2
  219.     USHORT Minor; // usually 0
  220.     USHORT Build; // current version, for example 9199
  221.     USHORT Qfe;
  222. } XBOX_KRNL_VERSION, *PXBOX_KRNL_VERSION;
  223.  
  224. typedef enum _POOL_TYPE {
  225.     NonPagedPool                    = 0,
  226.     PagedPool                       = 1,
  227.     NonPagedPoolMustSucceed         = 2,
  228.     DontUseThisType                 = 3,
  229.     NonPagedPoolCacheAligned        = 4,
  230.     PagedPoolCacheAligned           = 5,
  231.     NonPagedPoolCacheAlignedMustS   = 6
  232. } POOL_TYPE;
  233.  
  234. #ifdef __cplusplus
  235. extern "C" {
  236. #endif
  237.     // SDK library function
  238.     VOID XapiThreadStartup(
  239.         IN      VOID (__cdecl *StartRoutine)(VOID *),
  240.         IN      PVOID StartContext,
  241.         IN      DWORD dwExitCode
  242.     );
  243.  
  244.     NTSYSAPI
  245.     EXPORTNUM(3)
  246.     void
  247.     NTAPI
  248.     DbgPrint(
  249.         const char* s,
  250.         ...
  251.     );
  252.  
  253.     NTSYSAPI
  254.     EXPORTNUM(9)
  255.     PVOID
  256.     NTAPI
  257.     ExAllocatePool(
  258.         IN  DWORD NumberOfBytes
  259.     );
  260.  
  261.     // uses POOL_TYPE NonPagedPool
  262.     NTSYSAPI
  263.     EXPORTNUM(10)
  264.     PVOID
  265.     NTAPI
  266.     ExAllocatePoolWithTag(
  267.         IN  DWORD NumberOfBytes,
  268.         IN  DWORD Tag
  269.     );
  270.  
  271.     NTSYSAPI
  272.     EXPORTNUM(11)
  273.     PVOID
  274.     NTAPI
  275.     ExAllocatePoolTypeWithTag(
  276.         IN  DWORD NumberOfBytes,
  277.         IN  DWORD Tag,
  278.         IN  POOL_TYPE PoolType
  279.     );
  280.  
  281.     EXPORTNUM(12)
  282.     extern PDWORD ExConsoleGameRegion;
  283.  
  284.     NTSYSAPI
  285.     EXPORTNUM(13)
  286.     DWORD
  287.     NTAPI
  288.     ExCreateThread(
  289.         IN      PHANDLE pHandle,
  290.         IN      DWORD dwStackSize,
  291.         IN      LPDWORD lpThreadId,
  292.         IN      PVOID apiThreadStartup,
  293.         IN      LPTHREAD_START_ROUTINE lpStartAddress,
  294.         IN      LPVOID lpParameter,
  295.         IN      DWORD dwCreationFlagsMod
  296.     );
  297.  
  298.     NTSYSAPI
  299.     EXPORTNUM(15)
  300.     VOID
  301.     NTAPI
  302.     ExFreePool(
  303.         IN PVOID  pPool
  304.     );
  305.  
  306.     // tested on 9199 rebooter/freeboot
  307.     // 0 hard poweroff (used by hotplug HDD) HalpPowerDownSystemNow
  308.     // 1 hard reset (video error) HalpRebootSystem
  309.     // 2 hard reset (used for dumpwritedump/frozen processor) HalpRebootSystem
  310.     // 3 hard reset HalpRebootSystem
  311.     // 4 power off (hard) HalpRebootSystem
  312.     // 5 power off (nice) HalpPowerDownSystem
  313.     // 6 E79 (lost settings) HalpRebootQuiesceSystem
  314.     // 7 frozen console HalpRequestPowerDownDpc
  315.     NTSYSAPI
  316.     EXPORTNUM(40)
  317.     VOID
  318.     NTAPI
  319.     HalReturnToFirmware(
  320.         IN      DWORD dwPowerDownMode
  321.     );
  322.  
  323.     NTSYSAPI
  324.     UCHAR
  325.     EXPORTNUM(102)
  326.     NTAPI
  327.     KeGetCurrentProcessType(
  328.         VOID
  329.     );
  330.  
  331.     NTSYSAPI
  332.     EXPORTNUM(224)
  333.     NTSTATUS
  334.     NTAPI
  335.         NtOpenSymbolicLinkObject(
  336.         OUT     PHANDLE LinkHandle,
  337.         IN      POBJECT_ATTRIBUTES ObjectAttributes
  338.     );
  339.  
  340.     NTSYSAPI
  341.     EXPORTNUM(231)
  342.     NTSTATUS
  343.     NTAPI
  344.     NtQueryFullAttributesFile(
  345.         IN      POBJECT_ATTRIBUTES ObjectAttributes,
  346.         OUT     PFILE_NETWORK_OPEN_INFORMATION Attributes
  347.     );
  348.  
  349.     NTSYSAPI
  350.     EXPORTNUM(236)
  351.     NTSTATUS
  352.     NTAPI
  353.     NtQuerySymbolicLinkObject(
  354.         IN      HANDLE LinkHandle,
  355.         IN OUT  PSTRING LinkTarget,
  356.         OUT     PULONG ReturnedLength OPTIONAL
  357.     );
  358.  
  359.     NTSYSAPI
  360.     EXPORTNUM(259)
  361.     HRESULT
  362.     NTAPI
  363.     ObCreateSymbolicLink(
  364.         IN      PSTRING SymbolicLinkName,
  365.         IN      PSTRING DeviceName
  366.     );
  367.  
  368.     NTSYSAPI
  369.     EXPORTNUM(260)
  370.     HRESULT
  371.     NTAPI
  372.     ObDeleteSymbolicLink(
  373.         IN      PSTRING SymbolicLinkName
  374.     );
  375.  
  376.     NTSYSAPI
  377.     EXPORTNUM(299)
  378.     PVOID
  379.     NTAPI
  380.     RtlImageXexHeaderField(
  381.         IN      PVOID XexHeaderBase,
  382.         IN      DWORD ImageField
  383.     );
  384.  
  385.     NTSYSAPI
  386.     EXPORTNUM(300)
  387.     VOID
  388.     NTAPI
  389.     RtlInitAnsiString(
  390.         IN OUT  PANSI_STRING DestinationString,
  391.         IN      PCSZ  SourceString
  392.     );
  393.  
  394.     EXPORTNUM(342)
  395.     extern PXBOX_HARDWARE_INFO XboxHardwareInfo;
  396.  
  397.     EXPORTNUM(344)
  398.     extern PXBOX_KRNL_VERSION XboxKrnlVersion;
  399.  
  400.     NTSYSAPI
  401.     EXPORTNUM(404)
  402.     BOOL
  403.     NTAPI
  404.     XexCheckExecutablePrivilege(
  405.         IN      DWORD priviledge
  406.     );
  407.  
  408.     // ie XexGetModuleHandle("xam.xex", &hand), returns 0 on success
  409.     NTSYSAPI
  410.     EXPORTNUM(405)
  411.     NTSTATUS
  412.     NTAPI
  413.     XexGetModuleHandle(
  414.         IN      PSZ moduleName,
  415.         IN OUT  PHANDLE hand
  416.     );
  417.  
  418.     // ie XexGetProcedureAddress(hand ,0x50, &addr) returns 0 on success
  419.     NTSYSAPI
  420.     EXPORTNUM(407)
  421.     DWORD
  422.     NTAPI
  423.     XexGetProcedureAddress(
  424.         IN      HANDLE hand,
  425.         IN      DWORD dwOrdinal,
  426.         IN      PVOID Address
  427.     );
  428.  
  429.     NTSYSAPI
  430.     EXPORTNUM(408)
  431.     DWORD
  432.     NTAPI
  433.     XexLoadExecutable(
  434.         IN      PCHAR xexName,
  435.         IN OUT  PHANDLE handle,
  436.         IN      DWORD typeInfo,
  437.         IN      DWORD ver
  438.     );
  439.  
  440.     NTSYSAPI
  441.     EXPORTNUM(409)
  442.     DWORD
  443.     NTAPI
  444.     XexLoadImage(
  445.         IN      LPCSTR xexName,
  446.         IN      DWORD typeInfo,
  447.         IN      DWORD ver,
  448.         IN OUT  PHANDLE modHandle
  449.     );
  450.  
  451.     NTSYSAPI
  452.     EXPORTNUM(486)
  453.     NTSTATUS
  454.     NTAPI
  455.     XInputdReadState(
  456.         IN      PDWORD DeviceContext,
  457.         OUT     PDWORD pdwPacketNumber,
  458.         OUT     PXINPUT_GAMEPAD pInputData
  459.     );
  460.  
  461.     NTSYSAPI
  462.     EXPORTNUM(611)
  463.     void
  464.     NTAPI
  465.     AniTerminateAnimation(
  466.         VOID
  467.     );
  468.  
  469.  
  470. #ifdef __cplusplus
  471. }
  472. #endif
  473.  
  474.  
  475. #endif  //_KERNEL_DEFINES_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement