PopPowerRequestCreateInfo

NTSTATUS __stdcall PopPowerRequestCreateInfo(
        _COUNTED_REASON_CONTEXT *CountedReasonContext,
        UINT8 SpecialRequest,
        VOID **ReturnHandle,
        INT64 a4,
        INT64 a5,
        INT64 a6,
        INT64 a7,
        INT64 a8){
  _DIAGNOSTIC_CONTEXT *v10; 
  int inserted; 
  NTSTATUS v12; 
  unsigned int *v13; 
  UINT64 v15; 
  VOID *PowerRequest; 
  _DIAGNOSTIC_CONTEXT *Context; 
  PVOID Handle; 

  Context = 0i64;
  Handle = 0i64;
  PowerRequest = 0i64;
  if( KeGetCurrentThread()->PreviousMode )
  {
    inserted = PoCaptureReasonContext(CountedReasonContext, 1, 0i64, 1u, 0i64, &Context);
    if( inserted >= 0 )
    {
      v10 = Context;
      v12 = PopCreateUserPowerRequest(&PowerRequest, SpecialRequest, Context);
      v13 = (unsigned int *)PowerRequest;
      inserted = v12;
      if( v12 >= 0 )
      {
        v10 = 0i64;
        ObfReferenceObjectWithTag(PowerRequest, 0x72506F50ui64);
        LODWORD(v15) = 0;
        inserted = ObInsertObjectEx(v13, 0i64, 0i64, 0i64, v15, 0i64, &Handle);
        if( inserted >= 0 )
          PopNotifySessionUserPowerRequestCreated(v13[4], v13[7], (INT64)Handle);
      }
      if( v13 )
        ObfDereferenceObjectWithTag(v13, 0x72506F50ui64);
    }
    else
    {
      v10 = 0i64;
    }
  }
  else
  {
    v10 = Context;
    inserted = -1073741637;
  }
  if( ReturnHandle )
    *ReturnHandle = Handle;
  if( v10 )
    PoDestroyReasonContext(v10);
  return inserted;
}

Referenced by:

NtPowerInformation