|
|
|
@ -391,7 +391,7 @@ static ResultCode SendSyncRequest(Handle handle) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Get the ID for the specified thread.
|
|
|
|
|
static ResultCode GetThreadId(u32* thread_id, Handle thread_handle) {
|
|
|
|
|
static ResultCode GetThreadId(u64* thread_id, Handle thread_handle) {
|
|
|
|
|
LOG_TRACE(Kernel_SVC, "called thread=0x{:08X}", thread_handle);
|
|
|
|
|
|
|
|
|
|
const auto& handle_table = Core::CurrentProcess()->GetHandleTable();
|
|
|
|
@ -405,20 +405,33 @@ static ResultCode GetThreadId(u32* thread_id, Handle thread_handle) {
|
|
|
|
|
return RESULT_SUCCESS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Get the ID of the specified process
|
|
|
|
|
static ResultCode GetProcessId(u32* process_id, Handle process_handle) {
|
|
|
|
|
LOG_TRACE(Kernel_SVC, "called process=0x{:08X}", process_handle);
|
|
|
|
|
/// Gets the ID of the specified process or a specified thread's owning process.
|
|
|
|
|
static ResultCode GetProcessId(u64* process_id, Handle handle) {
|
|
|
|
|
LOG_DEBUG(Kernel_SVC, "called handle=0x{:08X}", handle);
|
|
|
|
|
|
|
|
|
|
const auto& handle_table = Core::CurrentProcess()->GetHandleTable();
|
|
|
|
|
const SharedPtr<Process> process = handle_table.Get<Process>(process_handle);
|
|
|
|
|
if (!process) {
|
|
|
|
|
LOG_ERROR(Kernel_SVC, "Process handle does not exist, process_handle=0x{:08X}",
|
|
|
|
|
process_handle);
|
|
|
|
|
return ERR_INVALID_HANDLE;
|
|
|
|
|
const SharedPtr<Process> process = handle_table.Get<Process>(handle);
|
|
|
|
|
if (process) {
|
|
|
|
|
*process_id = process->GetProcessID();
|
|
|
|
|
return RESULT_SUCCESS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
*process_id = process->GetProcessID();
|
|
|
|
|
return RESULT_SUCCESS;
|
|
|
|
|
const SharedPtr<Thread> thread = handle_table.Get<Thread>(handle);
|
|
|
|
|
if (thread) {
|
|
|
|
|
const Process* const owner_process = thread->GetOwnerProcess();
|
|
|
|
|
if (!owner_process) {
|
|
|
|
|
LOG_ERROR(Kernel_SVC, "Non-existent owning process encountered.");
|
|
|
|
|
return ERR_INVALID_HANDLE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
*process_id = owner_process->GetProcessID();
|
|
|
|
|
return RESULT_SUCCESS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// NOTE: This should also handle debug objects before returning.
|
|
|
|
|
|
|
|
|
|
LOG_ERROR(Kernel_SVC, "Handle does not exist, handle=0x{:08X}", handle);
|
|
|
|
|
return ERR_INVALID_HANDLE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Default thread wakeup callback for WaitSynchronization
|
|
|
|
|