NtOpenFile/IoCreateFile

This commit is contained in:
Aaron Robinson 2003-04-06 20:07:36 +00:00
parent a0538fa45e
commit d2bcb2920b
7 changed files with 72 additions and 7 deletions

View File

@ -79,7 +79,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 d3d8.lib dinput8.lib dxguid.lib ntdll.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"Bin\Debug/Cxbx.dll" /pdbtype:sept /libpath:"Lib"
# ADD LINK32 d3d8.lib dinput8.lib dxguid.lib ntdll.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"libc" /pdbtype:sept /libpath:"Lib"
# SUBTRACT LINK32 /pdb:none
!ENDIF

View File

@ -483,9 +483,12 @@ EmuExe::EmuExe(Xbe *x_Xbe, DebugMode x_debug_mode, char *x_debug_filename) : Exe
*(uint32*)&m_bzSection[i][0x30] = dwVirtAddr + 0x38;
*(uint32*)&m_bzSection[i][0x34] = 0;
*(uint16*)&m_bzSection[i][0x38] = 0x0001;
memcpy(&m_bzSection[i][0x3A], "_EmuNoFunc@0\0\0cxbx.dll\0\0\0\0\0\0", 28);
#ifdef _DEBUG
memcpy(&m_bzSection[i][0x3A], "_EmuNoFunc@0\0\0CxbxKrnl.dll\0\0", 28);
#else
memcpy(&m_bzSection[i][0x3A], "_EmuNoFunc@0\0\0Cxbx.dll\0\0\0\0\0\0", 28);
#endif
// ******************************************************************
// * TLS Data
// ******************************************************************

View File

@ -69,8 +69,11 @@ bool Wnd::ProcessMessages()
// initialize window
if(!m_initialized)
{
#ifdef _DEBUG
HMODULE hCxbxDll = GetModuleHandle("CxbxKrnl.dll");
#else
HMODULE hCxbxDll = GetModuleHandle("Cxbx.dll");
#endif
m_initialized = true;
WNDCLASS wnd_class;

View File

@ -48,6 +48,8 @@ namespace xboxkrnl
#include "EmuShared.h"
#include "HLEDataBase.h"
#include <math.h>
// ******************************************************************
// * global / static
// ******************************************************************

View File

@ -120,7 +120,11 @@ void EmuRenderWindow(PVOID)
// * register window class
// ******************************************************************
{
#ifdef _DEBUG
HMODULE hCxbxDll = GetModuleHandle("CxbxKrnl.dll");
#else
HMODULE hCxbxDll = GetModuleHandle("Cxbx.dll");
#endif
WNDCLASSEX wc =
{

View File

@ -229,6 +229,53 @@ XBSYSAPI EXPORTNUM(49) VOID DECLSPEC_NORETURN xboxkrnl::HalReturnToFirmware
EmuSwapFS(); // Xbox FS
}
// ******************************************************************
// * 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
EmuSwapFS(); // Xbox FS
return STATUS_SUCCESS;
}
// ******************************************************************
// * 0x0063 - KeDelayExecutionThread
// ******************************************************************
@ -463,13 +510,17 @@ XBSYSAPI EXPORTNUM(202) NTSTATUS xboxkrnl::NtOpenFile
IN ULONG OpenOptions
)
{
EmuSwapFS(); // Win2k/XP FS
// 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)
// ******************************************************************
// * debug trace
// ******************************************************************
#ifdef _DEBUG_TRACE
{
EmuSwapFS(); // Win2k/XP FS
printf("EmuKrnl (0x%.08X): NtOpenFile\n"
"(\n"
" FileHandle : 0x%.08X\n"
@ -481,10 +532,12 @@ XBSYSAPI EXPORTNUM(202) NTSTATUS xboxkrnl::NtOpenFile
");\n",
GetCurrentThreadId(), FileHandle, DesiredAccess, ObjectAttributes,
IoStatusBlock, ShareAccess, OpenOptions);
EmuSwapFS(); // Xbox FS
}
#endif
EmuSwapFS(); // Xbox FS
xboxkrnl::IoCreateFile(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, 0, 0, ShareAccess, 1, OpenOptions, 0);
return STATUS_SUCCESS;
}

View File

@ -130,7 +130,7 @@ extern "C" CXBXKRNL_API uint32 KernelThunkTable[367] =
(uint32)PANIC(0x003F), // 0x003F (63)
(uint32)PANIC(0x0040), // 0x0040 (64)
(uint32)PANIC(0x0041), // 0x0041 (65)
(uint32)PANIC(0x0042), // 0x0042 (66)
(uint32)&xboxkrnl::IoCreateFile, // 0x0042 (66)
(uint32)PANIC(0x0043), // 0x0043 (67)
(uint32)PANIC(0x0044), // 0x0044 (68)
(uint32)PANIC(0x0045), // 0x0045 (69)