PopPowerButtonWorkCallback

NTSTATUS __stdcall PopPowerButtonWorkCallback(){
  unsigned __int64 v0; 
  unsigned int v1; 
  UINT64 v2; 
  INT64 v3; 
  NTSTATUS result; 
  unsigned int ActiveConsoleId; 
  void *SessionById; 
  INT64 v7; 
  UINT8 v8[4]; 
  INT64 v9; 
  _KAPC_STATE ApcState; 

  *(_DWORD *)v8 = 0;
  memset(&ApcState, 0, sizeof(ApcState));
  LOBYTE(v0) = KeAcquireSpinLockRaiseToDpc(&PopPowerButtonHold);
  do
  {
    v1 = qword_140C20698;
    v9 = qword_140C20698;
    KxReleaseSpinLock(&PopPowerButtonHold);
    __writecr8((unsigned __int8)v0);
    v3 = HIDWORD(v9);
    if( (dword_140C206A0 & 1) != 0 && ((v1 & 1) == 0 || HIDWORD(v9) != dword_140C206A4) )
    {
      PopRecordPhysicalPowerButton(0i64);
      dword_140C206A0 = 0;
      byte_140C20728 = 0;
      PopPublishPowerButtonState();
      KeDisableTimer2(&stru_140C205E8, 1u, 1u, 0i64);
    }
    if( (v1 & 1) != 0 )
    {
      if( (dword_140C206A0 & 1) == 0 )
      {
        LOBYTE(v2) = 1;
        PopRecordPhysicalPowerButton(v2);
        dword_140C206A4 = v3;
        dword_140C206A8 = PopQueryPowerButtonBugcheckEnabled();
        *(_DWORD *)v8 = 65544;
        LODWORD(v7) = 2;
        KeInitializeIRTimer((INT64)&stru_140C205E8, (INT64)PopPowerButtonTimerCallback, v3, v8, v7);
        KeSetTimer2((INT64)&stru_140C205E8, -10000000i64, 10000000i64, 0i64);
      }
      dword_140C206A0 = v1;
      PopPublishPowerButtonState();
      if( v1 >> 1 >= 0x1B58 )
      {
        if( PopAcpiPdttSupportEnabled )
          ((void(__fastcall *)(_QWORD))qword_140C009F8)(0i64);
        PopDiagTracePowerButtonBugcheck(v1 >> 1);
        PopRecordPoBlackboxInformation();
        if( dword_140C206A8 )
        {
          ActiveConsoleId = RtlGetActiveConsoleId();
          SessionById = MmGetSessionById(ActiveConsoleId);
          if( SessionById && MmAttachSession(SessionById, &ApcState) < 0 )
            DbgPrintEx(0x92u, 3u, "Unable to attach to active session\n");
          KeBugCheckEx(0x1C8u, (PVOID)((unsigned __int64)v1 >> 1), &PopPowerButtonTriageBlock, 0i64, 0i64);
        }
      }
    }
    v0 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc(&PopPowerButtonHold);
  }
  while( __PAIR64__(v3, v1) != qword_140C20698 );
  _InterlockedExchange(&dword_140C20690, 0);
  KxReleaseSpinLock(&PopPowerButtonHold);
  result = KiIrqlFlags;
  __writecr8(v0);
  return result;
}

Referenced by:

No references.