KeQueryBasePriorityThread and implementing Set.
This commit is contained in:
parent
036d12581e
commit
5644f0fd40
|
@ -382,6 +382,14 @@ void XThread::LowerIrql(uint32_t new_irql) {
|
||||||
irql_ = new_irql;
|
irql_ = new_irql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t XThread::QueryPriority() {
|
||||||
|
return GetThreadPriority(thread_handle_);
|
||||||
|
}
|
||||||
|
|
||||||
|
void XThread::SetPriority(int32_t increment) {
|
||||||
|
SetThreadPriority(thread_handle_, increment);
|
||||||
|
}
|
||||||
|
|
||||||
X_STATUS XThread::Resume(uint32_t* out_suspend_count) {
|
X_STATUS XThread::Resume(uint32_t* out_suspend_count) {
|
||||||
DWORD result = ResumeThread(thread_handle_);
|
DWORD result = ResumeThread(thread_handle_);
|
||||||
if (result >= 0) {
|
if (result >= 0) {
|
||||||
|
|
|
@ -59,6 +59,9 @@ public:
|
||||||
uint32_t RaiseIrql(uint32_t new_irql);
|
uint32_t RaiseIrql(uint32_t new_irql);
|
||||||
void LowerIrql(uint32_t new_irql);
|
void LowerIrql(uint32_t new_irql);
|
||||||
|
|
||||||
|
int32_t QueryPriority();
|
||||||
|
void SetPriority(int32_t increment);
|
||||||
|
|
||||||
X_STATUS Resume(uint32_t* out_suspend_count);
|
X_STATUS Resume(uint32_t* out_suspend_count);
|
||||||
X_STATUS Suspend(uint32_t* out_suspend_count);
|
X_STATUS Suspend(uint32_t* out_suspend_count);
|
||||||
X_STATUS Delay(
|
X_STATUS Delay(
|
||||||
|
|
|
@ -302,6 +302,26 @@ SHIM_CALL KeSetAffinityThread_shim(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SHIM_CALL KeQueryBasePriorityThread_shim(
|
||||||
|
PPCContext* ppc_state, KernelState* state) {
|
||||||
|
uint32_t thread_ptr = SHIM_GET_ARG_32(0);
|
||||||
|
|
||||||
|
XELOGD(
|
||||||
|
"KeQueryBasePriorityThread(%.8X)",
|
||||||
|
thread_ptr);
|
||||||
|
|
||||||
|
int32_t priority = 0;
|
||||||
|
|
||||||
|
XThread* thread = (XThread*)XObject::GetObject(
|
||||||
|
state, SHIM_MEM_ADDR(thread_ptr));
|
||||||
|
if (thread) {
|
||||||
|
priority = thread->QueryPriority();
|
||||||
|
}
|
||||||
|
|
||||||
|
SHIM_SET_RETURN(priority);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
uint32_t xeKeSetBasePriorityThread(void* thread_ptr, int32_t increment) {
|
uint32_t xeKeSetBasePriorityThread(void* thread_ptr, int32_t increment) {
|
||||||
KernelState* state = shared_kernel_state_;
|
KernelState* state = shared_kernel_state_;
|
||||||
XEASSERTNOTNULL(state);
|
XEASSERTNOTNULL(state);
|
||||||
|
@ -310,8 +330,8 @@ uint32_t xeKeSetBasePriorityThread(void* thread_ptr, int32_t increment) {
|
||||||
|
|
||||||
XThread* thread = (XThread*)XObject::GetObject(state, thread_ptr);
|
XThread* thread = (XThread*)XObject::GetObject(state, thread_ptr);
|
||||||
if (thread) {
|
if (thread) {
|
||||||
// TODO(benvanik): implement.
|
prev_priority = thread->QueryPriority();
|
||||||
XELOGW("KeSetBasePriority not implemented");
|
thread->SetPriority(increment);
|
||||||
}
|
}
|
||||||
|
|
||||||
return prev_priority;
|
return prev_priority;
|
||||||
|
@ -1282,6 +1302,7 @@ void xe::kernel::xboxkrnl::RegisterThreadingExports(
|
||||||
SHIM_SET_MAPPING("xboxkrnl.exe", KeResumeThread, state);
|
SHIM_SET_MAPPING("xboxkrnl.exe", KeResumeThread, state);
|
||||||
SHIM_SET_MAPPING("xboxkrnl.exe", NtSuspendThread, state);
|
SHIM_SET_MAPPING("xboxkrnl.exe", NtSuspendThread, state);
|
||||||
SHIM_SET_MAPPING("xboxkrnl.exe", KeSetAffinityThread, state);
|
SHIM_SET_MAPPING("xboxkrnl.exe", KeSetAffinityThread, state);
|
||||||
|
SHIM_SET_MAPPING("xboxkrnl.exe", KeQueryBasePriorityThread, state);
|
||||||
SHIM_SET_MAPPING("xboxkrnl.exe", KeSetBasePriorityThread, state);
|
SHIM_SET_MAPPING("xboxkrnl.exe", KeSetBasePriorityThread, state);
|
||||||
|
|
||||||
SHIM_SET_MAPPING("xboxkrnl.exe", KeGetCurrentProcessType, state);
|
SHIM_SET_MAPPING("xboxkrnl.exe", KeGetCurrentProcessType, state);
|
||||||
|
|
Loading…
Reference in New Issue