PopInvokeWin32Callout
INT64 __fastcall PopInvokeWin32Callout(INT64 a1, VOID *a2, INT64 a3, UINT64 *a4){
unsigned int v4;
char v6;
unsigned int v7;
_QWORD *v8;
_QWORD *v9;
unsigned int v10;
UINT64 *p_SessionId;
__int64 v12;
unsigned int v13;
__int64 v14;
__int64 v15;
_QWORD *v17;
_QWORD *v18;
int v19;
int SessionId;
__int64 OutputBuffer;
int InputBuffer;
_DWORD result[7];
_ETHREAD *CurrentThread;
INT64(__fastcall *v25)(INT64, INT64, INT64, INT64, INT64, INT64);
int *p_InputBuffer;
char v27;
unsigned int v28;
v28 = a1;
v4 = a3;
SessionId = 0;
v19 = 0;
OutputBuffer = 0i64;
v6 = 0;
v7 = 0;
memset((INT64)result, 0i64);
InputBuffer = 21;
if( ZwPowerInformation(SystemPowerStateLogging|0x40, &InputBuffer, 0x60u, &OutputBuffer, 8u) < 0 )
return v7;
LODWORD(v8) = MmGetNextSession(0i64);
v9 = v8;
do
{
if( v9 && *(_QWORD *)(v9[171] + 1048i64) != HalSystemVectorDispatchEntry() )
{
if( v4 == 2 )
{
LODWORD(v18) = MmGetNextSession(v9);
v9 = v18;
if( v18 )
continue;
}
else
{
v7 = -1073741811;
}
v6 = 1;
}
else
{
if( v4 == 2 && v9 )
{
v10 = 1;
SessionId = MmGetSessionId((__int64)v9);
p_SessionId = (UINT64 *)&SessionId;
LODWORD(v17) = MmGetNextSession(v9);
v9 = v17;
if( !v17 )
v6 = 1;
}
else
{
v6 = 1;
v10 = v4;
p_SessionId = a4;
if( a4 )
v19 = *(_DWORD *)a4;
else
v19 = -1;
}
v12 = OutputBuffer;
if( OutputBuffer )
{
memset((INT64)&InputBuffer, 0i64);
InputBuffer = 21;
*(_QWORD *)&result[1] = v12;
result[5] = 417;
result[3] = 1000 * PopWin32kCalloutWatchdogTimeoutSeconds;
result[4] = v19;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
p_InputBuffer = &InputBuffer;
v25 = PopWin32CalloutWatchdogCallbackLiveDump;
ZwPowerInformation(SystemPowerStateLogging|0x40, &InputBuffer, 0x60u, 0i64, 0);
}
v13 = PsInvokeWin32Callout(v28, a2, v10, p_SessionId);
v14 = OutputBuffer;
v7 = v13;
if( OutputBuffer )
{
memset((INT64)&InputBuffer, 0i64);
InputBuffer = 21;
*(_QWORD *)&result[1] = v14;
ZwPowerInformation(SystemPowerStateLogging|0x40, &InputBuffer, 0x60u, 0i64, 0);
}
}
}
while( !v6 );
v15 = OutputBuffer;
if( OutputBuffer )
{
memset((INT64)&InputBuffer, 0i64);
InputBuffer = 21;
*(_QWORD *)&result[1] = v15;
v27 = 1;
ZwPowerInformation(SystemPowerStateLogging|0x40, &InputBuffer, 0x60u, 0i64, 0);
}
return v7;
}Referenced by:
PoSessionBuiltinPanelState
PoSessionEngagementUpdate
PoSessionPowerControl
PopBroadcastSessionInfo
PopControlMonitor
PopDispatchStateCallout
PopEventCalloutDispatch
PopGetConsoleDisplayRequestCount
PopNotifyConsoleUserPresent
PopNotifySessionDisplayRequired
PopPowerAggregatorNotifyCsStateExited
PopSendSessionInfo