diff --git a/import/OpenXDK/include/xboxkrnl/rtl.h b/import/OpenXDK/include/xboxkrnl/rtl.h index 99dbdb512..b11c23d7e 100644 --- a/import/OpenXDK/include/xboxkrnl/rtl.h +++ b/import/OpenXDK/include/xboxkrnl/rtl.h @@ -168,7 +168,13 @@ XBSYSAPI EXPORTNUM(277) VOID NTAPI RtlEnterCriticalSection IN PRTL_CRITICAL_SECTION CriticalSection ); -XBSYSAPI VOID *RtlEnterCriticalSectionAndRegion; +// ****************************************************************** +// * 0x0116 - RtlEnterCriticalSectionAndRegion() +// ****************************************************************** +XBSYSAPI EXPORTNUM(278) VOID NTAPI RtlEnterCriticalSectionAndRegion +( + IN PRTL_CRITICAL_SECTION CriticalSection +); // ****************************************************************** // * 0x0117 - RtlEqualString() @@ -313,7 +319,13 @@ XBSYSAPI EXPORTNUM(294) VOID NTAPI RtlLeaveCriticalSection IN PRTL_CRITICAL_SECTION CriticalSection ); -XBSYSAPI VOID *RtlLeaveCriticalSectionAndRegion; +// ****************************************************************** +// * 0x0127 - RtlLeaveCriticalSectionAndRegion() +// ****************************************************************** +XBSYSAPI EXPORTNUM(295) VOID NTAPI RtlLeaveCriticalSectionAndRegion +( + IN PRTL_CRITICAL_SECTION CriticalSection +); // ****************************************************************** // * RtlLowerChar diff --git a/src/CxbxKrnl/EmuKrnlRtl.cpp b/src/CxbxKrnl/EmuKrnlRtl.cpp index 1b9b172a8..8fa1db0ab 100644 --- a/src/CxbxKrnl/EmuKrnlRtl.cpp +++ b/src/CxbxKrnl/EmuKrnlRtl.cpp @@ -436,6 +436,21 @@ XBSYSAPI EXPORTNUM(277) xboxkrnl::VOID NTAPI xboxkrnl::RtlEnterCriticalSection } } +// ****************************************************************** +// * 0x0116 - RtlEnterCriticalSectionAndRegion() +// ****************************************************************** +XBSYSAPI EXPORTNUM(278) xboxkrnl::VOID NTAPI xboxkrnl::RtlEnterCriticalSectionAndRegion +( + IN PRTL_CRITICAL_SECTION CriticalSection +) +{ + /** sorta pointless + LOG_FUNC_ONE_ARG(CriticalSection); + //*/ + + LOG_UNIMPLEMENTED(); +} + // ****************************************************************** // * 0x0117 - RtlEqualString() // ****************************************************************** @@ -753,6 +768,10 @@ XBSYSAPI EXPORTNUM(294) xboxkrnl::VOID NTAPI xboxkrnl::RtlLeaveCriticalSection return; } + /* sorta pointless + LOG_FUNC_ONE_ARG(CriticalSection); + //*/ + int iSection = FindCriticalSection(CriticalSection); if (iSection >= 0) @@ -764,12 +783,24 @@ XBSYSAPI EXPORTNUM(294) xboxkrnl::VOID NTAPI xboxkrnl::RtlLeaveCriticalSection CriticalSection->RecursionCount = GlobalCriticalSections[iSection].NativeCriticalSection.RecursionCount; CriticalSection->OwningThread = GlobalCriticalSections[iSection].NativeCriticalSection.OwningThread; } + // Note: We need to execute this before debug output to avoid trouble //NtDll::RtlLeaveCriticalSection((NtDll::_RTL_CRITICAL_SECTION*)CriticalSection); +} - /* sorta pointless +// ****************************************************************** +// * 0x0127 - RtlLeaveCriticalSectionAndRegion() +// ****************************************************************** +XBSYSAPI EXPORTNUM(295) xboxkrnl::VOID NTAPI xboxkrnl::RtlLeaveCriticalSectionAndRegion +( + IN PRTL_CRITICAL_SECTION CriticalSection +) +{ + /** sorta pointless LOG_FUNC_ONE_ARG(CriticalSection); //*/ + + LOG_UNIMPLEMENTED(); } // ****************************************************************** diff --git a/src/CxbxKrnl/KernelThunk.cpp b/src/CxbxKrnl/KernelThunk.cpp index 775714c46..26754590a 100644 --- a/src/CxbxKrnl/KernelThunk.cpp +++ b/src/CxbxKrnl/KernelThunk.cpp @@ -345,7 +345,7 @@ extern "C" CXBXKRNL_API uint32 CxbxKrnl_KernelThunkTable[379] = (uint32)FUNC(&xboxkrnl::RtlDowncaseUnicodeChar), // 0x0113 (275) (uint32)FUNC(&xboxkrnl::RtlDowncaseUnicodeString), // 0x0114 (276) (uint32)FUNC(&xboxkrnl::RtlEnterCriticalSection), // 0x0115 (277) - (uint32)PANIC(0x0116), // 0x0116 (278) RtlEnterCriticalSectionAndRegion + (uint32)FUNC(&xboxkrnl::RtlEnterCriticalSectionAndRegion), // 0x0116 (278) (uint32)FUNC(&xboxkrnl::RtlEqualString), // 0x0117 (279) (uint32)FUNC(&xboxkrnl::RtlEqualUnicodeString), // 0x0118 (280) (uint32)FUNC(&xboxkrnl::RtlExtendedIntegerMultiply), // 0x0119 (281) @@ -362,7 +362,7 @@ extern "C" CXBXKRNL_API uint32 CxbxKrnl_KernelThunkTable[379] = (uint32)FUNC(&xboxkrnl::RtlIntegerToChar), // 0x0124 (292) (uint32)FUNC(&xboxkrnl::RtlIntegerToUnicodeString), // 0x0125 (293) (uint32)FUNC(&xboxkrnl::RtlLeaveCriticalSection), // 0x0126 (294) - (uint32)PANIC(0x0127), // 0x0127 (295) RtlLeaveCriticalSectionAndRegion + (uint32)FUNC(&xboxkrnl::RtlLeaveCriticalSectionAndRegion), // 0x0127 (295) (uint32)FUNC(&xboxkrnl::RtlLowerChar), // 0x0128 (296) (uint32)FUNC(&xboxkrnl::RtlMapGenericMask), // 0x0129 (297) (uint32)FUNC(&xboxkrnl::RtlMoveMemory), // 0x012A (298)