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