HalpDmaInsertDeviceObjectByToken
NTSTATUS __stdcall HalpDmaInsertDeviceObjectByToken(UINT64 Token, DEVICE_OBJECT *DeviceObject){
char v2;
NTSTATUS v4;
char v5;
unsigned __int8 v7;
unsigned __int64 v8;
__int64 *i;
_OWORD *PoolWithTag;
_QWORD *v12;
v4 = 0;
v5 = v2;
KeAcquireSpinLockRaiseToDpc(&HalpDmaPdoListLock, (UINT64)DeviceObject);
v8 = v7;
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(NonPagedPoolNx, 0x28ui64, 0x206C6148ui64);
if( PoolWithTag )
{
*PoolWithTag = 0i64;
PoolWithTag[1] = 0i64;
*((_QWORD *)PoolWithTag + 4) = 0i64;
*((_QWORD *)PoolWithTag + 2) = Token;
*((_QWORD *)PoolWithTag + 3) = DeviceObject;
*((_BYTE *)PoolWithTag + 32) = v5;
v12 = (_QWORD *)qword_140C4BC28;
if( *(__int64 **)qword_140C4BC28 != &HalpDmaPdoList )
__fastfail(3u);
*(_QWORD *)PoolWithTag = &HalpDmaPdoList;
*((_QWORD *)PoolWithTag + 1) = v12;
*v12 = PoolWithTag;
qword_140C4BC28 = (__int64)PoolWithTag;
}
else
{
v4 = -1073741670;
}
LABEL_6:
KxReleaseSpinLock(&HalpDmaPdoListLock);
__writecr8(v8);
return v4;
}Referenced by:
HalpDmaCheckAdapterToken
HalpDmaLinkDeviceObjectByToken