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