PiPnpRtlGatherDeviceDeleteInfo

INT64 __fastcall PiPnpRtlGatherDeviceDeleteInfo(WCHAR *SourceString, INT64 a2){
  VOID *PoolWithTag; 
  WCHAR v5; 
  _DWORD *v6; 
  int v7; 
  int DeviceRegProp; 
  _DWORD *v9; 
  struct _UNICODE_STRING DestinationString; 
  struct _UNICODE_STRING Buffer; 
  __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  int v16; 
  unsigned int v17; 
  v16 = 0;
  DestinationString = 0i64;
  PoolWithTag = ExAllocatePoolWithTag(PagedPool, 0x54ui64, 0x47706E50ui64);
  *(_QWORD *)a2 = PoolWithTag;
  if( !PoolWithTag )
  {
    DeviceRegProp = -1073741670;
LABEL_19:
    *(_QWORD *)a2 = 0i64;
    return(unsigned int)DeviceRegProp;
  }
  memset((INT64)PoolWithTag, 0i64);
  RtlInitUnicodeString(&DestinationString, SourceString, v5);
  v6 = *(_DWORD **)a2;
  if( *(_QWORD *)a2 )
  {
    v15 = 0i64;
    v13 = 0i64;
    v14 = 0i64;
    Buffer = DestinationString;
    ZwPlugPlayControl();
    if( v7 >= 0 )
      *v6 = v14;
    v6 = *(_DWORD **)a2;
  }
  else
  {
    v7 = -1073741811;
  }
  if( v7 < 0 )
  {
    v6 = *(_DWORD **)a2;
    **(_DWORD **)a2 = 45;
  }
  v17 = 78;
  DeviceRegProp = CmGetDeviceRegProp(
                    PiPnpRtlCtx,
                    SourceString,
                    0i64,
                    9,
                    (__int64)&v16,
                    (__int64)(v6 + 1),
                    (__int64)&v17,
                    0);
  if( DeviceRegProp >= 0 && v16 == 1 && v17 > 2 )
  {
    v9 = *(_DWORD **)a2;
    *(_WORD *)(*(_QWORD *)a2 + 80i64) = 0;
  }
  else
  {
    v9 = *(_DWORD **)a2;
    DeviceRegProp = 0;
    *(_WORD *)(*(_QWORD *)a2 + 4i64) = 0;
  }
  if( DeviceRegProp < 0 )
  {
    if( v9 )
      ExFreePoolWithTag(v9, 0x47706E50u);
    goto LABEL_19;
  }
  return(unsigned int)DeviceRegProp;
}

Referenced by:

PiPnpRtlCmActionCallback