|
|
|
@ -663,7 +663,7 @@ static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id) |
|
|
|
TotalMemoryUsage = 6, |
|
|
|
TotalHeapUsage = 7, |
|
|
|
IsCurrentProcessBeingDebugged = 8, |
|
|
|
ResourceHandleLimit = 9, |
|
|
|
RegisterResourceLimit = 9, |
|
|
|
IdleTickCount = 10, |
|
|
|
RandomEntropy = 11, |
|
|
|
PerformanceCounter = 0xF0000002, |
|
|
|
@ -787,6 +787,33 @@ static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id) |
|
|
|
*result = 0; |
|
|
|
return RESULT_SUCCESS; |
|
|
|
|
|
|
|
case GetInfoType::RegisterResourceLimit: { |
|
|
|
if (handle != 0) { |
|
|
|
return ERR_INVALID_HANDLE; |
|
|
|
} |
|
|
|
|
|
|
|
if (info_sub_id != 0) { |
|
|
|
return ERR_INVALID_COMBINATION; |
|
|
|
} |
|
|
|
|
|
|
|
Process* const current_process = Core::CurrentProcess(); |
|
|
|
HandleTable& handle_table = current_process->GetHandleTable(); |
|
|
|
const auto resource_limit = current_process->GetResourceLimit(); |
|
|
|
if (!resource_limit) { |
|
|
|
*result = KernelHandle::InvalidHandle; |
|
|
|
// Yes, the kernel considers this a successful operation.
|
|
|
|
return RESULT_SUCCESS; |
|
|
|
} |
|
|
|
|
|
|
|
const auto table_result = handle_table.Create(resource_limit); |
|
|
|
if (table_result.Failed()) { |
|
|
|
return table_result.Code(); |
|
|
|
} |
|
|
|
|
|
|
|
*result = *table_result; |
|
|
|
return RESULT_SUCCESS; |
|
|
|
} |
|
|
|
|
|
|
|
case GetInfoType::RandomEntropy: |
|
|
|
if (handle != 0) { |
|
|
|
LOG_ERROR(Kernel_SVC, "Process Handle is non zero, expected 0 result but got {:016X}", |
|
|
|
|