PnpGetDevicePropertyData

__int64 __fastcall PnpGetDevicePropertyData(
        __int64 a1,
        INT64 a2,
        unsigned int a3,
        __int64 a4,
        size_t a5,
        VOID *a6,
        unsigned int *a7,
        INT64 a8){
  __int64 v11; 
  _ETHREAD *CurrentThread; 
  unsigned int ObjectProperty; 
  __int64 v15; 
  unsigned int *v16; 
  _UNICODE_STRING String; 
  char v18[176]; 

  memset(v18, 0i64, 0xAAu);
  *(_QWORD *)&String.Length = 0i64;
  if( a1 )
    v11 = *(_QWORD *)(*(_QWORD *)(a1 + 312) + 40i64);
  else
    v11 = 0i64;
  if( !v11 || !*(_QWORD *)(v11 + 48) )
    return(unsigned int)-1073741808;
  if( a3 )
  {
    String.Buffer = (wchar_t *)v18;
    String.MaximumLength = 170;
    if( !RtlLCIDToCultureName(a3, (INT64)&String) )
      return(unsigned int)-1073741823;
  }
  else
  {
    String.Buffer = 0i64;
  }
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquireResourceSharedLite((UINT64)&PnpReplaceEvent + 7968, 1);
  ObjectProperty = PnpGetObjectProperty(
                     *(&stru_140CF2E80 + 1214),
                     *(_QWORD *)(v11 + 48),
                     1i64,
                     0i64,
                     (INT64)String.Buffer,
                     a2,
                     a8,
                     (INT64)a6);
  if( *(_DWORD *)(a2 + 16) == 2 )
  {
    v15 = *(_QWORD *)a2 - *(_QWORD *)&INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data1;
    if( *(_QWORD *)a2 == *(_QWORD *)&INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data1 )
      v15 = *(_QWORD *)(a2 + 8) - *(_QWORD *)INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data4;
    if( !v15 )
    {
      if( ObjectProperty == -1073741772 || ObjectProperty == -1073741275 )
      {
        v16 = *(unsigned int **)(*(_QWORD *)(a1 + 312) + 88i64);
        if( v16 )
        {
          if( a7 )
            *a7 = *v16;
          if( a5 >= *v16 )
          {
            memmove(a6, v16 + 1, *v16);
            ObjectProperty = 0;
          }
          else
          {
            ObjectProperty = -1073741789;
          }
        }
        else
        {
          ObjectProperty = -1073741772;
        }
      }
      else if( !ObjectProperty )
      {
        PnpCompareInterruptInformation(a1, a6, *a7);
      }
    }
  }
  ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 7968));
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  if( ObjectProperty == -1073741275 )
    return(unsigned int)-1073741772;
  return ObjectProperty;
}

Referenced by:

IoGetDevicePropertyData