PoCaptureReasonContext
INT64 __fastcall PoCaptureReasonContext(
UINT64 a1,
CHAR a2,
VOID *a3,
CHAR a4,
BOOL *ImportantTimer,
INT64 *ReturnContext){
CHAR v7;
INT64 v8;
int v9;
int v10;
INT64 v12;
INT64 a6[2];
INT64 a8[2];
__int64 v15;
v7 = a2;
*(_OWORD *)a6 = 0i64;
*(_OWORD *)a8 = 0i64;
v15 = 0i64;
*ReturnContext = 0i64;
if( a1 && a2 )
{
if( !a4 )
{
if( (a1 & 3) != 0 )
ExRaiseDatatypeMisalignment();
*(_QWORD *)&a2 = 0x7FFFFFFF0000i64;
if( a1 + 40 > 0x7FFFFFFF0000i64 || a1 + 40 < a1 )
MEMORY[0x7FFFFFFF0000] = 0;
*(_OWORD *)a6 = *(_OWORD *)a1;
*(_OWORD *)a8 = *(_OWORD *)(a1 + 16);
v15 = *(_QWORD *)(a1 + 32);
a1 = (UINT64)a6;
}
LOBYTE(v8) = v7;
v10 = PopCaptureReasonContext(
(_COUNTED_REASON_CONTEXT *)a1,
v8,
(UINT8 *)ImportantTimer,
(_DIAGNOSTIC_CONTEXT **)ReturnContext,
v12,
a6[0],
a6[1],
a8[0]);
}
else
{
v10 = PopCaptureReasonContext(
(_COUNTED_REASON_CONTEXT *)a1,
a2,
(UINT8 *)ImportantTimer,
(_DIAGNOSTIC_CONTEXT **)ReturnContext,
v12,
a6[0],
a6[1],
a8[0]);
}
if( v10 >= 0 )
{
LOBYTE(v9) = v7;
PoGetRequester(v9, (_DEVICE_OBJECT *)a3, (_DIAGNOSTIC_CONTEXT *)*ReturnContext);
}
return(unsigned int)v10;
}Referenced by:
NtSetThreadExecutionState
NtSetTimer
NtSetTimerEx
PoCreatePowerRequest
PoCreateThermalRequest
PoRegisterSystemState
PopInitializeHighPerfPowerRequest
PopPowerRequestCreateInfo