2003-01-26 06:18:56 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// *
|
|
|
|
// * .,-::::: .,:: .::::::::. .,:: .:
|
|
|
|
// * ,;;;'````' `;;;, .,;; ;;;'';;' `;;;, .,;;
|
|
|
|
// * [[[ '[[,,[[' [[[__[[\. '[[,,[['
|
|
|
|
// * $$$ Y$$$P $$""""Y$$ Y$$$P
|
|
|
|
// * `88bo,__,o, oP"``"Yo, _88o,,od8P oP"``"Yo,
|
|
|
|
// * "YUMMMMMP",m" "Mm,""YUMMMP" ,m" "Mm,
|
|
|
|
// *
|
2003-03-27 06:23:58 +00:00
|
|
|
// * Cxbx->Win32->CxbxKrnl->EmuKrnl.cpp
|
2003-01-26 06:18:56 +00:00
|
|
|
// *
|
|
|
|
// * This file is part of the Cxbx project.
|
|
|
|
// *
|
|
|
|
// * Cxbx and Cxbe are free software; you can redistribute them
|
|
|
|
// * and/or modify them under the terms of the GNU General Public
|
|
|
|
// * License as published by the Free Software Foundation; either
|
|
|
|
// * version 2 of the license, or (at your option) any later version.
|
|
|
|
// *
|
|
|
|
// * This program is distributed in the hope that it will be useful,
|
|
|
|
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
// * GNU General Public License for more details.
|
|
|
|
// *
|
|
|
|
// * You should have recieved a copy of the GNU General Public License
|
|
|
|
// * along with this program; see the file COPYING.
|
|
|
|
// * If not, write to the Free Software Foundation, Inc.,
|
|
|
|
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
|
|
|
// *
|
|
|
|
// * (c) 2002-2003 Aaron Robinson <caustik@caustik.com>
|
|
|
|
// *
|
|
|
|
// * All rights reserved
|
|
|
|
// *
|
|
|
|
// ******************************************************************
|
2003-03-07 22:01:44 +00:00
|
|
|
#define _CXBXKRNL_INTERNAL
|
2003-01-26 06:18:56 +00:00
|
|
|
#define _XBOXKRNL_LOCAL_
|
|
|
|
|
2003-04-02 02:23:30 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * prevent name collisions
|
|
|
|
// ******************************************************************
|
|
|
|
namespace xboxkrnl
|
|
|
|
{
|
|
|
|
#include <xboxkrnl/xboxkrnl.h>
|
|
|
|
};
|
|
|
|
|
|
|
|
#include <stdio.h>
|
2003-01-28 07:28:18 +00:00
|
|
|
|
2003-03-07 22:01:44 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * prevent name collisions
|
|
|
|
// ******************************************************************
|
2003-01-26 06:18:56 +00:00
|
|
|
namespace xntdll
|
|
|
|
{
|
|
|
|
#include "xntdll.h"
|
|
|
|
};
|
|
|
|
|
2003-04-02 02:23:30 +00:00
|
|
|
#include "Emu.h"
|
|
|
|
#include "EmuFS.h"
|
2003-01-26 06:18:56 +00:00
|
|
|
|
2003-03-27 03:52:19 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * Loaded at run-time to avoid linker conflicts
|
|
|
|
// ******************************************************************
|
2003-04-05 09:03:02 +00:00
|
|
|
HMODULE hNtDll = GetModuleHandle("ntdll");
|
|
|
|
xntdll::FPTR_RtlInitAnsiString NT_RtlInitAnsiString = (xntdll::FPTR_RtlInitAnsiString)GetProcAddress(hNtDll, "RtlInitAnsiString");
|
|
|
|
xntdll::FPTR_RtlNtStatusToDosError NT_RtlNtStatusToDosError = (xntdll::FPTR_RtlNtStatusToDosError)GetProcAddress(hNtDll, "RtlNtStatusToDosError");
|
|
|
|
xntdll::FPTR_NtAllocateVirtualMemory NT_NtAllocateVirtualMemory = (xntdll::FPTR_NtAllocateVirtualMemory)GetProcAddress(hNtDll, "NtAllocateVirtualMemory");
|
|
|
|
xntdll::FPTR_NtClose NT_NtClose = (xntdll::FPTR_NtClose)GetProcAddress(hNtDll, "NtClose");
|
|
|
|
xntdll::FPTR_RtlInitializeCriticalSection NT_RtlInitializeCriticalSection = (xntdll::FPTR_RtlInitializeCriticalSection)GetProcAddress(hNtDll, "RtlInitializeCriticalSection");
|
|
|
|
xntdll::FPTR_RtlEnterCriticalSection NT_RtlEnterCriticalSection = (xntdll::FPTR_RtlEnterCriticalSection)GetProcAddress(hNtDll, "RtlEnterCriticalSection");
|
|
|
|
xntdll::FPTR_RtlLeaveCriticalSection NT_RtlLeaveCriticalSection = (xntdll::FPTR_RtlLeaveCriticalSection)GetProcAddress(hNtDll, "RtlLeaveCriticalSection");
|
2003-03-27 03:52:19 +00:00
|
|
|
|
2003-01-27 09:18:33 +00:00
|
|
|
// ******************************************************************
|
2003-04-05 09:03:02 +00:00
|
|
|
// * (Helper) PCSTProxyParam
|
2003-01-27 09:18:33 +00:00
|
|
|
// ******************************************************************
|
2003-04-05 09:03:02 +00:00
|
|
|
typedef struct _PCSTProxyParam
|
2003-01-27 09:18:33 +00:00
|
|
|
{
|
|
|
|
IN PVOID StartContext1;
|
|
|
|
IN PVOID StartContext2;
|
|
|
|
IN PVOID StartRoutine;
|
|
|
|
}
|
2003-04-05 09:03:02 +00:00
|
|
|
PCSTProxyParam;
|
2003-01-27 09:18:33 +00:00
|
|
|
|
|
|
|
// ******************************************************************
|
2003-04-05 09:03:02 +00:00
|
|
|
// * (Helper) PCSTProxy
|
2003-01-27 09:18:33 +00:00
|
|
|
// ******************************************************************
|
|
|
|
#pragma warning(push)
|
|
|
|
#pragma warning(disable: 4731) // disable ebp modification warning
|
2003-04-05 09:03:02 +00:00
|
|
|
DWORD WINAPI PCSTProxy
|
2003-01-27 09:18:33 +00:00
|
|
|
(
|
|
|
|
IN PVOID Parameter
|
|
|
|
)
|
|
|
|
{
|
2003-04-05 09:03:02 +00:00
|
|
|
PCSTProxyParam *iPCSTProxyParam = (PCSTProxyParam*)Parameter;
|
2003-01-27 09:18:33 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
uint32 StartContext1 = (uint32)iPCSTProxyParam->StartContext1;
|
|
|
|
uint32 StartContext2 = (uint32)iPCSTProxyParam->StartContext2;
|
|
|
|
uint32 StartRoutine = (uint32)iPCSTProxyParam->StartRoutine;
|
2003-01-27 09:18:33 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
delete iPCSTProxyParam;
|
2003-01-27 09:18:33 +00:00
|
|
|
|
2003-04-06 00:25:30 +00:00
|
|
|
EmuGenerateFS(g_TlsAdjust);
|
2003-01-31 18:10:38 +00:00
|
|
|
|
2003-02-01 08:49:41 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
2003-02-06 22:33:57 +00:00
|
|
|
#ifdef _DEBUG_TRACE
|
2003-02-01 08:49:41 +00:00
|
|
|
{
|
2003-04-05 09:03:02 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): PCSTProxy\n"
|
2003-02-09 08:35:33 +00:00
|
|
|
"(\n"
|
|
|
|
" StartContext1 : 0x%.08X\n"
|
|
|
|
" StartContext2 : 0x%.08X\n"
|
|
|
|
" StartRoutine : 0x%.08X\n"
|
|
|
|
");\n",
|
2003-02-01 08:49:41 +00:00
|
|
|
GetCurrentThreadId(), StartContext1, StartContext2, StartRoutine);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-01-31 18:10:38 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * use the special calling convention
|
|
|
|
// ******************************************************************
|
2003-01-27 09:18:33 +00:00
|
|
|
__asm
|
|
|
|
{
|
|
|
|
mov esi, StartRoutine
|
2003-02-01 08:49:41 +00:00
|
|
|
push StartContext2
|
2003-02-06 05:32:40 +00:00
|
|
|
push StartContext1
|
|
|
|
push offset callComplete
|
2003-01-27 09:18:33 +00:00
|
|
|
lea ebp, [esp-4]
|
|
|
|
jmp near esi
|
2003-02-06 05:32:40 +00:00
|
|
|
|
|
|
|
callComplete:
|
|
|
|
|
|
|
|
nop
|
2003-01-27 09:18:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
#pragma warning(pop)
|
|
|
|
|
2003-01-26 06:18:56 +00:00
|
|
|
using namespace xboxkrnl;
|
|
|
|
|
2003-02-03 23:36:24 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * 0x0018 ExQueryNonVolatileSetting
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(24) NTSTATUS NTAPI xboxkrnl::ExQueryNonVolatileSetting
|
|
|
|
(
|
2003-02-06 05:32:40 +00:00
|
|
|
IN DWORD ValueIndex,
|
|
|
|
OUT DWORD *Type,
|
2003-02-03 23:36:24 +00:00
|
|
|
OUT PUCHAR Value,
|
|
|
|
IN SIZE_T ValueLength,
|
|
|
|
OUT PSIZE_T ResultLength OPTIONAL
|
|
|
|
)
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-02-03 23:36:24 +00:00
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
2003-02-06 22:33:57 +00:00
|
|
|
#ifdef _DEBUG_TRACE
|
2003-02-03 23:36:24 +00:00
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): ExQueryNonVolatileSetting\n"
|
2003-02-09 08:35:33 +00:00
|
|
|
"(\n"
|
|
|
|
" ValueIndex : 0x%.08X\n"
|
|
|
|
" Type : 0x%.08X\n"
|
|
|
|
" Value : 0x%.08X\n"
|
|
|
|
" ValueLength : 0x%.08X\n"
|
|
|
|
" ResultLength : 0x%.08X\n"
|
|
|
|
");\n",
|
2003-02-03 23:36:24 +00:00
|
|
|
GetCurrentThreadId(), ValueIndex, Type, Value, ValueLength, ResultLength);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2003-02-06 05:32:40 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * handle eeprom read
|
|
|
|
// ******************************************************************
|
|
|
|
switch(ValueIndex)
|
|
|
|
{
|
|
|
|
case EEPROM_MISC:
|
|
|
|
{
|
|
|
|
if(Type != 0)
|
|
|
|
*Type = 0x04;
|
|
|
|
|
|
|
|
if(Value != 0)
|
|
|
|
*Value = 0;
|
|
|
|
|
|
|
|
if(ResultLength != 0)
|
|
|
|
*ResultLength = 0x04;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): ExQueryNonVolatileSetting unknown ValueIndex : %.08X\n", ValueIndex);
|
2003-02-06 05:32:40 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-02-03 23:36:24 +00:00
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2003-01-31 22:15:41 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * 0x0031 - HalReturnToFirmware
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(49) VOID DECLSPEC_NORETURN xboxkrnl::HalReturnToFirmware
|
|
|
|
(
|
|
|
|
RETURN_FIRMWARE Routine
|
|
|
|
)
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-01-31 22:15:41 +00:00
|
|
|
|
2003-02-21 04:51:03 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
|
|
|
#ifdef _DEBUG_TRACE
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): HalReturnToFirmware\n"
|
2003-02-21 04:51:03 +00:00
|
|
|
"(\n"
|
|
|
|
" Routine : 0x%.08X\n"
|
|
|
|
");\n",
|
|
|
|
GetCurrentThreadId(), Routine);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
MessageBox(NULL, "Warning: XBE is quitting (HalReturnToFirmware).\n\nThis process may not terminate elegantly.", "Cxbx", MB_OK);
|
2003-02-21 04:51:03 +00:00
|
|
|
|
|
|
|
ExitProcess(0);
|
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-02-21 04:51:03 +00:00
|
|
|
}
|
2003-01-31 22:15:41 +00:00
|
|
|
|
2003-04-06 20:07:36 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * 0x0042 - IoCreateFile
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(66) NTSTATUS NTAPI xboxkrnl::IoCreateFile
|
|
|
|
(
|
|
|
|
OUT PHANDLE FileHandle,
|
|
|
|
IN ACCESS_MASK DesiredAccess,
|
|
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
|
|
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
|
|
|
IN PLARGE_INTEGER AllocationSize,
|
|
|
|
IN ULONG FileAttributes,
|
|
|
|
IN ULONG ShareAccess,
|
|
|
|
IN ULONG Disposition,
|
|
|
|
IN ULONG CreateOptions,
|
|
|
|
IN ULONG Options
|
|
|
|
)
|
|
|
|
{
|
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
|
|
|
#ifdef _DEBUG_TRACE
|
|
|
|
{
|
|
|
|
printf("EmuKrnl (0x%.08X): IoCreateFile\n"
|
|
|
|
"(\n"
|
|
|
|
" FileHandle : 0x%.08X\n"
|
|
|
|
" DesiredAccess : 0x%.08X\n"
|
|
|
|
" ObjectAttributes : 0x%.08X\n"
|
|
|
|
" IoStatusBlock : 0x%.08X\n"
|
|
|
|
" AllocationSize : 0x%.08X\n"
|
|
|
|
" FileAttributes : 0x%.08X\n"
|
|
|
|
" ShareAccess : 0x%.08X\n"
|
|
|
|
" Disposition : 0x%.08X\n"
|
|
|
|
" CreateOptions : 0x%.08X\n"
|
|
|
|
" Options : 0x%.08X\n"
|
|
|
|
");\n",
|
|
|
|
GetCurrentThreadId(), FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock,
|
|
|
|
AllocationSize, FileAttributes, ShareAccess, Disposition, CreateOptions, Options);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2003-04-06 21:12:41 +00:00
|
|
|
_asm int 3
|
|
|
|
|
2003-04-06 20:07:36 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2003-02-21 04:51:03 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * 0x0063 - KeDelayExecutionThread
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(99) NTSTATUS NTAPI xboxkrnl::KeDelayExecutionThread
|
|
|
|
(
|
|
|
|
IN KPROCESSOR_MODE WaitMode,
|
|
|
|
IN BOOLEAN Alertable,
|
|
|
|
IN PLARGE_INTEGER Interval
|
|
|
|
)
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-02-21 04:51:03 +00:00
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
|
|
|
#ifdef _DEBUG_TRACE
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): KeDelayExecutionThread\n"
|
2003-02-21 04:51:03 +00:00
|
|
|
"(\n"
|
|
|
|
" WaitMode : 0x%.08X\n"
|
|
|
|
" Alertable : 0x%.08X\n"
|
|
|
|
" Interval : 0x%.08X\n"
|
|
|
|
");\n",
|
|
|
|
GetCurrentThreadId(), WaitMode, Alertable, Interval);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// TODO: Worry about Interval.LargePart if necessary
|
|
|
|
if((sint32)Interval->LowPart < 0)
|
|
|
|
Sleep(-(sint32)Interval->LowPart/10000);
|
|
|
|
else
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuPanic();
|
2003-02-21 04:51:03 +00:00
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-02-21 04:51:03 +00:00
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
2003-01-31 22:15:41 +00:00
|
|
|
}
|
|
|
|
|
2003-02-03 23:36:24 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * 0x006B - KeInitializeDpc
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(107) VOID NTAPI xboxkrnl::KeInitializeDpc
|
|
|
|
(
|
|
|
|
KDPC *Dpc,
|
|
|
|
PKDEFERRED_ROUTINE DeferredRoutine,
|
|
|
|
PVOID DeferredContext
|
|
|
|
)
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-02-03 23:36:24 +00:00
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
2003-02-06 22:33:57 +00:00
|
|
|
#ifdef _DEBUG_TRACE
|
2003-02-03 23:36:24 +00:00
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): KeInitializeDpc\n"
|
2003-02-09 08:35:33 +00:00
|
|
|
"(\n"
|
|
|
|
" Dpc : 0x%.08X\n"
|
|
|
|
" DeferredRoutine : 0x%.08X\n"
|
|
|
|
" DeferredContext : 0x%.08X\n"
|
|
|
|
");\n",
|
2003-02-03 23:36:24 +00:00
|
|
|
GetCurrentThreadId(), Dpc, DeferredRoutine, DeferredContext);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2003-02-06 05:32:40 +00:00
|
|
|
Dpc->Number = 0;
|
|
|
|
Dpc->DeferredRoutine = DeferredRoutine;
|
|
|
|
Dpc->Type = DpcObject;
|
|
|
|
Dpc->DeferredContext = DeferredContext;
|
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-02-03 23:36:24 +00:00
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * 0x0071 - KeInitializeTimerEx
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(113) VOID NTAPI xboxkrnl::KeInitializeTimerEx
|
|
|
|
(
|
|
|
|
IN PKTIMER Timer,
|
|
|
|
IN TIMER_TYPE Type
|
|
|
|
)
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-02-03 23:36:24 +00:00
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
2003-02-06 22:33:57 +00:00
|
|
|
#ifdef _DEBUG_TRACE
|
2003-02-03 23:36:24 +00:00
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): KeInitializeTimerEx\n"
|
2003-02-09 08:35:33 +00:00
|
|
|
"(\n"
|
|
|
|
" Timer : 0x%.08X\n"
|
|
|
|
" Type : 0x%.08X\n"
|
|
|
|
");\n",
|
2003-02-03 23:36:24 +00:00
|
|
|
GetCurrentThreadId(), Timer, Type);
|
|
|
|
}
|
|
|
|
#endif
|
2003-02-06 05:32:40 +00:00
|
|
|
|
|
|
|
Timer->Header.Type = Type + 8;
|
|
|
|
Timer->Header.Inserted = 0;
|
|
|
|
Timer->Header.Size = sizeof(*Timer) / sizeof(ULONG);
|
|
|
|
Timer->Header.SignalState = 0;
|
|
|
|
Timer->TimerListEntry.Blink = NULL;
|
|
|
|
Timer->TimerListEntry.Flink = NULL;
|
|
|
|
Timer->Header.WaitListHead.Flink = &Timer->Header.WaitListHead;
|
|
|
|
Timer->Header.WaitListHead.Blink = &Timer->Header.WaitListHead;
|
|
|
|
Timer->DueTime.QuadPart = 0;
|
|
|
|
Timer->Period = 0;
|
2003-02-03 23:36:24 +00:00
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-02-03 23:36:24 +00:00
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2003-02-06 08:55:36 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * 0x0095 - KeSetTimer
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(149) xboxkrnl::BOOLEAN NTAPI xboxkrnl::KeSetTimer
|
|
|
|
(
|
|
|
|
IN PKTIMER Timer,
|
|
|
|
IN LARGE_INTEGER DueTime,
|
|
|
|
IN PKDPC Dpc OPTIONAL
|
|
|
|
)
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-02-06 08:55:36 +00:00
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
2003-02-06 22:33:57 +00:00
|
|
|
#ifdef _DEBUG_TRACE
|
2003-02-06 08:55:36 +00:00
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): KeSetTimer\n"
|
2003-02-09 08:35:33 +00:00
|
|
|
"(\n"
|
|
|
|
" Timer : 0x%.08X\n"
|
|
|
|
" DueTime : 0x%I64X\n"
|
|
|
|
" Dpc : 0x%.08X\n"
|
|
|
|
");\n",
|
2003-02-06 08:55:36 +00:00
|
|
|
GetCurrentThreadId(), Timer, DueTime, Dpc);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-02-06 08:55:36 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
return TRUE;
|
2003-02-06 08:55:36 +00:00
|
|
|
}
|
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * 0x00A4 - LaunchDataPage (actually a pointer)
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(164) xboxkrnl::DWORD xboxkrnl::LaunchDataPage = 0;
|
|
|
|
|
2003-02-06 08:55:36 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * 0x00B8 - NtAllocateVirtualMemory
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(184) NTSTATUS xboxkrnl::NtAllocateVirtualMemory
|
|
|
|
(
|
|
|
|
IN OUT PVOID *BaseAddress,
|
|
|
|
IN ULONG ZeroBits,
|
2003-04-05 09:03:02 +00:00
|
|
|
IN OUT PULONG AllocationSize,
|
2003-02-06 08:55:36 +00:00
|
|
|
IN DWORD AllocationType,
|
|
|
|
IN DWORD Protect
|
|
|
|
)
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-02-06 08:55:36 +00:00
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
2003-02-06 22:33:57 +00:00
|
|
|
#ifdef _DEBUG_TRACE
|
2003-02-06 08:55:36 +00:00
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): NtAllocateVirtualMemory\n"
|
2003-02-09 08:35:33 +00:00
|
|
|
"(\n"
|
|
|
|
" BaseAddress : 0x%.08X\n"
|
|
|
|
" ZeroBits : 0x%.08X\n"
|
|
|
|
" AllocationSize : 0x%.08X\n"
|
|
|
|
" AllocationType : 0x%.08X\n"
|
|
|
|
" Protect : 0x%.08X\n"
|
|
|
|
");\n",
|
2003-02-06 08:55:36 +00:00
|
|
|
GetCurrentThreadId(), BaseAddress, ZeroBits, AllocationSize, AllocationType, Protect);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
NTSTATUS ret = NT_NtAllocateVirtualMemory(GetCurrentProcess(), BaseAddress, ZeroBits, AllocationSize, AllocationType, Protect);
|
2003-02-06 08:55:36 +00:00
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-02-06 08:55:36 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
return ret;
|
2003-02-06 08:55:36 +00:00
|
|
|
}
|
|
|
|
|
2003-01-26 06:18:56 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * 0x00BB - NtClose
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(187) NTSTATUS NTAPI xboxkrnl::NtClose
|
|
|
|
(
|
|
|
|
IN HANDLE Handle
|
|
|
|
)
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-01-31 18:10:38 +00:00
|
|
|
|
2003-01-27 09:18:33 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
2003-02-06 22:33:57 +00:00
|
|
|
#ifdef _DEBUG_TRACE
|
2003-01-27 09:18:33 +00:00
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): NtClose\n"
|
2003-02-09 08:35:33 +00:00
|
|
|
"(\n"
|
|
|
|
" Handle : 0x%.08X\n"
|
|
|
|
");\n",
|
2003-01-27 09:18:33 +00:00
|
|
|
GetCurrentThreadId(), Handle);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
NTSTATUS ret = NT_NtClose(Handle);
|
2003-01-27 09:18:33 +00:00
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-01-31 18:10:38 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
return ret;
|
2003-01-26 06:18:56 +00:00
|
|
|
}
|
|
|
|
|
2003-02-06 08:55:36 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * 0x00CA - NtOpenFile
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(202) NTSTATUS xboxkrnl::NtOpenFile
|
|
|
|
(
|
|
|
|
OUT PHANDLE FileHandle,
|
|
|
|
IN ACCESS_MASK DesiredAccess,
|
|
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
|
|
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
|
|
|
IN ULONG ShareAccess,
|
|
|
|
IN ULONG OpenOptions
|
|
|
|
)
|
|
|
|
{
|
2003-04-06 20:07:36 +00:00
|
|
|
// Note: Since we are simply redirecting to IoCreateFile, we do not
|
|
|
|
// want to swap FS registers like normal (except for when
|
|
|
|
// _DEBUG_TRACE is enabled)
|
2003-02-06 08:55:36 +00:00
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
2003-02-06 22:33:57 +00:00
|
|
|
#ifdef _DEBUG_TRACE
|
2003-02-06 08:55:36 +00:00
|
|
|
{
|
2003-04-06 20:07:36 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): NtOpenFile\n"
|
2003-02-09 08:35:33 +00:00
|
|
|
"(\n"
|
|
|
|
" FileHandle : 0x%.08X\n"
|
|
|
|
" DesiredAccess : 0x%.08X\n"
|
|
|
|
" ObjectAttributes : 0x%.08X\n"
|
|
|
|
" IoStatusBlock : 0x%.08X\n"
|
|
|
|
" ShareAccess : 0x%.08X\n"
|
|
|
|
" OpenOptions : 0x%.08X\n"
|
|
|
|
");\n",
|
2003-02-06 08:55:36 +00:00
|
|
|
GetCurrentThreadId(), FileHandle, DesiredAccess, ObjectAttributes,
|
|
|
|
IoStatusBlock, ShareAccess, OpenOptions);
|
2003-04-06 20:07:36 +00:00
|
|
|
|
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-02-06 08:55:36 +00:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2003-04-06 20:07:36 +00:00
|
|
|
xboxkrnl::IoCreateFile(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, 0, 0, ShareAccess, 1, OpenOptions, 0);
|
2003-02-06 08:55:36 +00:00
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * 0x00DA - NtQueryVolumeInformationFile
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(218) NTSTATUS NTAPI xboxkrnl::NtQueryVolumeInformationFile
|
|
|
|
(
|
|
|
|
IN HANDLE FileHandle,
|
|
|
|
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
|
|
|
OUT PVOID FileInformation,
|
|
|
|
IN ULONG Length,
|
|
|
|
IN FS_INFORMATION_CLASS FileInformationClass
|
|
|
|
)
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-02-06 08:55:36 +00:00
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
2003-02-06 22:33:57 +00:00
|
|
|
#ifdef _DEBUG_TRACE
|
2003-02-06 08:55:36 +00:00
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): NtQueryVolumeInformationFile\n"
|
2003-02-09 08:35:33 +00:00
|
|
|
"(\n"
|
|
|
|
" FileHandle : 0x%.08X\n"
|
|
|
|
" IoStatusBlock : 0x%.08X\n"
|
|
|
|
" FileInformation : 0x%.08X\n"
|
|
|
|
" Length : 0x%.08X\n"
|
|
|
|
" FileInformationClass: 0x%.08X\n"
|
|
|
|
");\n",
|
2003-02-06 08:55:36 +00:00
|
|
|
GetCurrentThreadId(), FileHandle, IoStatusBlock, FileInformation,
|
|
|
|
Length, FileInformationClass);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-02-06 08:55:36 +00:00
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2003-01-26 06:18:56 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * 0x00FF - PsCreateSystemThreadEx
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(255) NTSTATUS NTAPI xboxkrnl::PsCreateSystemThreadEx
|
|
|
|
(
|
|
|
|
OUT PHANDLE ThreadHandle,
|
|
|
|
IN ULONG ThreadExtraSize,
|
|
|
|
IN ULONG KernelStackSize,
|
|
|
|
IN ULONG TlsDataSize,
|
|
|
|
OUT PULONG ThreadId OPTIONAL,
|
|
|
|
IN PVOID StartContext1,
|
|
|
|
IN PVOID StartContext2,
|
|
|
|
IN BOOLEAN CreateSuspended,
|
|
|
|
IN BOOLEAN DebugStack,
|
|
|
|
IN PKSTART_ROUTINE StartRoutine
|
|
|
|
)
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-01-31 18:10:38 +00:00
|
|
|
|
2003-01-27 04:27:04 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
2003-02-06 22:33:57 +00:00
|
|
|
#ifdef _DEBUG_TRACE
|
2003-01-27 04:27:04 +00:00
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): PsCreateSystemThreadEx\n"
|
2003-02-09 08:35:33 +00:00
|
|
|
"(\n"
|
|
|
|
" ThreadHandle : 0x%.08X\n"
|
|
|
|
" ThreadExtraSize : 0x%.08X\n"
|
|
|
|
" KernelStackSize : 0x%.08X\n"
|
|
|
|
" TlsDataSize : 0x%.08X\n"
|
|
|
|
" ThreadId : 0x%.08X\n"
|
|
|
|
" StartContext1 : 0x%.08X\n"
|
|
|
|
" StartContext2 : 0x%.08X\n"
|
|
|
|
" CreateSuspended : 0x%.08X\n"
|
|
|
|
" DebugStack : 0x%.08X\n"
|
|
|
|
" StartRoutine : 0x%.08X\n"
|
|
|
|
");\n",
|
2003-01-27 09:18:33 +00:00
|
|
|
GetCurrentThreadId(), ThreadHandle, ThreadExtraSize, KernelStackSize, TlsDataSize, ThreadId,
|
2003-01-27 04:27:04 +00:00
|
|
|
StartContext1, StartContext2, CreateSuspended, DebugStack, StartRoutine);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * create thread, using our special proxy technique
|
|
|
|
// ******************************************************************
|
|
|
|
{
|
|
|
|
DWORD dwThreadId;
|
2003-01-27 09:18:33 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
// PCSTProxy is responsible for cleaning up this pointer
|
|
|
|
::PCSTProxyParam *iPCSTProxyParam = new ::PCSTProxyParam();
|
2003-01-27 09:18:33 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
iPCSTProxyParam->StartContext1 = StartContext1;
|
|
|
|
iPCSTProxyParam->StartContext2 = StartContext2;
|
|
|
|
iPCSTProxyParam->StartRoutine = StartRoutine;
|
2003-01-27 09:18:33 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
*ThreadHandle = CreateThread(NULL, NULL, &PCSTProxy, iPCSTProxyParam, NULL, &dwThreadId);
|
2003-01-27 09:18:33 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
if(ThreadId != NULL)
|
|
|
|
*ThreadId = dwThreadId;
|
|
|
|
}
|
2003-01-27 04:27:04 +00:00
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-01-31 18:10:38 +00:00
|
|
|
|
2003-01-26 06:18:56 +00:00
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ******************************************************************
|
2003-01-31 22:15:41 +00:00
|
|
|
// * 0x0115 RtlEnterCriticalSection
|
2003-01-26 06:18:56 +00:00
|
|
|
// ******************************************************************
|
2003-02-01 08:49:41 +00:00
|
|
|
XBSYSAPI EXPORTNUM(277) VOID NTAPI xboxkrnl::RtlEnterCriticalSection
|
|
|
|
(
|
|
|
|
IN PRTL_CRITICAL_SECTION CriticalSection
|
|
|
|
)
|
2003-01-26 06:18:56 +00:00
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-01-31 18:10:38 +00:00
|
|
|
|
2003-01-31 22:15:41 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
2003-02-06 22:33:57 +00:00
|
|
|
#ifdef _DEBUG_TRACE
|
2003-01-31 22:15:41 +00:00
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): RtlEnterCriticalSection\n"
|
2003-02-09 08:35:33 +00:00
|
|
|
"(\n"
|
|
|
|
" CriticalSection : 0x%.08X\n"
|
|
|
|
");\n",
|
2003-02-01 08:49:41 +00:00
|
|
|
GetCurrentThreadId(), CriticalSection);
|
2003-01-31 22:15:41 +00:00
|
|
|
}
|
|
|
|
#endif
|
2003-01-26 06:18:56 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
// This seems redundant, but xbox software doesn't always do it
|
|
|
|
NT_RtlInitializeCriticalSection((xntdll::_RTL_CRITICAL_SECTION*)CriticalSection);
|
2003-02-01 08:49:41 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
NT_RtlEnterCriticalSection((xntdll::_RTL_CRITICAL_SECTION*)CriticalSection);
|
2003-02-01 08:49:41 +00:00
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-04-05 09:03:02 +00:00
|
|
|
|
|
|
|
return;
|
2003-01-31 22:15:41 +00:00
|
|
|
}
|
2003-01-31 18:10:38 +00:00
|
|
|
|
2003-03-27 03:52:19 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * 0x0121 - RtlInitAnsiString
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(289) VOID NTAPI xboxkrnl::RtlInitAnsiString
|
|
|
|
(
|
|
|
|
IN OUT PANSI_STRING DestinationString,
|
|
|
|
IN PCSZ SourceString
|
|
|
|
)
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-03-27 03:52:19 +00:00
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
|
|
|
#ifdef _DEBUG_TRACE
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): RtlInitAnsiString\n"
|
2003-03-27 03:52:19 +00:00
|
|
|
"(\n"
|
|
|
|
" DestinationString : 0x%.08X\n"
|
|
|
|
" SourceString : 0x%.08X (\"%s\")\n"
|
|
|
|
");\n",
|
|
|
|
GetCurrentThreadId(), DestinationString, SourceString, SourceString);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
NT_RtlInitAnsiString((xntdll::PANSI_STRING)DestinationString, (xntdll::PCSZ)SourceString);
|
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-03-27 03:52:19 +00:00
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2003-02-06 08:55:36 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * 0x0123 - RtlInitializeCriticalSection
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(291) VOID NTAPI xboxkrnl::RtlInitializeCriticalSection
|
|
|
|
(
|
|
|
|
IN PRTL_CRITICAL_SECTION CriticalSection
|
|
|
|
)
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-02-06 08:55:36 +00:00
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
2003-02-06 22:33:57 +00:00
|
|
|
#ifdef _DEBUG_TRACE
|
2003-02-06 08:55:36 +00:00
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): RtlInitializeCriticalSection\n"
|
2003-02-09 08:35:33 +00:00
|
|
|
"(\n"
|
|
|
|
" CriticalSection : 0x%.08X\n"
|
|
|
|
");\n",
|
2003-02-06 08:55:36 +00:00
|
|
|
GetCurrentThreadId(), CriticalSection);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
NT_RtlInitializeCriticalSection((xntdll::_RTL_CRITICAL_SECTION*)CriticalSection);
|
2003-02-06 08:55:36 +00:00
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-02-06 08:55:36 +00:00
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2003-01-31 22:15:41 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * 0x0126 RtlEnterCriticalSection
|
|
|
|
// ******************************************************************
|
2003-02-01 08:49:41 +00:00
|
|
|
XBSYSAPI EXPORTNUM(294) VOID NTAPI xboxkrnl::RtlLeaveCriticalSection
|
|
|
|
(
|
|
|
|
IN PRTL_CRITICAL_SECTION CriticalSection
|
|
|
|
)
|
2003-01-31 22:15:41 +00:00
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-01-31 22:15:41 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
// Note: We need to execute this before debug output to avoid trouble
|
|
|
|
NT_RtlLeaveCriticalSection((xntdll::_RTL_CRITICAL_SECTION*)CriticalSection);
|
|
|
|
|
2003-01-31 22:15:41 +00:00
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
2003-02-06 22:33:57 +00:00
|
|
|
#ifdef _DEBUG_TRACE
|
2003-01-31 22:15:41 +00:00
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): RtlLeaveCriticalSection\n"
|
2003-02-09 08:35:33 +00:00
|
|
|
"(\n"
|
|
|
|
" CriticalSection : 0x%.08X\n"
|
|
|
|
");\n",
|
2003-02-01 08:49:41 +00:00
|
|
|
GetCurrentThreadId(), CriticalSection);
|
2003-01-31 22:15:41 +00:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-04-05 09:03:02 +00:00
|
|
|
|
|
|
|
return;
|
2003-02-03 23:36:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * 0x012D - RtlNtStatusToDosError
|
|
|
|
// ******************************************************************
|
|
|
|
XBSYSAPI EXPORTNUM(301) xboxkrnl::ULONG NTAPI xboxkrnl::RtlNtStatusToDosError
|
|
|
|
(
|
|
|
|
IN NTSTATUS Status
|
|
|
|
)
|
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Win2k/XP FS
|
2003-02-03 23:36:24 +00:00
|
|
|
|
|
|
|
// ******************************************************************
|
|
|
|
// * debug trace
|
|
|
|
// ******************************************************************
|
2003-02-06 22:33:57 +00:00
|
|
|
#ifdef _DEBUG_TRACE
|
2003-02-03 23:36:24 +00:00
|
|
|
{
|
2003-03-27 06:23:58 +00:00
|
|
|
printf("EmuKrnl (0x%.08X): RtlNtStatusToDosError\n"
|
2003-02-09 08:35:33 +00:00
|
|
|
"(\n"
|
|
|
|
" Status : 0x%.08X\n"
|
|
|
|
");\n",
|
2003-02-03 23:36:24 +00:00
|
|
|
GetCurrentThreadId(), Status);
|
|
|
|
}
|
|
|
|
#endif
|
2003-02-01 08:49:41 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
ULONG ret = NT_RtlNtStatusToDosError(Status);
|
|
|
|
|
2003-03-27 06:23:58 +00:00
|
|
|
EmuSwapFS(); // Xbox FS
|
2003-02-03 23:36:24 +00:00
|
|
|
|
2003-04-05 09:03:02 +00:00
|
|
|
return ret;
|
2003-01-26 06:18:56 +00:00
|
|
|
}
|