PnprIsProcessorDevice

char __fastcall PnprIsProcessorDevice(_DEVICE_OBJECT *Pdo, char a2, _DWORD *a3, UINT64 *Data){
  char v4; 
  int v8; 
  UINT64 Size; 
  UINT64 Number; 
  WCHAR *SymbolicLinkList; 
  UINT64 Type; 

  v4 = 0;
  Number = 0i64;
  SymbolicLinkList = 0i64;
  LODWORD(Type) = 0;
  if( a2 )
  {
    if( IoGetDeviceInterfaces(&GUID_DEVICE_PROCESSOR, Pdo, 0i64, &SymbolicLinkList) >= 0 )
    {
      if( *SymbolicLinkList )
      {
        ExFreePoolWithTag(SymbolicLinkList, 0);
        LODWORD(Size) = 4;
        if( IoGetDevicePropertyData(
               Pdo,
               (_DEVPROPKEY *)&PROCESSOR_NUMBER_PKEY,
               0i64,
               0i64,
               Size,
               &Number,
               (UINT64 *)((char *)&Number + 4),
               &Type) >= 0
          && (_DWORD)Type == 7 )
        {
          v8 = Number;
          if( (int)HalGetProcessorIdByNtNumber((unsigned int)Number, Data) >= 0 )
          {
            *a3 = v8;
            return 1;
          }
        }
      }
    }
  }
  else
  {
    LODWORD(Size) = 4;
    if( IoGetDevicePropertyData(
           Pdo,
           (_DEVPROPKEY *)&DEVPKEY_Spare_Processor_Apic_Id,
           0i64,
           0i64,
           Size,
           Data,
           (UINT64 *)((char *)&Number + 4),
           &Type) >= 0
      && (_DWORD)Type == 7 )
    {
      *a3 = -1;
      return 1;
    }
  }
  return v4;
}

Referenced by:

PnprAddDeviceResources