Implemented RtlExtendedMagicDivide

This commit is contained in:
PatrickvL 2016-12-26 13:33:51 +01:00
parent bcd6b98764
commit 7ced0be9e1
5 changed files with 55 additions and 2 deletions

View File

@ -209,7 +209,16 @@ XBSYSAPI EXPORTNUM(282) LARGE_INTEGER NTAPI RtlExtendedLargeIntegerDivide
IN PULONG Remainder // OUT? OPTIONAL?
);
XBSYSAPI VOID *RtlExtendedMagicDivide;
// ******************************************************************
// * 0x011B - RtlExtendedMagicDivide()
// ******************************************************************
XBSYSAPI EXPORTNUM(283) LARGE_INTEGER NTAPI RtlExtendedMagicDivide
(
IN LARGE_INTEGER Dividend,
IN LARGE_INTEGER MagicDivisor,
IN CCHAR ShiftCount
);
XBSYSAPI VOID *RtlFillMemory;
XBSYSAPI VOID *RtlFillMemoryUlong;

View File

@ -532,6 +532,38 @@ XBSYSAPI EXPORTNUM(282) xboxkrnl::LARGE_INTEGER NTAPI xboxkrnl::RtlExtendedLarge
RETURN(ret);
}
// ******************************************************************
// * 0x011B - RtlExtendedMagicDivide()
// ******************************************************************
XBSYSAPI EXPORTNUM(283) xboxkrnl::LARGE_INTEGER NTAPI xboxkrnl::RtlExtendedMagicDivide
(
IN LARGE_INTEGER Dividend,
IN LARGE_INTEGER MagicDivisor,
IN CCHAR ShiftCount
)
{
LOG_FUNC_BEGIN
LOG_FUNC_ARG(Dividend)
LOG_FUNC_ARG(MagicDivisor)
LOG_FUNC_ARG(ShiftCount)
LOG_FUNC_END;
LARGE_INTEGER ret;
// As long as there are no type casts for NtDll::LARGE_INTEGER to xboxkrnl::LARGE_INTEGER
// and back, just copy the only member manually :
// TODO : Simplify this by adding typecasts between NtDll and xboxkrnl versions of LARGE_INTEGER
NtDll::LARGE_INTEGER NtDividend;
NtDividend.QuadPart = Dividend.QuadPart;
NtDll::LARGE_INTEGER NtMagicDivisor;
NtMagicDivisor.QuadPart = MagicDivisor.QuadPart;
ret.QuadPart = NtDll::RtlExtendedMagicDivide(NtDividend, NtMagicDivisor, (NtDll::CCHAR)ShiftCount).QuadPart;
RETURN(ret);
}
// ******************************************************************
// * 0x011E - RtlFreeAnsiString()
// ******************************************************************

View File

@ -125,6 +125,7 @@ IMPORT(RtlEqualString);
IMPORT(RtlEqualUnicodeString);
IMPORT(RtlExtendedIntegerMultiply);
IMPORT(RtlExtendedLargeIntegerDivide);
IMPORT(RtlExtendedMagicDivide);
IMPORT(RtlFreeAnsiString);
IMPORT(RtlFreeHeap);
IMPORT(RtlInitAnsiString);

View File

@ -1091,6 +1091,16 @@ typedef LARGE_INTEGER (NTAPI *FPTR_RtlExtendedLargeIntegerDivide)
OUT PULONG Remainder
);
// ******************************************************************
// * RtlExtendedMagicDivide
// ******************************************************************
typedef LARGE_INTEGER (NTAPI *FPTR_RtlExtendedMagicDivide)
(
IN LARGE_INTEGER Dividend,
IN LARGE_INTEGER MagicDivisor,
IN CCHAR ShiftCount
);
// ******************************************************************
// * NtDelayExecution
// ******************************************************************
@ -1743,6 +1753,7 @@ EXTERN(RtlEqualString);
EXTERN(RtlEqualUnicodeString);
EXTERN(RtlExtendedIntegerMultiply);
EXTERN(RtlExtendedLargeIntegerDivide);
EXTERN(RtlExtendedMagicDivide);
EXTERN(RtlFreeAnsiString);
EXTERN(RtlFreeHeap);
EXTERN(RtlInitAnsiString);

View File

@ -348,7 +348,7 @@ extern "C" CXBXKRNL_API uint32 CxbxKrnl_KernelThunkTable[379] =
(uint32)FUNC(&xboxkrnl::RtlEqualUnicodeString), // 0x0118 (280)
(uint32)FUNC(&xboxkrnl::RtlExtendedIntegerMultiply), // 0x0119 (281)
(uint32)FUNC(&xboxkrnl::RtlExtendedLargeIntegerDivide), // 0x011A (282)
(uint32)PANIC(0x011B), // 0x011B (283) RtlExtendedMagicDivide
(uint32)FUNC(&xboxkrnl::RtlExtendedMagicDivide), // 0x011B (283)
(uint32)PANIC(0x011C), // 0x011C (284) RtlFillMemory
(uint32)PANIC(0x011D), // 0x011D (285) RtlFillMemoryUlong
(uint32)FUNC(&xboxkrnl::RtlFreeAnsiString), // 0x011E (286)