PopGetSettingNotificationName
VOID __stdcall PopGetSettingNotificationName(_DEVICE_OBJECT *DeviceObject, _IRP *Irp){
char v4;
char v5;
unsigned int NextDevice;
_GUID *v7;
_POP_POWER_SETTING_CONFIGURATION *PowerSettingConfiguration;
_WNF_STATE_NAME *v9;
_WNF_STATE_NAME v10;
unsigned int ProcessSessionId;
unsigned int v12;
__int64 v13;
unsigned int v14;
INT16 v15;
char v16;
_WNF_STATE_NAME StateName;
StateName = 0i64;
v4 = 0;
ExAcquireFastMutex((PFAST_MUTEX)((char *)&stru_140C23628 + 3000));
v5 = 1;
NextDevice = -1;
if( DeviceObject )
NextDevice = (unsigned int)DeviceObject->NextDevice;
v7 = (_GUID *)((unsigned __int64)DeviceObject & -(__int64)(DeviceObject != 0i64));
if( v7 )
{
if( PopStateIsSessionSpecific((_GUID *)((unsigned __int64)DeviceObject & -(__int64)(DeviceObject != 0i64))) )
{
ProcessSessionId = PsGetProcessSessionIdEx((INT64)KeGetCurrentThread()->ApcState.Process);
v12 = ProcessSessionId;
if( NextDevice == -1 || NextDevice == ProcessSessionId )
{
if( ProcessSessionId == -1 || PsIsServiceSession(ProcessSessionId) )
goto LABEL_12;
NextDevice = v12;
}
else if( PopValidateContextMembership(SeLocalSystemSid) < 0 )
{
if( !PsIsServiceSession(v12) )
goto LABEL_12;
MmIsSessionInCurrentServerSilo(NextDevice, v15);
if( !v16 || PopValidateContextMembership(SeExports->SeLocalServiceSid) < 0 )
goto LABEL_12;
}
}
else
{
NextDevice = -1;
}
PowerSettingConfiguration = PopFindPowerSettingConfiguration(v7, NextDevice);
v9 = (_WNF_STATE_NAME *)PowerSettingConfiguration;
if( PowerSettingConfiguration )
{
if( PowerSettingConfiguration[14] || PowerSettingConfiguration[15] )
{
v10 = (_WNF_STATE_NAME)*((_QWORD *)PowerSettingConfiguration + 7);
LABEL_10:
StateName = v10;
LABEL_11:
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&stru_140C23628 + 3000));
v5 = 0;
*(_WNF_STATE_NAME *)&Irp->Type = StateName;
goto LABEL_12;
}
if( PopCreateNotificationName(&StateName) >= 0 )
{
v13 = *(_QWORD *)&v7->Data1 - *(_QWORD *)&GUID_ACDC_POWER_SOURCE.Data1;
if( *(_QWORD *)&v7->Data1 == *(_QWORD *)&GUID_ACDC_POWER_SOURCE.Data1 )
v13 = *(_QWORD *)v7->Data4 - *(_QWORD *)GUID_ACDC_POWER_SOURCE.Data4;
if( !v13 )
v9[6].Data[1] |= 8u;
v14 = v9[6].Data[1];
v9[7] = StateName;
v9[6].Data[1] = v14 | 1;
v4 = 1;
goto LABEL_11;
}
}
}
else
{
v10 = PopPopPowerSettingSetChangeNotification;
if( PopPopPowerSettingSetChangeNotification.Data[0]
|| PopPopPowerSettingSetChangeNotification.Data[1] != PopPopPowerSettingSetChangeNotification.Data[0] )
{
goto LABEL_10;
}
if( PopCreateNotificationName(&StateName) >= 0 )
{
PopPopPowerSettingSetChangeNotification = StateName;
goto LABEL_11;
}
}
LABEL_12:
if( v5 )
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&stru_140C23628 + 3000));
if( v4 )
PopSetNotificationWork(0x80ui64);
}Referenced by:
NtPowerInformation