RtlNtStatusToDosError, for successes.
This commit is contained in:
parent
d5b8a2091a
commit
3e0db586c0
|
@ -535,6 +535,35 @@ SHIM_CALL _vsnprintf_shim(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint32_t xeRtlNtStatusToDosError(X_STATUS status) {
|
||||||
|
if (!status || (status & 0x20000000)) {
|
||||||
|
// Success.
|
||||||
|
return status;
|
||||||
|
} else if ((status & 0xF0000000) == 0xD0000000) {
|
||||||
|
// High bit doesn't matter.
|
||||||
|
status &= ~0x10000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO(benvanik): implement lookup table.
|
||||||
|
XELOGE("RtlNtStatusToDosError lookup NOT IMPLEMENTED");
|
||||||
|
|
||||||
|
return 317; // ERROR_MR_MID_NOT_FOUND
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SHIM_CALL RtlNtStatusToDosError_shim(
|
||||||
|
xe_ppc_state_t* ppc_state, KernelState* state) {
|
||||||
|
uint32_t status = SHIM_GET_ARG_32(0);
|
||||||
|
|
||||||
|
XELOGD(
|
||||||
|
"RtlNtStatusToDosError(%.4X)",
|
||||||
|
status);
|
||||||
|
|
||||||
|
uint32_t result = xeRtlNtStatusToDosError(status);
|
||||||
|
SHIM_SET_RETURN(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
uint32_t xeRtlImageXexHeaderField(uint32_t xex_header_base_ptr,
|
uint32_t xeRtlImageXexHeaderField(uint32_t xex_header_base_ptr,
|
||||||
uint32_t image_field) {
|
uint32_t image_field) {
|
||||||
KernelState* state = shared_kernel_state_;
|
KernelState* state = shared_kernel_state_;
|
||||||
|
@ -835,6 +864,8 @@ void xe::kernel::xboxkrnl::RegisterRtlExports(
|
||||||
|
|
||||||
SHIM_SET_MAPPING("xboxkrnl.exe", _vsnprintf, state);
|
SHIM_SET_MAPPING("xboxkrnl.exe", _vsnprintf, state);
|
||||||
|
|
||||||
|
SHIM_SET_MAPPING("xboxkrnl.exe", RtlNtStatusToDosError, state);
|
||||||
|
|
||||||
SHIM_SET_MAPPING("xboxkrnl.exe", RtlImageXexHeaderField, state);
|
SHIM_SET_MAPPING("xboxkrnl.exe", RtlImageXexHeaderField, state);
|
||||||
|
|
||||||
SHIM_SET_MAPPING("xboxkrnl.exe", RtlInitializeCriticalSection, state);
|
SHIM_SET_MAPPING("xboxkrnl.exe", RtlInitializeCriticalSection, state);
|
||||||
|
|
|
@ -36,6 +36,8 @@ void xeRtlFreeUnicodeString(uint32_t string_ptr);
|
||||||
X_STATUS xeRtlUnicodeStringToAnsiString(
|
X_STATUS xeRtlUnicodeStringToAnsiString(
|
||||||
uint32_t destination_ptr, uint32_t source_ptr, uint32_t alloc_dest);
|
uint32_t destination_ptr, uint32_t source_ptr, uint32_t alloc_dest);
|
||||||
|
|
||||||
|
uint32_t xeRtlNtStatusToDosError(X_STATUS status);
|
||||||
|
|
||||||
uint32_t xeRtlImageXexHeaderField(uint32_t xex_header_base_ptr,
|
uint32_t xeRtlImageXexHeaderField(uint32_t xex_header_base_ptr,
|
||||||
uint32_t image_field);
|
uint32_t image_field);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue