PopCreatePowerRequestObject
__int64 __fastcall PopCreatePowerRequestObject(_QWORD *a1, _DWORD *a2){
char v4;
unsigned int ProcessId;
signed __int32 v6;
_DWORD *inserted;
int v8;
INT64 v9;
__int64 v11;
int v12;
__int128 Buffer;
int v14[2];
__int64 v15;
__int64 v16;
int v17;
int v18;
__int128 v19;
INT64 result;
v14[1] = 0;
v18 = 0;
if( *a2 )
{
v4 = 1;
ProcessId = (unsigned int)PsGetProcessId(*((PEPROCESS *)KeGetCurrentThread() + 23));
}
else
{
v4 = 0;
ProcessId = 0;
}
result = 0i64;
v6 = _InterlockedIncrement(&PopPowerRequestId);
Buffer = 0i64;
DWORD2(Buffer) = v6;
PopAcquirePowerRequestPushLock(1);
inserted = RtlInsertElementGenericTableAvl(&PopPowerRequestTable, &Buffer, 0x10ui64, 0i64);
PopReleaseRwLock((UINT64)&PopPowerRequestLock);
if( inserted )
{
v12 = a2[6] + 32;
v14[0] = 48;
v15 = 0i64;
v17 = 32;
v16 = 0i64;
v19 = 0i64;
v8 = ObCreateObjectEx(0, PopPowerRequestObjectType, (__int64)v14, v4, v11, 152, v12, 0, &result, 0i64);
if( v8 >= 0 )
{
v9 = result;
memset(result, 0i64);
*(_DWORD *)(v9 + 16) = PsGetCurrentProcessSessionId();
*(_DWORD *)(v9 + 88) = ProcessId;
*(_QWORD *)(v9 + 80) = a2;
*(_DWORD *)(v9 + 28) = v6;
inserted[2] = v6;
*(_QWORD *)inserted = v9;
inserted = 0i64;
PopStatsCreatePowerRequest(v9);
*a1 = v9;
}
if( inserted )
{
PopAcquirePowerRequestPushLock(1);
RtlDeleteElementGenericTableAvl(&PopPowerRequestTable, inserted);
PopReleaseRwLock((UINT64)&PopPowerRequestLock);
}
}
else
{
return(unsigned int)-1073741670;
}
return(unsigned int)v8;
}Referenced by:
PopCreateKernelPowerRequest
PopCreateUserPowerRequest