HalpFindDevice
_DEVICES_IN_USE *__stdcall HalpFindDevice(_DEBUG_DEVICE_DESCRIPTOR *Device){
_DEVICES_IN_USE *v1;
_DEVICES_IN_USE *v2;
_DEVICES_IN_USE *v4;
char v5;
_LIST_ENTRY *Blink;
KD_NAMESPACE_ENUM NameSpace;
bool v8;
unsigned int NameSpacePathLength;
const WCHAR *Flink;
v1 = (_DEVICES_IN_USE *)*(&CmpDummyThreadEvent + 529);
v2 = 0i64;
v4 = 0i64;
v5 = 0;
while( v1 != (_DEVICES_IN_USE *)((char *)&CmpDummyThreadEvent + 4232) )
{
Blink = v1->ListHead.Blink;
v4 = v1;
NameSpace = Device->NameSpace;
if( HIDWORD(Blink[13].Blink) != NameSpace )
goto LABEL_12;
if( NameSpace )
{
NameSpacePathLength = Device->NameSpacePathLength;
if( LODWORD(Blink[14].Blink) != NameSpacePathLength )
goto LABEL_12;
if( !Device->NameSpacePath )
goto LABEL_12;
Flink = (const WCHAR *)Blink[14].Flink;
if( !Flink )
goto LABEL_12;
v8 = wcsncmp(Device->NameSpacePath, Flink, NameSpacePathLength) == 0;
}
else
{
if( LODWORD(Blink->Flink) != Device->Bus || HIDWORD(Blink->Flink) != Device->Slot )
goto LABEL_12;
v8 = LOWORD(Blink->Blink) == Device->Segment;
}
if( v8 )
{
v5 = 1;
break;
}
LABEL_12:
v1 = *(_DEVICES_IN_USE **)&v1->DeviceCount;
}
if( v5 == 1 )
return v4;
return v2;
}Referenced by:
HalpKdReleaseDebuggingDevice
HalpKdSetupDebuggingDevice
HalpRegisterDeviceInUse