Merge pull request #1799 from LukeUsher/fix-mechassault

kernel: Define and init IdexChannelObject
This commit is contained in:
PatrickvL 2019-12-16 23:47:29 +01:00 committed by GitHub
commit 8ebeeeb24c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 51 additions and 11 deletions

View File

@ -483,7 +483,7 @@ XBSYSAPI EXPORTNUM(355) UCHAR XePublicKeyDataChihiroBoot[284];
// ******************************************************************
// * 0x0165 - IdexChannelObject
// ******************************************************************
XBSYSAPI EXPORTNUM(357) BYTE IdexChannelObject[0x100];
XBSYSAPI EXPORTNUM(357) IDE_CHANNEL_OBJECT IdexChannelObject;
// ******************************************************************
// * 0x0169 - RtlSnprintf()

View File

@ -2617,6 +2617,45 @@ typedef struct _IO_COMPLETION_BASIC_INFORMATION {
LONG Depth;
} IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION;
typedef VOID(*PIDE_INTERRUPT_ROUTINE) (void);
typedef VOID(*PIDE_FINISHIO_ROUTINE) (void);
typedef BOOLEAN(*PIDE_POLL_RESET_COMPLETE_ROUTINE) (void);
typedef VOID(*PIDE_TIMEOUT_EXPIRED_ROUTINE) (void);
typedef VOID(*PIDE_START_PACKET_ROUTINE) (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
typedef VOID(*PIDE_START_NEXT_PACKET_ROUTINE) (void);
typedef struct _IDE_CHANNEL_OBJECT
{
PIDE_INTERRUPT_ROUTINE InterruptRoutine;
PIDE_FINISHIO_ROUTINE FinishIoRoutine;
PIDE_POLL_RESET_COMPLETE_ROUTINE PollResetCompleteRoutine;
PIDE_TIMEOUT_EXPIRED_ROUTINE TimeoutExpiredRoutine;
PIDE_START_PACKET_ROUTINE StartPacketRoutine;
PIDE_START_NEXT_PACKET_ROUTINE StartNextPacketRoutine;
KIRQL InterruptIrql;
BOOLEAN ExpectingBusMasterInterrupt;
BOOLEAN StartPacketBusy;
BOOLEAN StartPacketRequested;
UCHAR Timeout;
UCHAR IoRetries;
UCHAR MaximumIoRetries;
PIRP CurrentIrp;
KDEVICE_QUEUE DeviceQueue;
ULONG PhysicalRegionDescriptorTablePhysical;
KDPC TimerDpc;
KDPC FinishDpc;
KTIMER Timer;
KINTERRUPT InterruptObject;
} IDE_CHANNEL_OBJECT, *PIDE_CHANNEL_OBJECT;
// ******************************************************************
// * Debug
// ******************************************************************

View File

@ -84,7 +84,7 @@ void InsertTailList(xboxkrnl::PLIST_ENTRY pListHead, xboxkrnl::PLIST_ENTRY pEntr
}
//#define RemoveEntryList(e) do { PLIST_ENTRY f = (e)->Flink, b = (e)->Blink; f->Blink = b; b->Flink = f; (e)->Flink = (e)->Blink = NULL; } while (0)
// Returns TRUE if the list has become empty after removing the element, FALSE otherwise.
xboxkrnl::BOOLEAN RemoveEntryList(xboxkrnl::PLIST_ENTRY pEntry)
{
@ -97,13 +97,13 @@ xboxkrnl::BOOLEAN RemoveEntryList(xboxkrnl::PLIST_ENTRY pEntry)
if (_EX_Flink != nullptr) {
_EX_Flink->Blink = _EX_Blink;
}
if (_EX_Blink != nullptr && _EX_Flink != nullptr) {
return (_EX_Flink == _EX_Blink);
}
// If we reach here then it means we have erroneously been called on a detached element. In this case,
// always report FALSE to avoid possible side effects
}
if (_EX_Blink != nullptr && _EX_Flink != nullptr) {
return (_EX_Flink == _EX_Blink);
}
// If we reach here then it means we have erroneously been called on a detached element. In this case,
// always report FALSE to avoid possible side effects
return FALSE;
}
@ -463,8 +463,7 @@ XBSYSAPI EXPORTNUM(163) xboxkrnl::VOID FASTCALL xboxkrnl::KiUnlockDispatcherData
// ******************************************************************
// * 0x0165 - IdexChannelObject
// ******************************************************************
// TODO : Determine size, structure & filling behind IdexChannelObject
XBSYSAPI EXPORTNUM(357) xboxkrnl::BYTE xboxkrnl::IdexChannelObject[0x100] = { };
XBSYSAPI EXPORTNUM(357) xboxkrnl::IDE_CHANNEL_OBJECT xboxkrnl::IdexChannelObject = { };
// ******************************************************************
// * 0x0169 - RtlSnprintf()

View File

@ -112,6 +112,8 @@ xboxkrnl::VOID xboxkrnl::KiInitSystem()
KiTimerTableListHead[i].Time.u.HighPart = 0xFFFFFFFF;
KiTimerTableListHead[i].Time.u.LowPart = 0;
}
InitializeListHead(&IdexChannelObject.DeviceQueue.DeviceListHead);
}
xboxkrnl::VOID xboxkrnl::KiTimerLock()