KernelState::GetKernelModule
This commit is contained in:
parent
8adbc2cd0c
commit
870aa092bb
|
@ -275,13 +275,9 @@ X_STATUS Emulator::LaunchStfsContainer(std::wstring path) {
|
||||||
X_STATUS Emulator::CompleteLaunch(const std::wstring& path,
|
X_STATUS Emulator::CompleteLaunch(const std::wstring& path,
|
||||||
const std::string& module_path) {
|
const std::string& module_path) {
|
||||||
// Allow xam to request module loads.
|
// Allow xam to request module loads.
|
||||||
auto xam_module = kernel_state_->GetModule("xam.xex");
|
auto xam = kernel_state()->GetKernelModule<kernel::XamModule>("xam.xex");
|
||||||
auto xam = kernel::object_ref<kernel::XamModule>(
|
auto xboxkrnl =
|
||||||
reinterpret_cast<kernel::XamModule*>(xam_module.release()));
|
kernel_state()->GetKernelModule<kernel::XboxkrnlModule>("xboxkrnl.exe");
|
||||||
|
|
||||||
auto xboxkrnl_module = kernel_state_->GetModule("xboxkrnl.exe");
|
|
||||||
auto xboxkrnl = kernel::object_ref<kernel::XboxkrnlModule>(
|
|
||||||
reinterpret_cast<kernel::XboxkrnlModule*>(xboxkrnl_module.release()));
|
|
||||||
|
|
||||||
int result = 0;
|
int result = 0;
|
||||||
auto next_module = module_path;
|
auto next_module = module_path;
|
||||||
|
|
|
@ -161,6 +161,18 @@ bool KernelState::IsKernelModule(const char* name) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object_ref<XKernelModule> KernelState::GetKernelModule(const char* name) {
|
||||||
|
assert_true(IsKernelModule(name));
|
||||||
|
|
||||||
|
for (auto kernel_module : kernel_modules_) {
|
||||||
|
if (kernel_module->Matches(name)) {
|
||||||
|
return retain_object(kernel_module.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
object_ref<XModule> KernelState::GetModule(const char* name) {
|
object_ref<XModule> KernelState::GetModule(const char* name) {
|
||||||
if (!name) {
|
if (!name) {
|
||||||
// NULL name = self.
|
// NULL name = self.
|
||||||
|
|
|
@ -112,15 +112,23 @@ class KernelState {
|
||||||
void UnregisterModule(XModule* module);
|
void UnregisterModule(XModule* module);
|
||||||
bool IsKernelModule(const char* name);
|
bool IsKernelModule(const char* name);
|
||||||
object_ref<XModule> GetModule(const char* name);
|
object_ref<XModule> GetModule(const char* name);
|
||||||
|
|
||||||
object_ref<XUserModule> GetExecutableModule();
|
object_ref<XUserModule> GetExecutableModule();
|
||||||
void SetExecutableModule(object_ref<XUserModule> module);
|
void SetExecutableModule(object_ref<XUserModule> module);
|
||||||
|
object_ref<XUserModule> LoadUserModule(const char* name);
|
||||||
|
|
||||||
|
object_ref<XKernelModule> GetKernelModule(const char* name);
|
||||||
template <typename T>
|
template <typename T>
|
||||||
object_ref<XKernelModule> LoadKernelModule() {
|
object_ref<XKernelModule> LoadKernelModule() {
|
||||||
auto kernel_module = object_ref<XKernelModule>(new T(emulator_, this));
|
auto kernel_module = object_ref<XKernelModule>(new T(emulator_, this));
|
||||||
LoadKernelModule(kernel_module);
|
LoadKernelModule(kernel_module);
|
||||||
return kernel_module;
|
return kernel_module;
|
||||||
}
|
}
|
||||||
object_ref<XUserModule> LoadUserModule(const char* name);
|
template <typename T>
|
||||||
|
object_ref<T> GetKernelModule(const char* name) {
|
||||||
|
auto module = GetKernelModule(name);
|
||||||
|
return object_ref<T>(reinterpret_cast<T*>(module.release()));
|
||||||
|
}
|
||||||
|
|
||||||
// Terminates a title: Unloads all modules, and kills all guest threads.
|
// Terminates a title: Unloads all modules, and kills all guest threads.
|
||||||
void TerminateTitle(bool from_guest_thread = false);
|
void TerminateTitle(bool from_guest_thread = false);
|
||||||
|
|
|
@ -93,9 +93,7 @@ SHIM_CALL XamGetExecutionId_shim(PPCContext* ppc_context,
|
||||||
}
|
}
|
||||||
|
|
||||||
dword_result_t XamLoaderSetLaunchData(lpvoid_t data, dword_t size) {
|
dword_result_t XamLoaderSetLaunchData(lpvoid_t data, dword_t size) {
|
||||||
auto xam_module = kernel_state()->GetModule("xam.xex");
|
auto xam = kernel_state()->GetKernelModule<kernel::XamModule>("xam.xex");
|
||||||
auto xam = kernel::object_ref<kernel::XamModule>(
|
|
||||||
reinterpret_cast<kernel::XamModule*>(xam_module.release()));
|
|
||||||
|
|
||||||
auto& loader_data = xam->loader_data();
|
auto& loader_data = xam->loader_data();
|
||||||
if (loader_data.launch_data_ptr) {
|
if (loader_data.launch_data_ptr) {
|
||||||
|
@ -114,9 +112,7 @@ dword_result_t XamLoaderSetLaunchData(lpvoid_t data, dword_t size) {
|
||||||
DECLARE_XAM_EXPORT(XamLoaderSetLaunchData, ExportTag::kSketchy);
|
DECLARE_XAM_EXPORT(XamLoaderSetLaunchData, ExportTag::kSketchy);
|
||||||
|
|
||||||
dword_result_t XamLoaderGetLaunchDataSize(lpdword_t size_ptr) {
|
dword_result_t XamLoaderGetLaunchDataSize(lpdword_t size_ptr) {
|
||||||
auto xam_module = kernel_state()->GetModule("xam.xex");
|
auto xam = kernel_state()->GetKernelModule<kernel::XamModule>("xam.xex");
|
||||||
auto xam = kernel::object_ref<kernel::XamModule>(
|
|
||||||
reinterpret_cast<kernel::XamModule*>(xam_module.release()));
|
|
||||||
|
|
||||||
*size_ptr = xam->loader_data().launch_data_size;
|
*size_ptr = xam->loader_data().launch_data_size;
|
||||||
|
|
||||||
|
@ -126,9 +122,7 @@ DECLARE_XAM_EXPORT(XamLoaderGetLaunchDataSize, ExportTag::kSketchy);
|
||||||
|
|
||||||
dword_result_t XamLoaderGetLaunchData(lpvoid_t buffer_ptr,
|
dword_result_t XamLoaderGetLaunchData(lpvoid_t buffer_ptr,
|
||||||
dword_t buffer_size) {
|
dword_t buffer_size) {
|
||||||
auto xam_module = kernel_state()->GetModule("xam.xex");
|
auto xam = kernel_state()->GetKernelModule<kernel::XamModule>("xam.xex");
|
||||||
auto xam = kernel::object_ref<kernel::XamModule>(
|
|
||||||
reinterpret_cast<kernel::XamModule*>(xam_module.release()));
|
|
||||||
|
|
||||||
auto& loader_data = xam->loader_data();
|
auto& loader_data = xam->loader_data();
|
||||||
if (loader_data.launch_data_ptr) {
|
if (loader_data.launch_data_ptr) {
|
||||||
|
@ -146,9 +140,7 @@ dword_result_t XamLoaderGetLaunchData(lpvoid_t buffer_ptr,
|
||||||
DECLARE_XAM_EXPORT(XamLoaderGetLaunchData, ExportTag::kSketchy);
|
DECLARE_XAM_EXPORT(XamLoaderGetLaunchData, ExportTag::kSketchy);
|
||||||
|
|
||||||
void XamLoaderLaunchTitle(lpstring_t raw_name, dword_t flags) {
|
void XamLoaderLaunchTitle(lpstring_t raw_name, dword_t flags) {
|
||||||
auto xam_module = kernel_state()->GetModule("xam.xex");
|
auto xam = kernel_state()->GetKernelModule<kernel::XamModule>("xam.xex");
|
||||||
auto xam = kernel::object_ref<kernel::XamModule>(
|
|
||||||
reinterpret_cast<kernel::XamModule*>(xam_module.release()));
|
|
||||||
|
|
||||||
auto& loader_data = xam->loader_data();
|
auto& loader_data = xam->loader_data();
|
||||||
loader_data.launch_flags = flags;
|
loader_data.launch_flags = flags;
|
||||||
|
|
Loading…
Reference in New Issue