commit
3f9fbae0ab
|
@ -269,10 +269,31 @@ XBSYSAPI EXPORTNUM(138) LONG NTAPI KeResetEvent
|
|||
IN PRKEVENT Event
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *KeRestoreFloatingPointState;
|
||||
XBSYSAPI VOID *KeResumeThread;
|
||||
// ******************************************************************
|
||||
// * 0x008B - KeRestoreFloatingPointState()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(139) NTSTATUS NTAPI KeRestoreFloatingPointState
|
||||
(
|
||||
IN PKFLOATING_SAVE PublicFloatSave
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x008C - KeResumeThread()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(140) ULONG NTAPI KeResumeThread
|
||||
(
|
||||
IN PKTHREAD Thread
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *KeRundownQueue;
|
||||
XBSYSAPI VOID *KeSaveFloatingPointState;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x008E - KeSaveFloatingPointState()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(142) NTSTATUS NTAPI KeSaveFloatingPointState
|
||||
(
|
||||
OUT PKFLOATING_SAVE PublicFloatSave
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x008F - KeSetBasePriorityThread()
|
||||
|
@ -336,7 +357,14 @@ XBSYSAPI EXPORTNUM(151) VOID NTAPI KeStallExecutionProcessor
|
|||
IN ULONG MicroSeconds
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *KeSuspendThread;
|
||||
// ******************************************************************
|
||||
// * 0x0098 - KeSuspendThread()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(152) ULONG NTAPI KeSuspendThread
|
||||
(
|
||||
IN PKTHREAD Thread
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *KeSynchronizeExecution;
|
||||
XBSYSAPI VOID *KeSystemTime;
|
||||
XBSYSAPI VOID *KeTestAlertThread;
|
||||
|
|
|
@ -41,7 +41,13 @@ XBSYSAPI EXPORTNUM(255) NTSTATUS NTAPI PsCreateSystemThreadEx
|
|||
IN PKSYSTEM_ROUTINE SystemRoutine OPTIONAL
|
||||
);
|
||||
|
||||
XBSYSAPI VOID *PsQueryStatistics;
|
||||
// ******************************************************************
|
||||
// * 0x0100 - PsQueryStatistics()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(256) NTSTATUS NTAPI PsQueryStatistics
|
||||
(
|
||||
IN OUT PPS_STATISTICS ProcessStatistics
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * PsSetCreateThreadNotifyRoutine
|
||||
|
|
|
@ -1273,10 +1273,12 @@ KEVENT, *PKEVENT, *PRKEVENT; // even with undefined RESTRICTED_POINTER, this doe
|
|||
// ******************************************************************
|
||||
// EVENT_BASIC_INFORMATION - same as Windows
|
||||
// ******************************************************************
|
||||
typedef struct _EVENT_BASIC_INFORMATION {
|
||||
typedef struct _EVENT_BASIC_INFORMATION
|
||||
{
|
||||
EVENT_TYPE EventType;
|
||||
LONG EventState;
|
||||
} EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
|
||||
}
|
||||
EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
|
||||
|
||||
// ******************************************************************
|
||||
// KSEMAPHORE
|
||||
|
@ -1291,19 +1293,23 @@ KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE;
|
|||
// ******************************************************************
|
||||
// SEMAPHORE_BASIC_INFORMATION - same as Windows
|
||||
// ******************************************************************
|
||||
typedef struct _SEMAPHORE_BASIC_INFORMATION {
|
||||
typedef struct _SEMAPHORE_BASIC_INFORMATION
|
||||
{
|
||||
LONG CurrentCount;
|
||||
LONG MaximumCount;
|
||||
} SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
|
||||
}
|
||||
SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
|
||||
|
||||
// ******************************************************************
|
||||
// MUTANT_BASIC_INFORMATION - same as Windows
|
||||
// ******************************************************************
|
||||
typedef struct _MUTANT_BASIC_INFORMATION {
|
||||
typedef struct _MUTANT_BASIC_INFORMATION
|
||||
{
|
||||
LONG CurrentCount;
|
||||
BOOLEAN OwnedByCaller;
|
||||
BOOLEAN AbandonedState;
|
||||
} MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
|
||||
}
|
||||
MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
|
||||
|
||||
// ******************************************************************
|
||||
// ERWLOCK
|
||||
|
@ -1521,6 +1527,24 @@ typedef struct _KDPC
|
|||
}
|
||||
KDPC, *PKDPC;
|
||||
|
||||
// ******************************************************************
|
||||
// * KFLOATING_SAVE
|
||||
// ******************************************************************
|
||||
// See NtDll::FLOATING_SAVE_AREA
|
||||
typedef struct _KFLOATING_SAVE
|
||||
{
|
||||
ULONG ControlWord;
|
||||
ULONG StatusWord;
|
||||
// NtDll contains ULONG TagWord here
|
||||
ULONG ErrorOffset;
|
||||
ULONG ErrorSelector;
|
||||
ULONG DataOffset;
|
||||
ULONG DataSelector;
|
||||
ULONG Cr0NpxState; // NtDll has RegisterArea[SIZE_OF_80387_REGISTERS];
|
||||
ULONG Spare1; // NtDll calls this Spare0
|
||||
}
|
||||
KFLOATING_SAVE, *PKFLOATING_SAVE;
|
||||
|
||||
// ******************************************************************
|
||||
// * KOBJECTS
|
||||
// ******************************************************************
|
||||
|
@ -1535,7 +1559,7 @@ typedef enum _KOBJECTS
|
|||
KOBJECTS, *PKOBJECTS;
|
||||
|
||||
// ******************************************************************
|
||||
// * KINTERRUPR
|
||||
// * KINTERRUPT
|
||||
// ******************************************************************
|
||||
typedef struct _KINTERRUPT
|
||||
{
|
||||
|
@ -1583,6 +1607,17 @@ typedef enum _KINTERRUPT_MODE
|
|||
}
|
||||
KINTERRUPT_MODE;
|
||||
|
||||
// ******************************************************************
|
||||
// * PS_STATISTICS
|
||||
// ******************************************************************
|
||||
typedef struct _PS_STATISTICS
|
||||
{
|
||||
ULONG Length;
|
||||
ULONG ThreadCount;
|
||||
ULONG HandleCount;
|
||||
}
|
||||
PS_STATISTICS, *PPS_STATISTICS;
|
||||
|
||||
// ******************************************************************
|
||||
// * RTL_CRITICAL_SECTION
|
||||
// ******************************************************************
|
||||
|
|
|
@ -378,7 +378,7 @@ XBSYSAPI EXPORTNUM(253) xboxkrnl::NTSTATUS NTAPI xboxkrnl::PhyInitialize
|
|||
// ******************************************************************
|
||||
// * 0x0165 - IdexChannelObject
|
||||
// ******************************************************************
|
||||
// TODO : Determine size, structure & filling behind this
|
||||
// TODO : Determine size, structure & filling behind IdexChannelObject
|
||||
XBSYSAPI EXPORTNUM(357) xboxkrnl::BYTE xboxkrnl::IdexChannelObject[0x100] = { };
|
||||
|
||||
// ******************************************************************
|
||||
|
|
|
@ -125,9 +125,10 @@ XBSYSAPI EXPORTNUM(15) xboxkrnl::PVOID NTAPI xboxkrnl::ExAllocatePoolWithTag
|
|||
LOG_FUNC_ARG(Tag)
|
||||
LOG_FUNC_END;
|
||||
|
||||
// TODO: Actually implement this
|
||||
PVOID pRet = CxbxCalloc(1, NumberOfBytes); // Clear, to prevent side-effects on random contents
|
||||
|
||||
LOG_INCOMPLETE(); // TODO : Actually implement ExAllocatePoolWithTag
|
||||
|
||||
RETURN(pRet);
|
||||
}
|
||||
|
||||
|
|
|
@ -576,7 +576,7 @@ XBSYSAPI EXPORTNUM(360) xboxkrnl::NTSTATUS NTAPI xboxkrnl::HalInitiateShutdown
|
|||
// * 0x016D - HalEnableSecureTrayEject()
|
||||
// ******************************************************************
|
||||
// Notifies the SMBUS that ejecting the DVD-ROM should not reset the system.
|
||||
// Note that this function can't really be called directly...
|
||||
// Note that HalEnableSecureTrayEject can't really be called directly...
|
||||
//
|
||||
// New to the XBOX.
|
||||
// Source:XBMC Undocumented.h
|
||||
|
|
|
@ -788,7 +788,7 @@ XBSYSAPI EXPORTNUM(122) xboxkrnl::VOID NTAPI xboxkrnl::KeLeaveCriticalRegion
|
|||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(125) xboxkrnl::ULONGLONG NTAPI xboxkrnl::KeQueryInterruptTime(void)
|
||||
{
|
||||
// TODO : Some software might call this often and fill the log quickly,
|
||||
// TODO : Some software might call KeQueryInterruptTime often and fill the log quickly,
|
||||
// in which case we should not LOG_FUNC nor RETURN (use normal return instead).
|
||||
LOG_FUNC();
|
||||
|
||||
|
@ -960,6 +960,57 @@ XBSYSAPI EXPORTNUM(138) xboxkrnl::LONG NTAPI xboxkrnl::KeResetEvent
|
|||
return ret;
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x008B - KeRestoreFloatingPointState()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(139) xboxkrnl::NTSTATUS NTAPI xboxkrnl::KeRestoreFloatingPointState
|
||||
(
|
||||
IN PKFLOATING_SAVE PublicFloatSave
|
||||
)
|
||||
{
|
||||
LOG_FUNC_ONE_ARG(PublicFloatSave);
|
||||
|
||||
NTSTATUS ret = STATUS_SUCCESS;
|
||||
|
||||
LOG_UNIMPLEMENTED();
|
||||
|
||||
RETURN(ret);
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x008C - KeResumeThread()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(140) xboxkrnl::ULONG NTAPI xboxkrnl::KeResumeThread
|
||||
(
|
||||
IN PKTHREAD Thread
|
||||
)
|
||||
{
|
||||
LOG_FUNC_ONE_ARG(Thread);
|
||||
|
||||
NTSTATUS ret = STATUS_SUCCESS;
|
||||
|
||||
LOG_UNIMPLEMENTED();
|
||||
|
||||
RETURN(ret);
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x008E - KeSaveFloatingPointState()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(142) xboxkrnl::NTSTATUS NTAPI xboxkrnl::KeSaveFloatingPointState
|
||||
(
|
||||
OUT PKFLOATING_SAVE PublicFloatSave
|
||||
)
|
||||
{
|
||||
LOG_FUNC_ONE_ARG_OUT(PublicFloatSave);
|
||||
|
||||
NTSTATUS ret = STATUS_SUCCESS;
|
||||
|
||||
LOG_UNIMPLEMENTED();
|
||||
|
||||
RETURN(ret);
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x008F - KeSetBasePriorityThread()
|
||||
// ******************************************************************
|
||||
|
@ -1131,6 +1182,23 @@ XBSYSAPI EXPORTNUM(151) xboxkrnl::VOID NTAPI xboxkrnl::KeStallExecutionProcessor
|
|||
std::this_thread::sleep_for(std::chrono::microseconds(MicroSeconds));
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0098 - KeSuspendThread()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(152) xboxkrnl::ULONG NTAPI xboxkrnl::KeSuspendThread
|
||||
(
|
||||
IN PKTHREAD Thread
|
||||
)
|
||||
{
|
||||
LOG_FUNC_ONE_ARG(Thread);
|
||||
|
||||
NTSTATUS ret = STATUS_SUCCESS;
|
||||
|
||||
LOG_UNIMPLEMENTED();
|
||||
|
||||
RETURN(ret);
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x009A - KeSystemTime
|
||||
// ******************************************************************
|
||||
|
|
|
@ -478,7 +478,8 @@ XBSYSAPI EXPORTNUM(179) xboxkrnl::ULONG NTAPI xboxkrnl::MmQueryAddressProtect
|
|||
if (EmuCheckAllocationSize(VirtualAddress, false))
|
||||
Result = PAGE_READWRITE;
|
||||
|
||||
// TODO : Improve this implementation
|
||||
LOG_INCOMPLETE(); // TODO : Improve the MmQueryAddressProtect implementation
|
||||
|
||||
RETURN(Result);
|
||||
}
|
||||
|
||||
|
@ -492,7 +493,8 @@ XBSYSAPI EXPORTNUM(180) xboxkrnl::ULONG NTAPI xboxkrnl::MmQueryAllocationSize
|
|||
{
|
||||
LOG_FUNC_ONE_ARG(BaseAddress);
|
||||
|
||||
// TODO : Free PAGE_WRITECOMBINE differently
|
||||
LOG_INCOMPLETE(); // TODO : Free PAGE_WRITECOMBINE differently
|
||||
|
||||
ULONG uiSize = EmuCheckAllocationSize(BaseAddress, false);
|
||||
|
||||
RETURN(uiSize);
|
||||
|
|
|
@ -298,7 +298,7 @@ XBSYSAPI EXPORTNUM(190) xboxkrnl::NTSTATUS NTAPI xboxkrnl::NtCreateFile
|
|||
{
|
||||
LOG_FORWARD("IoCreateFile");
|
||||
|
||||
// TODO : How to base this on ObCreateObject, KeInitialize and ObInsertObject ?
|
||||
// TODO : How to base IoCreateFile on ObCreateObject, KeInitialize and ObInsertObject ?
|
||||
|
||||
return xboxkrnl::IoCreateFile(
|
||||
FileHandle,
|
||||
|
@ -1466,6 +1466,8 @@ XBSYSAPI EXPORTNUM(224) xboxkrnl::NTSTATUS NTAPI xboxkrnl::NtResumeThread
|
|||
ThreadHandle,
|
||||
PreviousSuspendCount);
|
||||
|
||||
// TODO : Once we do our own thread-switching, implement NtResumeThread using KetResumeThread
|
||||
|
||||
Sleep(10);
|
||||
|
||||
RETURN(ret);
|
||||
|
@ -1631,6 +1633,8 @@ XBSYSAPI EXPORTNUM(231) xboxkrnl::NTSTATUS NTAPI xboxkrnl::NtSuspendThread
|
|||
ThreadHandle,
|
||||
PreviousSuspendCount);
|
||||
|
||||
// TODO : Once we do our own thread-switching, implement NtSuspendThread using KeSuspendThread
|
||||
|
||||
RETURN(ret);
|
||||
}
|
||||
|
||||
|
|
|
@ -120,7 +120,7 @@ XBSYSAPI EXPORTNUM(239) xboxkrnl::NTSTATUS NTAPI xboxkrnl::ObCreateObject
|
|||
// TODO : For other Ob* API's it must become possible to get from
|
||||
// and Object(Header) address to the Name. Right now, this requires
|
||||
// adding ObjectSize to ObjectHeader. This won't be available outside
|
||||
// this function, so we need a better solution for this.
|
||||
// ObCreateObject, so we need a better solution for this.
|
||||
// It might be possible to put the OBJECT_STRING struct BEFORE the
|
||||
// ObjectHeader (and the NameBuffer itself before that), which would
|
||||
// make it possible to simply offset everything off an Object.
|
||||
|
|
|
@ -95,7 +95,7 @@ void LOG_PCSTProxy
|
|||
// PsCreateSystemThread proxy procedure
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable: 4731) // disable ebp modification warning
|
||||
// Dxbx Note : The signature of this function should conform to System.TThreadFunc !
|
||||
// Dxbx Note : The signature of PCSTProxy should conform to System.TThreadFunc !
|
||||
static unsigned int WINAPI PCSTProxy
|
||||
(
|
||||
IN PVOID Parameter
|
||||
|
@ -326,6 +326,27 @@ XBSYSAPI EXPORTNUM(255) xboxkrnl::NTSTATUS NTAPI xboxkrnl::PsCreateSystemThreadE
|
|||
RETURN(STATUS_SUCCESS);
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0100 - PsQueryStatistics()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(256) xboxkrnl::NTSTATUS NTAPI xboxkrnl::PsQueryStatistics
|
||||
(
|
||||
IN OUT PPS_STATISTICS ProcessStatistics
|
||||
)
|
||||
{
|
||||
NTSTATUS ret = STATUS_SUCCESS;
|
||||
|
||||
if (ProcessStatistics->Length == sizeof(PS_STATISTICS)) {
|
||||
LOG_INCOMPLETE(); // TODO : Return number of threads and handles that currently exist
|
||||
ProcessStatistics->ThreadCount = 1;
|
||||
ProcessStatistics->HandleCount = 1;
|
||||
} else {
|
||||
ret = STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
RETURN(ret);
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0101 - PsSetCreateThreadNotifyRoutine()
|
||||
// ******************************************************************
|
||||
|
|
|
@ -206,10 +206,10 @@ extern "C" CXBXKRNL_API uint32 CxbxKrnl_KernelThunkTable[379] =
|
|||
(uint32)PANIC(0x0088), // 0x0088 (136) KeRemoveQueue
|
||||
(uint32)FUNC(&xboxkrnl::KeRemoveQueueDpc), // 0x0089 (137)
|
||||
(uint32)FUNC(&xboxkrnl::KeResetEvent), // 0x008A (138)
|
||||
(uint32)PANIC(0x008B), // 0x008B (139) KeRestoreFloatingPointState
|
||||
(uint32)PANIC(0x008C), // 0x008C (140) KeResumeThread
|
||||
(uint32)FUNC(&xboxkrnl::KeRestoreFloatingPointState), // 0x008B (139)
|
||||
(uint32)FUNC(&xboxkrnl::KeResumeThread), // 0x008C (140)
|
||||
(uint32)PANIC(0x008D), // 0x008D (141) KeRundownQueue
|
||||
(uint32)PANIC(0x008E), // 0x008E (142) KeSaveFloatingPointState
|
||||
(uint32)FUNC(&xboxkrnl::KeSaveFloatingPointState), // 0x008E (142)
|
||||
(uint32)FUNC(&xboxkrnl::KeSetBasePriorityThread), // 0x008F (143)
|
||||
(uint32)PANIC(0x0090), // 0x0090 (144) KeSetDisableBoostThread
|
||||
(uint32)FUNC(&xboxkrnl::KeSetEvent), // 0x0091 (145)
|
||||
|
@ -219,7 +219,7 @@ extern "C" CXBXKRNL_API uint32 CxbxKrnl_KernelThunkTable[379] =
|
|||
(uint32)FUNC(&xboxkrnl::KeSetTimer), // 0x0095 (149)
|
||||
(uint32)FUNC(&xboxkrnl::KeSetTimerEx), // 0x0096 (150)
|
||||
(uint32)FUNC(&xboxkrnl::KeStallExecutionProcessor), // 0x0097 (151)
|
||||
(uint32)PANIC(0x0098), // 0x0098 (152) KeSuspendThread
|
||||
(uint32)FUNC(&xboxkrnl::KeSuspendThread), // 0x0098 (152)
|
||||
(uint32)PANIC(0x0099), // 0x0099 (153) KeSynchronizeExecution
|
||||
(uint32)VARIABLE(0x009A), // 0x009A (154) KeSystemTime (Set by ConnectWindowsTimersToThunkTable)
|
||||
(uint32)PANIC(0x009B), // 0x009B (155) KeTestAlertThread
|
||||
|
@ -323,7 +323,7 @@ extern "C" CXBXKRNL_API uint32 CxbxKrnl_KernelThunkTable[379] =
|
|||
(uint32)FUNC(&xboxkrnl::PhyInitialize), // 0x00FD (253)
|
||||
(uint32)FUNC(&xboxkrnl::PsCreateSystemThread), // 0x00FE (254)
|
||||
(uint32)FUNC(&xboxkrnl::PsCreateSystemThreadEx), // 0x00FF (255)
|
||||
(uint32)PANIC(0x0100), // 0x0100 (256) PsQueryStatistics
|
||||
(uint32)FUNC(&xboxkrnl::PsQueryStatistics), // 0x0100 (256)
|
||||
(uint32)FUNC(&xboxkrnl::PsSetCreateThreadNotifyRoutine), // 0x0101 (257)
|
||||
(uint32)FUNC(&xboxkrnl::PsTerminateSystemThread), // 0x0102 (258)
|
||||
(uint32)VARIABLE(&xboxkrnl::PsThreadObjectType), // 0x0103 (259)
|
||||
|
|
Loading…
Reference in New Issue