HalpDeviceEquals
NTSTATUS __stdcall HalpDeviceEquals(DEBUG_DEVICE_DESCRIPTOR *Device1, DEBUG_DEVICE_DESCRIPTOR *Device2){
void **v2;
__int64 v3;
int v5;
KD_NAMESPACE_ENUM NameSpace;
char v7;
unsigned __int8 BaseClass;
char v9;
unsigned __int8 SubClass;
unsigned int Slot;
__int16 v12;
unsigned __int16 PortType;
__int16 v14;
unsigned __int16 PortSubtype;
unsigned int NameSpacePathLength;
char v17;
unsigned __int16 v18;
__int16 v19;
void *retaddr;
v2 = &retaddr;
v3 = KdDebugDevice;
v5 = *(_DWORD *)(KdDebugDevice + 220);
NameSpace = Device2->NameSpace;
if( v5 != 2 )
{
if( NameSpace != KdNameSpaceAny && v5 != NameSpace )
{
LOBYTE(v2) = 0;
return(int)v2;
}
NameSpace = *(_DWORD *)(KdDebugDevice + 220);
}
if( (NameSpace & 0xFFFFFFFD) == 0 )
{
v7 = *(_BYTE *)(KdDebugDevice + 14);
BaseClass = Device2->BaseClass;
if( v7 == BaseClass || (v7 == -1 || BaseClass == 0xFF ? (LODWORD(v2) = 1) : (LODWORD(v2) = 0), (_DWORD)v2) )
{
v9 = *(_BYTE *)(KdDebugDevice + 15);
SubClass = Device2->SubClass;
if( v9 == SubClass || (v9 == -1 || SubClass == 0xFF ? (LODWORD(v2) = 1) : (LODWORD(v2) = 0), (_DWORD)v2) )
{
if( *(_DWORD *)KdDebugDevice == Device2->Bus
|| (*(_DWORD *)KdDebugDevice == -1 || Device2->Bus == -1 ? (LODWORD(v2) = 1) : (LODWORD(v2) = 0), (_DWORD)v2) )
{
LODWORD(v2) = *(_DWORD *)(KdDebugDevice + 4);
Slot = Device2->Slot;
if( (_DWORD)v2 == Slot || (_DWORD)v2 == -1 || Slot == -1 )
goto LABEL_54;
}
}
}
}
if( v5 == 1 || NameSpace == KdNameSpaceAny )
{
v12 = *(_WORD *)(KdDebugDevice + 204);
PortType = Device2->PortType;
if( v12 == PortType || (v12 == -1 || PortType == 0xFFFF ? (LODWORD(v2) = 1) : (LODWORD(v2) = 0), (_DWORD)v2) )
{
v14 = *(_WORD *)(KdDebugDevice + 206);
PortSubtype = Device2->PortSubtype;
if( v14 == PortSubtype
|| (v14 == -1 || PortSubtype == 0xFFFF ? (LODWORD(v2) = 1) : (LODWORD(v2) = 0), (_DWORD)v2) )
{
LODWORD(v2) = *(_DWORD *)(KdDebugDevice + 232);
if( (_DWORD)v2 == -1 )
goto LABEL_54;
NameSpacePathLength = Device2->NameSpacePathLength;
if( NameSpacePathLength == -1 )
goto LABEL_54;
if( (_DWORD)v2 == NameSpacePathLength )
{
LODWORD(v2) = wcsncmp(*(const WCHAR **)(KdDebugDevice + 224), Device2->NameSpacePath, (unsigned int)v2);
if( !(_DWORD)v2 )
goto LABEL_54;
}
}
}
}
v17 = 0;
if( NameSpace != KdNameSpaceNone )
goto LABEL_55;
LODWORD(v2) = Device2->NameSpace;
if( *(_DWORD *)(v3 + 220) != (_DWORD)v2 )
goto LABEL_55;
if( ((LODWORD(v2) = *(unsigned __int16 *)(v3 + 204), v18 = Device2->PortType, (_WORD)v2 == v18)
|| (_WORD)v2 == 0xFFFF
|| v18 == 0xFFFF)
&& ((v19 = *(_WORD *)(v3 + 206), LODWORD(v2) = Device2->PortSubtype, v19 == (_WORD)v2)
|| v19 == -1
|| (_WORD)v2 == 0xFFFF) )
{
LABEL_54:
v17 = 1;
}
else
{
v17 = 0;
}
LABEL_55:
LOBYTE(v2) = v17;
return(int)v2;
}Referenced by:
HalpKdEnumerateDebuggingDevices