Stubbing out some file stuff.
This commit is contained in:
parent
6cda645911
commit
5176a7e7c9
|
@ -52,8 +52,10 @@ XboxkrnlModule::XboxkrnlModule(Runtime* runtime) :
|
||||||
|
|
||||||
// Register all exported functions.
|
// Register all exported functions.
|
||||||
RegisterDebugExports(resolver, kernel_state_.get());
|
RegisterDebugExports(resolver, kernel_state_.get());
|
||||||
|
RegisterFileExports(resolver, kernel_state_.get());
|
||||||
RegisterHalExports(resolver, kernel_state_.get());
|
RegisterHalExports(resolver, kernel_state_.get());
|
||||||
RegisterMemoryExports(resolver, kernel_state_.get());
|
RegisterMemoryExports(resolver, kernel_state_.get());
|
||||||
|
RegisterMiscExports(resolver, kernel_state_.get());
|
||||||
RegisterModuleExports(resolver, kernel_state_.get());
|
RegisterModuleExports(resolver, kernel_state_.get());
|
||||||
RegisterRtlExports(resolver, kernel_state_.get());
|
RegisterRtlExports(resolver, kernel_state_.get());
|
||||||
RegisterThreadingExports(resolver, kernel_state_.get());
|
RegisterThreadingExports(resolver, kernel_state_.get());
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
'sources': [
|
'sources': [
|
||||||
'xevent.cc',
|
'xevent.cc',
|
||||||
'xevent.h',
|
'xevent.h',
|
||||||
|
'xfile.cc',
|
||||||
|
'xfile.h',
|
||||||
'xmodule.cc',
|
'xmodule.cc',
|
||||||
'xmodule.h',
|
'xmodule.h',
|
||||||
'xthread.cc',
|
'xthread.cc',
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <xenia/kernel/modules/xboxkrnl/objects/xfile.h>
|
||||||
|
|
||||||
|
#include <xenia/kernel/modules/xboxkrnl/objects/xevent.h>
|
||||||
|
#include <xenia/kernel/modules/xboxkrnl/objects/xmodule.h>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace xe;
|
||||||
|
using namespace xe::kernel;
|
||||||
|
using namespace xe::kernel::xboxkrnl;
|
||||||
|
|
||||||
|
|
||||||
|
XFile::XFile(KernelState* kernel_state) :
|
||||||
|
XObject(kernel_state, kTypeFile) {
|
||||||
|
}
|
||||||
|
|
||||||
|
XFile::~XFile() {
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XENIA_KERNEL_MODULES_XBOXKRNL_XFILE_H_
|
||||||
|
#define XENIA_KERNEL_MODULES_XBOXKRNL_XFILE_H_
|
||||||
|
|
||||||
|
#include <xenia/kernel/modules/xboxkrnl/xobject.h>
|
||||||
|
|
||||||
|
#include <xenia/kernel/xbox.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace xe {
|
||||||
|
namespace kernel {
|
||||||
|
namespace xboxkrnl {
|
||||||
|
|
||||||
|
|
||||||
|
class XFile : public XObject {
|
||||||
|
public:
|
||||||
|
XFile(KernelState* kernel_state);
|
||||||
|
virtual ~XFile();
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace xboxkrnl
|
||||||
|
} // namespace kernel
|
||||||
|
} // namespace xe
|
||||||
|
|
||||||
|
|
||||||
|
#endif // XENIA_KERNEL_MODULES_XBOXKRNL_XFILE_H_
|
|
@ -9,10 +9,14 @@
|
||||||
'object_table.h',
|
'object_table.h',
|
||||||
'xboxkrnl_debug.cc',
|
'xboxkrnl_debug.cc',
|
||||||
'xboxkrnl_debug.h',
|
'xboxkrnl_debug.h',
|
||||||
|
'xboxkrnl_file.cc',
|
||||||
|
'xboxkrnl_file.h',
|
||||||
'xboxkrnl_hal.cc',
|
'xboxkrnl_hal.cc',
|
||||||
'xboxkrnl_hal.h',
|
'xboxkrnl_hal.h',
|
||||||
'xboxkrnl_memory.cc',
|
'xboxkrnl_memory.cc',
|
||||||
'xboxkrnl_memory.h',
|
'xboxkrnl_memory.h',
|
||||||
|
'xboxkrnl_misc.cc',
|
||||||
|
'xboxkrnl_misc.h',
|
||||||
'xboxkrnl_module.cc',
|
'xboxkrnl_module.cc',
|
||||||
'xboxkrnl_module.h',
|
'xboxkrnl_module.h',
|
||||||
'xboxkrnl_ordinals.h',
|
'xboxkrnl_ordinals.h',
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <xenia/kernel/modules/xboxkrnl/xboxkrnl_file.h>
|
||||||
|
|
||||||
|
#include <xenia/kernel/shim_utils.h>
|
||||||
|
#include <xenia/kernel/modules/xboxkrnl/kernel_state.h>
|
||||||
|
#include <xenia/kernel/modules/xboxkrnl/xboxkrnl_private.h>
|
||||||
|
#include <xenia/kernel/modules/xboxkrnl/objects/xthread.h>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace xe;
|
||||||
|
using namespace xe::kernel;
|
||||||
|
using namespace xe::kernel::xboxkrnl;
|
||||||
|
|
||||||
|
|
||||||
|
namespace xe {
|
||||||
|
namespace kernel {
|
||||||
|
namespace xboxkrnl {
|
||||||
|
|
||||||
|
|
||||||
|
X_STATUS xeNtCreateFile(
|
||||||
|
uint32_t* handle_ptr, uint32_t desired_access, void* object_attributes_ptr,
|
||||||
|
void* io_status_block_ptr, uint64_t allocation_size, uint32_t file_attributes,
|
||||||
|
uint32_t share_access, uint32_t creation_disposition) {
|
||||||
|
KernelState* state = shared_kernel_state_;
|
||||||
|
XEASSERTNOTNULL(state);
|
||||||
|
return X_STATUS_NO_SUCH_FILE;
|
||||||
|
}
|
||||||
|
|
||||||
|
SHIM_CALL NtCreateFile_shim(
|
||||||
|
xe_ppc_state_t* ppc_state, KernelState* state) {
|
||||||
|
uint32_t handle_ptr = SHIM_GET_ARG_32(0);
|
||||||
|
uint32_t desired_access = SHIM_GET_ARG_32(1);
|
||||||
|
uint32_t object_attributes_ptr = SHIM_GET_ARG_32(2);
|
||||||
|
uint32_t io_status_block_ptr = SHIM_GET_ARG_32(3);
|
||||||
|
uint32_t allocation_size_ptr = SHIM_GET_ARG_32(4);
|
||||||
|
uint32_t file_attributes = SHIM_GET_ARG_32(5);
|
||||||
|
uint32_t share_access = SHIM_GET_ARG_32(6);
|
||||||
|
uint32_t creation_disposition = SHIM_GET_ARG_32(7);
|
||||||
|
|
||||||
|
XELOGD(
|
||||||
|
"NtCreateFile(%.8X, %d, %.8X, %.8X, %.8X, %.8X, %.8X, %.8X)",
|
||||||
|
handle_ptr,
|
||||||
|
desired_access,
|
||||||
|
object_attributes_ptr,
|
||||||
|
io_status_block_ptr,
|
||||||
|
allocation_size_ptr,
|
||||||
|
file_attributes,
|
||||||
|
share_access,
|
||||||
|
creation_disposition);
|
||||||
|
|
||||||
|
// object_attributes is:
|
||||||
|
// void *root_directory
|
||||||
|
// _STRING *object_name <- probably initialized by previous RtlInitAnsiString call
|
||||||
|
// uint32_t attributes
|
||||||
|
|
||||||
|
uint64_t allocation_size = 0; // is this correct???
|
||||||
|
if (allocation_size_ptr != 0) {
|
||||||
|
allocation_size = SHIM_MEM_64(allocation_size_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t handle;
|
||||||
|
X_STATUS result = xeNtCreateFile(
|
||||||
|
&handle, desired_access, SHIM_MEM_ADDR(object_attributes_ptr), SHIM_MEM_ADDR(io_status_block_ptr),
|
||||||
|
allocation_size, file_attributes, share_access, creation_disposition);
|
||||||
|
|
||||||
|
if (XSUCCEEDED(result)) {
|
||||||
|
if (handle_ptr) {
|
||||||
|
SHIM_SET_MEM_32(handle_ptr, handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SHIM_SET_RETURN(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
SHIM_CALL NtQueryInformationFile_shim(
|
||||||
|
xe_ppc_state_t* ppc_state, KernelState* state) {
|
||||||
|
SHIM_SET_RETURN(X_STATUS_NO_SUCH_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
SHIM_CALL NtReadFile_shim(
|
||||||
|
xe_ppc_state_t* ppc_state, KernelState* state) {
|
||||||
|
SHIM_SET_RETURN(X_STATUS_NO_SUCH_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
SHIM_CALL NtQueryFullAttributesFile_shim(
|
||||||
|
xe_ppc_state_t* ppc_state, KernelState* state) {
|
||||||
|
SHIM_SET_RETURN(X_STATUS_NO_SUCH_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
SHIM_CALL NtClose_shim(
|
||||||
|
xe_ppc_state_t* ppc_state, KernelState* state) {
|
||||||
|
SHIM_SET_RETURN(X_STATUS_NO_SUCH_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace xboxkrnl
|
||||||
|
} // namespace kernel
|
||||||
|
} // namespace xe
|
||||||
|
|
||||||
|
|
||||||
|
void xe::kernel::xboxkrnl::RegisterFileExports(
|
||||||
|
ExportResolver* export_resolver, KernelState* state) {
|
||||||
|
SHIM_SET_MAPPING("xboxkrnl.exe", NtCreateFile, state);
|
||||||
|
SHIM_SET_MAPPING("xboxkrnl.exe", NtQueryInformationFile, state);
|
||||||
|
SHIM_SET_MAPPING("xboxkrnl.exe", NtReadFile, state);
|
||||||
|
SHIM_SET_MAPPING("xboxkrnl.exe", NtQueryFullAttributesFile, state);
|
||||||
|
SHIM_SET_MAPPING("xboxkrnl.exe", NtClose, state);
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XENIA_KERNEL_MODULES_XBOXKRNL_FILE_H_
|
||||||
|
#define XENIA_KERNEL_MODULES_XBOXKRNL_FILE_H_
|
||||||
|
|
||||||
|
#include <xenia/common.h>
|
||||||
|
#include <xenia/core.h>
|
||||||
|
|
||||||
|
#include <xenia/kernel/xbox.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace xe {
|
||||||
|
namespace kernel {
|
||||||
|
namespace xboxkrnl {
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace xboxkrnl
|
||||||
|
} // namespace kernel
|
||||||
|
} // namespace xe
|
||||||
|
|
||||||
|
|
||||||
|
#endif // XENIA_KERNEL_MODULES_XBOXKRNL_FILE_H_
|
|
@ -0,0 +1,35 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <xenia/kernel/modules/xboxkrnl/xboxkrnl_misc.h>
|
||||||
|
|
||||||
|
#include <xenia/kernel/shim_utils.h>
|
||||||
|
#include <xenia/kernel/modules/xboxkrnl/kernel_state.h>
|
||||||
|
#include <xenia/kernel/modules/xboxkrnl/xboxkrnl_private.h>
|
||||||
|
#include <xenia/kernel/modules/xboxkrnl/objects/xthread.h>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace xe;
|
||||||
|
using namespace xe::kernel;
|
||||||
|
using namespace xe::kernel::xboxkrnl;
|
||||||
|
|
||||||
|
|
||||||
|
namespace xe {
|
||||||
|
namespace kernel {
|
||||||
|
namespace xboxkrnl {
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace xboxkrnl
|
||||||
|
} // namespace kernel
|
||||||
|
} // namespace xe
|
||||||
|
|
||||||
|
|
||||||
|
void xe::kernel::xboxkrnl::RegisterMiscExports(
|
||||||
|
ExportResolver* export_resolver, KernelState* state) {
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XENIA_KERNEL_MODULES_XBOXKRNL_MISC_H_
|
||||||
|
#define XENIA_KERNEL_MODULES_XBOXKRNL_MISC_H_
|
||||||
|
|
||||||
|
#include <xenia/common.h>
|
||||||
|
#include <xenia/core.h>
|
||||||
|
|
||||||
|
#include <xenia/kernel/xbox.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace xe {
|
||||||
|
namespace kernel {
|
||||||
|
namespace xboxkrnl {
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace xboxkrnl
|
||||||
|
} // namespace kernel
|
||||||
|
} // namespace xe
|
||||||
|
|
||||||
|
|
||||||
|
#endif // XENIA_KERNEL_MODULES_XBOXKRNL_MISC_H_
|
|
@ -28,11 +28,12 @@ class KernelState;
|
||||||
// be using to stash their variables.
|
// be using to stash their variables.
|
||||||
extern KernelState* shared_kernel_state_;
|
extern KernelState* shared_kernel_state_;
|
||||||
|
|
||||||
|
|
||||||
// Registration functions, one per file.
|
// Registration functions, one per file.
|
||||||
void RegisterDebugExports(ExportResolver* export_resolver, KernelState* state);
|
void RegisterDebugExports(ExportResolver* export_resolver, KernelState* state);
|
||||||
|
void RegisterFileExports(ExportResolver* export_resolver, KernelState* state);
|
||||||
void RegisterHalExports(ExportResolver* export_resolver, KernelState* state);
|
void RegisterHalExports(ExportResolver* export_resolver, KernelState* state);
|
||||||
void RegisterMemoryExports(ExportResolver* export_resolver, KernelState* state);
|
void RegisterMemoryExports(ExportResolver* export_resolver, KernelState* state);
|
||||||
|
void RegisterMiscExports(ExportResolver* export_resolver, KernelState* state);
|
||||||
void RegisterModuleExports(ExportResolver* export_resolver, KernelState* state);
|
void RegisterModuleExports(ExportResolver* export_resolver, KernelState* state);
|
||||||
void RegisterRtlExports(ExportResolver* export_resolver, KernelState* state);
|
void RegisterRtlExports(ExportResolver* export_resolver, KernelState* state);
|
||||||
void RegisterThreadingExports(ExportResolver* export_resolver,
|
void RegisterThreadingExports(ExportResolver* export_resolver,
|
||||||
|
|
|
@ -42,6 +42,7 @@ public:
|
||||||
kTypeModule = 0x00000001,
|
kTypeModule = 0x00000001,
|
||||||
kTypeThread = 0x00000002,
|
kTypeThread = 0x00000002,
|
||||||
kTypeEvent = 0x00000003,
|
kTypeEvent = 0x00000003,
|
||||||
|
kTypeFile = 0x00000004,
|
||||||
};
|
};
|
||||||
|
|
||||||
XObject(KernelState* kernel_state, Type type);
|
XObject(KernelState* kernel_state, Type type);
|
||||||
|
|
Loading…
Reference in New Issue