mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-12-22 20:31:14 +00:00
dmnt.gen2: enable attach to arbitrary program id
This commit is contained in:
parent
92a8c8eb88
commit
159f8d384b
3 changed files with 25 additions and 2 deletions
|
@ -28,6 +28,7 @@ namespace ams::pm::dmnt {
|
||||||
Result GetProcessId(os::ProcessId *out_process_id, const ncm::ProgramId program_id);
|
Result GetProcessId(os::ProcessId *out_process_id, const ncm::ProgramId program_id);
|
||||||
Result GetApplicationProcessId(os::ProcessId *out_process_id);
|
Result GetApplicationProcessId(os::ProcessId *out_process_id);
|
||||||
Result HookToCreateApplicationProcess(os::NativeHandle *out_handle);
|
Result HookToCreateApplicationProcess(os::NativeHandle *out_handle);
|
||||||
|
Result HookToCreateProcess(os::NativeHandle *out_handle, const ncm::ProgramId program_id);
|
||||||
Result AtmosphereGetProcessInfo(os::NativeHandle *out_handle, ncm::ProgramLocation *out_loc, cfg::OverrideStatus *out_status, os::ProcessId process_id);
|
Result AtmosphereGetProcessInfo(os::NativeHandle *out_handle, ncm::ProgramLocation *out_loc, cfg::OverrideStatus *out_status, os::ProcessId process_id);
|
||||||
|
|
||||||
#if defined(ATMOSPHERE_OS_HORIZON)
|
#if defined(ATMOSPHERE_OS_HORIZON)
|
||||||
|
|
|
@ -44,6 +44,13 @@ namespace ams::pm::dmnt {
|
||||||
R_SUCCEED();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result HookToCreateProcess(os::NativeHandle *out_handle, const ncm::ProgramId program_id) {
|
||||||
|
Event evt;
|
||||||
|
R_TRY(pmdmntHookToCreateProcess(std::addressof(evt), static_cast<u64>(program_id)));
|
||||||
|
*out_handle = evt.revent;
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
Result AtmosphereGetProcessInfo(os::NativeHandle *out_handle, ncm::ProgramLocation *out_loc, cfg::OverrideStatus *out_status, os::ProcessId process_id) {
|
Result AtmosphereGetProcessInfo(os::NativeHandle *out_handle, ncm::ProgramLocation *out_loc, cfg::OverrideStatus *out_status, os::ProcessId process_id) {
|
||||||
*out_handle = os::InvalidNativeHandle;
|
*out_handle = os::InvalidNativeHandle;
|
||||||
*out_loc = {};
|
*out_loc = {};
|
||||||
|
|
|
@ -2105,9 +2105,24 @@ namespace ams::dmnt {
|
||||||
ParsePrefix(command, "0x");
|
ParsePrefix(command, "0x");
|
||||||
|
|
||||||
/* Decode program id. */
|
/* Decode program id. */
|
||||||
const u64 program_id = DecodeHex(command);
|
const ncm::ProgramId program_id(DecodeHex(command));
|
||||||
|
|
||||||
AppendReplyFormat(reply_cur, reply_end, "[TODO] wait for program id 0x%lx\n", program_id);
|
/* Wait for the process to be created. */
|
||||||
|
{
|
||||||
|
/* Get hook to creation of process with program id. */
|
||||||
|
os::NativeHandle h;
|
||||||
|
R_ABORT_UNLESS(pm::dmnt::HookToCreateProcess(std::addressof(h), program_id));
|
||||||
|
|
||||||
|
/* Wait for event. */
|
||||||
|
os::SystemEvent hook_event(h, true, os::InvalidNativeHandle, false, os::EventClearMode_AutoClear);
|
||||||
|
hook_event.Wait();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get process id. */
|
||||||
|
R_ABORT_UNLESS(pm::dmnt::GetProcessId(std::addressof(m_wait_process_id), program_id));
|
||||||
|
|
||||||
|
/* Note that we're attaching. */
|
||||||
|
AppendReplyFormat(reply_cur, reply_end, "Send `attach 0x%lx` to attach.\n", m_wait_process_id.value);
|
||||||
} else {
|
} else {
|
||||||
std::memcpy(m_reply_cur, command, std::strlen(command) + 1);
|
std::memcpy(m_reply_cur, command, std::strlen(command) + 1);
|
||||||
AppendReplyFormat(reply_cur, reply_end, "Unknown command `%s`\n", m_reply_cur);
|
AppendReplyFormat(reply_cur, reply_end, "Unknown command `%s`\n", m_reply_cur);
|
||||||
|
|
Loading…
Reference in a new issue