diff --git a/import/OpenXDK/include/xboxkrnl/io.h b/import/OpenXDK/include/xboxkrnl/io.h index dc4b2a938..0feb86151 100644 --- a/import/OpenXDK/include/xboxkrnl/io.h +++ b/import/OpenXDK/include/xboxkrnl/io.h @@ -145,7 +145,14 @@ XBSYSAPI EXPORTNUM(70) OBJECT_TYPE IoDeviceObjectType; // ****************************************************************** XBSYSAPI EXPORTNUM(71) OBJECT_TYPE IoFileObjectType; -XBSYSAPI VOID *IoFreeIrp; +// ****************************************************************** +// * 0x0048 - IoFreeIrp() +// ****************************************************************** +XBSYSAPI EXPORTNUM(72) VOID NTAPI IoFreeIrp +( + IN PIRP Irp +); + XBSYSAPI VOID *IoInitializeIrp; XBSYSAPI VOID *IoInvalidDeviceRequest; XBSYSAPI VOID *IoQueryFileInformation; diff --git a/import/OpenXDK/include/xboxkrnl/xboxkrnl.h b/import/OpenXDK/include/xboxkrnl/xboxkrnl.h index 7a62515ab..d154a619b 100644 --- a/import/OpenXDK/include/xboxkrnl/xboxkrnl.h +++ b/import/OpenXDK/include/xboxkrnl/xboxkrnl.h @@ -1239,6 +1239,29 @@ typedef struct _KDEVICE_QUEUE } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE; +typedef PVOID PFILE_SEGMENT_ELEMENT; + +typedef struct _IRP +{ + CSHORT Type; // 0x00 + WORD Size; // 0x02 + ULONG Flags; // 0x04 + LIST_ENTRY ThreadListEntry; // 0x08 + IO_STATUS_BLOCK IoStatus; // 0x10 + CHAR StackCount; // 0x18 + CHAR CurrentLocation; // 0x19 + UCHAR PendingReturned; // 0x1A + UCHAR Cancel; // 0x1B + PIO_STATUS_BLOCK UserIosb; // 0x1C + PKEVENT UserEvent; // 0x20 + ULONGLONG Overlay; // 0x28 + PVOID UserBuffer; // 0x30 + PFILE_SEGMENT_ELEMENT SegmentArray; // 0x34 + ULONG LockedBufferLength; // 0x38 + ULONGLONG Tail; // 0x3C +} +IRP, *PIRP; + typedef struct _DEVICE_OBJECT { CSHORT Type; @@ -1246,7 +1269,7 @@ typedef struct _DEVICE_OBJECT LONG ReferenceCount; struct _DRIVER_OBJECT *DriverObject; struct _DEVICE_OBJECT *MountedOrSelfDevice; - struct _IRP *CurrentIrp; + PIRP CurrentIrp; ULONG Flags; PVOID DeviceExtension; UCHAR DeviceType; @@ -1279,25 +1302,25 @@ typedef struct _FILE_OBJECT { CSHORT Type; // 0x00 BYTE DeletePending : 1; // 0x02 - BYTE ReadAccess : 1; // 0x02 - BYTE WriteAccess : 1; // 0x02 - BYTE DeleteAccess : 1; // 0x02 - BYTE SharedRead : 1; // 0x02 - BYTE SharedWrite : 1; // 0x02 - BYTE SharedDelete : 1; // 0x02 - BYTE Reserved : 1; // 0x02 + BYTE ReadAccess : 1; // 0x02 + BYTE WriteAccess : 1; // 0x02 + BYTE DeleteAccess : 1; // 0x02 + BYTE SharedRead : 1; // 0x02 + BYTE SharedWrite : 1; // 0x02 + BYTE SharedDelete : 1; // 0x02 + BYTE Reserved : 1; // 0x02 - BYTE Flags; // 0x03 - PDEVICE_OBJECT DeviceObject; // 0x04 - PVOID FsContext; // 0x08 - PVOID FsContext2; // 0x0C - NTSTATUS FinalStatus; // 0x10 + BYTE Flags; // 0x03 + PDEVICE_OBJECT DeviceObject; // 0x04 + PVOID FsContext; // 0x08 + PVOID FsContext2; // 0x0C + NTSTATUS FinalStatus; // 0x10 LARGE_INTEGER CurrentByteOffset; // 0x14 struct _FILE_OBJECT * RelatedFileObject; // 0x1C PIO_COMPLETION_CONTEXT CompletionContext; // 0x20 LONG LockCount; // 0x24 - KEVENT Lock; // 0x28 - KEVENT Event; // 0x38 + KEVENT Lock; // 0x28 + KEVENT Event; // 0x38 } FILE_OBJECT, *PFILE_OBJECT; // ****************************************************************** diff --git a/src/CxbxKrnl/EmuKrnlIo.cpp b/src/CxbxKrnl/EmuKrnlIo.cpp index 218c28d8e..1ad1d280b 100644 --- a/src/CxbxKrnl/EmuKrnlIo.cpp +++ b/src/CxbxKrnl/EmuKrnlIo.cpp @@ -376,21 +376,20 @@ XBSYSAPI EXPORTNUM(71) xboxkrnl::OBJECT_TYPE xboxkrnl::IoFileObjectType = 'eliF' // = "File" in reverse }; -/* TODO : Finish of these Dxbx ported signatures : // ****************************************************************** // * 0x0048 - IoFreeIrp() // ****************************************************************** -XBSYSAPI EXPORTNUM(72) xboxkrnl::NTSTATUS NTAPI xboxkrnl::IoFreeIrp +XBSYSAPI EXPORTNUM(72) void NTAPI xboxkrnl::IoFreeIrp ( + IN PIRP Irp ) { - LOG_FUNC(); + LOG_FUNC_ONE_ARG(Irp); LOG_UNIMPLEMENTED(); - - RETURN(S_OK); } +/* TODO : Finish of these Dxbx ported signatures : // ****************************************************************** // * 0x0049 - IoInitializeIrp() // ****************************************************************** diff --git a/src/CxbxKrnl/KernelThunk.cpp b/src/CxbxKrnl/KernelThunk.cpp index dec180469..5ff4c2992 100644 --- a/src/CxbxKrnl/KernelThunk.cpp +++ b/src/CxbxKrnl/KernelThunk.cpp @@ -139,7 +139,7 @@ extern "C" CXBXKRNL_API uint32 CxbxKrnl_KernelThunkTable[379] = (uint32)FUNC(&xboxkrnl::IoDeleteSymbolicLink), // 0x0045 (69) (uint32)VARIABLE(&xboxkrnl::IoDeviceObjectType), // 0x0046 (70) (uint32)VARIABLE(&xboxkrnl::IoFileObjectType), // 0x0047 (71) - (uint32)PANIC(0x0048), // 0x0048 (72) IoFreeIrp + (uint32)FUNC(&xboxkrnl::IoFreeIrp), // 0x0048 (72) (uint32)PANIC(0x0049), // 0x0049 (73) IoInitializeIrp (uint32)PANIC(0x004A), // 0x004A (74) IoInvalidDeviceRequest (uint32)PANIC(0x004B), // 0x004B (75) IoQueryFileInformation