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