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