MCPcopy Create free account
hub / github.com/FEX-Emu/FEX / BTCpuGetContext

Function BTCpuGetContext

Source/Windows/WOW64/Module.cpp:691–709  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

689}
690
691NTSTATUS BTCpuGetContext(HANDLE Thread, HANDLE Process, void* Unknown, WOW64_CONTEXT* Context) {
692 if (!FEX::Windows::ValidateHandleAccess(Thread, THREAD_GET_CONTEXT)) {
693 return STATUS_ACCESS_DENIED;
694 }
695
696 auto ThreadDup = FEX::Windows::DupHandle(Thread, THREAD_QUERY_INFORMATION | THREAD_GET_CONTEXT | THREAD_SET_CONTEXT);
697 auto [Err, TLS] = GetThreadTLS(*ThreadDup);
698 if (Err) {
699 return Err;
700 }
701
702 if (!(TLS.ControlWord().load(std::memory_order::relaxed) & ControlBits::WOW_CPU_AREA_DIRTY)) {
703 if (Err = Context::FlushThreadStateContext(*ThreadDup); Err) {
704 return Err;
705 }
706 }
707
708 return RtlWow64GetThreadContext(*ThreadDup, Context);
709}
710
711NTSTATUS BTCpuSetContext(HANDLE Thread, HANDLE Process, void* Unknown, WOW64_CONTEXT* Context) {
712 if (!FEX::Windows::ValidateHandleAccess(Thread, THREAD_SET_CONTEXT)) {

Callers

nothing calls this directly

Calls 4

ValidateHandleAccessFunction · 0.85
DupHandleFunction · 0.85
GetThreadTLSFunction · 0.85
FlushThreadStateContextFunction · 0.85

Tested by

no test coverage detected