PoUnregisterPowerSettingCallback

NTSTATUS __stdcall PoUnregisterPowerSettingCallback(VOID *Handle){
  NTSTATUS v1; 

  v1 = 0;
  if( Handle && *((_DWORD *)Handle + 4) == 1952797520 )
  {
    ExAcquireFastMutex((PFAST_MUTEX)((char *)&stru_140C23628 + 3000));
    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((PKGUARDED_MUTEX)((char *)&stru_140C23628 + 3000));
          KeWaitForSingleObject((UINT64)&stru_140C23628 + 3096, 0, 0, 0, 0i64);
          KeResetEvent((_KEVENT *)((char *)&stru_140C23628 + 3096));
          ExAcquireFastMutex((PFAST_MUTEX)((char *)&stru_140C23628 + 3000));
        }
        *((_BYTE *)Handle + 33) = 0;
      }
      PopUnregisterPowerSettingCallback((_POP_POWER_SETTING_REGISTRATION *)Handle);
    }
LABEL_8:
    KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&stru_140C23628 + 3000));
    return v1;
  }
  return -1073741811;
}

Referenced by:

SSHSupportUnregisterPowerSettingCallback