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