HalpIvtCreateReservedDevice
UINT64 __stdcall HalpIvtCreateReservedDevice(INT64 a1, INT64 a2){
_QWORD **v2;
_QWORD *v4;
int v5;
INT64 v6;
INT64 v7;
_QWORD *v8;
__int64 v9;
_QWORD *v10;
__int64 v11;
INT64 v13;
v13 = a1;
v2 = (_QWORD **)(a2 + 16);
v4 = *(_QWORD **)(a2 + 16);
v5 = 0;
while( v4 != v2 )
{
v4 = (_QWORD *)*v4;
++v5;
}
v13 = 0i64;
ExtEnvAllocateMemory(a1, (unsigned int)(24 * v5 + 32), &v13);
v6 = v13;
if( v13 )
{
memset((VOID *)v13, 0i64, 24 * v5 + 32);
*(_DWORD *)(v6 + 24) = v5;
if( v6 )
{
v8 = *v2;
v9 = 0i64;
while( v8 != v2 )
{
v10 = v8;
v8 = (_QWORD *)*v8;
if( (unsigned int)v9 >= *(_DWORD *)(v6 + 24) )
goto LABEL_11;
v7 = 3 * v9;
*(_QWORD *)(v6 + 8 * v7 + 32) = v10[2];
v9 = (unsigned int)(v9 + 1);
*(_QWORD *)(v6 + 8 * v7 + 40) = v10[3];
}
LODWORD(v11) = DmrConvertDeviceScope(*(unsigned __int16 *)(a2 + 32), (_BYTE *)(a2 + 34));
*(_QWORD *)v6 = v11;
if( v11 )
return v6;
LABEL_11:
if( *(_QWORD *)v6 )
{
ExtEnvFreeMemory(v7, *(_QWORD *)v6);
*(_QWORD *)v6 = 0i64;
}
ExtEnvFreeMemory(v7, v6);
return 0i64;
}
}
return v6;
}Referenced by:
IvtEnumerateRmrrDevices