IopFindResourceHandlerInfo
UINT8 __stdcall IopFindResourceHandlerInfo(
_RESOURCE_HANDLER_TYPE HandlerType,
_DEVICE_NODE *DeviceNode,
UINT8 ResourceType,
VOID **HandlerEntry){
__int32 v5;
unsigned __int16 NoArbiterMask;
__int64 v7;
unsigned __int16 QueryArbiterMask;
_QWORD **v9;
_QWORD *i;
*HandlerEntry = 0i64;
v5 = HandlerType - 1;
if( v5 )
{
if( v5 != 1 )
return 0;
NoArbiterMask = DeviceNode->NoArbiterMask;
v7 = 488i64;
QueryArbiterMask = DeviceNode->QueryArbiterMask;
}
else
{
NoArbiterMask = DeviceNode->NoTranslatorMask;
v7 = 504i64;
QueryArbiterMask = DeviceNode->QueryTranslatorMask;
}
v9 = (_QWORD **)((char *)DeviceNode + v7);
if( (NoArbiterMask & (unsigned __int16)(1 << ResourceType)) != 0 )
return 1;
if( (QueryArbiterMask & (unsigned __int16)(1 << ResourceType)) != 0 || ResourceType > 0xFu )
{
for( i = *v9; i != v9; i = (_QWORD *)*i )
{
if( *((_BYTE *)i + 16) == ResourceType )
{
if( ResourceType <= 0xFu || i[3] )
*HandlerEntry = i;
return 1;
}
}
}
return 0;
}Referenced by:
IoTranslateBusAddress
IopSetupArbiterAndTranslators