HalpDmaInsertDeviceObjectByToken
NTSTATUS __stdcall HalpDmaInsertDeviceObjectByToken(UINT64 Token, _DEVICE_OBJECT *DeviceObject){
char v2;
NTSTATUS v4;
char v5;
unsigned __int64 v7;
__int64 *i;
VOID **PoolWithTag;
VOID ***v11;
v4 = 0;
v5 = v2;
v7 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc(&HalpDmaPdoListLock);
for( i = (__int64 *)HalpDmaPdoList; i != &HalpDmaPdoList; i = (__int64 *)*i )
{
if( i[2] == Token )
{
if( !i[3] )
i[3] = (__int64)DeviceObject;
goto LABEL_6;
}
}
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x28ui64, 543973704i64);
if( PoolWithTag )
{
*(_OWORD *)PoolWithTag = 0i64;
*((_OWORD *)PoolWithTag + 1) = 0i64;
PoolWithTag[4] = 0i64;
PoolWithTag[2] = (VOID *)Token;
PoolWithTag[3] = DeviceObject;
*((_BYTE *)PoolWithTag + 32) = v5;
v11 = (VOID ***)qword_140C4BC28;
if( *(__int64 **)qword_140C4BC28 != &HalpDmaPdoList )
__fastfail(3u);
*PoolWithTag = &HalpDmaPdoList;
PoolWithTag[1] = v11;
*v11 = PoolWithTag;
qword_140C4BC28 = (__int64)PoolWithTag;
}
else
{
v4 = -1073741670;
}
LABEL_6:
KxReleaseSpinLock(&HalpDmaPdoListLock);
__writecr8(v7);
return v4;
}Referenced by:
HalpDmaCheckAdapterToken
HalpDmaLinkDeviceObjectByToken