PoUnregisterPowerSettingCallback

INT64 __fastcall PoUnregisterPowerSettingCallback(VOID *Handle){
  unsigned int v1; 
  UINT64 v4; 
  UINT8 v5; 
  UINT8 v6; 
  IRP *Timeout; 
  v1 = 0;
  if( Handle && *((_DWORD *)Handle + 4) == 1952797520 )
  {
    ExAcquireFastMutex(&PopSettingLock);
    if( *((_BYTE *)Handle + 33) || *((_BYTE *)Handle + 32) || *(VOID **)Handle == Handle )
    {
      v1 = -1073741811;
    }
    else
    {
      if( *((_QWORD *)Handle + 3) )
      {
        if( *((struct _KTHREAD **)Handle + 3) == KeGetCurrentThread() )
        {
          *((_BYTE *)Handle + 32) = 1;
          goto LABEL_8;
        }
        *((_BYTE *)Handle + 33) = 1;
        while( *((_QWORD *)Handle + 3) )
        {
          KeReleaseGuardedMutex(&PopSettingLock);
          KeWaitForSingleObject(&PopPowerSettingCallbackReturned, Executive, 0, 0, 0i64);
          KeResetEvent(&PopPowerSettingCallbackReturned, v4, v5, v6, Timeout);
          ExAcquireFastMutex(&PopSettingLock);
        }
        *((_BYTE *)Handle + 33) = 0;
      }
      PopUnregisterPowerSettingCallback((INT64 *)Handle);
    }
LABEL_8:
    KeReleaseGuardedMutex(&PopSettingLock);
    return v1;
  }
  return 3221225485i64;
}

Referenced by:

SSHSupportUnregisterPowerSettingCallback