ExpFreeAsid
VOID __stdcall ExpFreeAsid(UINT64 AsidToFree){
unsigned int v1;
_EPROCESS *Process;
_QWORD *v3;
int v5;
_KLOCK_QUEUE_HANDLE LockHandle;
v1 = AsidToFree;
memset(&LockHandle, 0, sizeof(LockHandle));
Process = KeGetCurrentThread()->ApcState.Process;
KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&WheapDeferredInternalLogsEventLock + 291, &LockHandle);
v3 = (_QWORD *)(*(&WheapDeferredInternalLogsEventLock + 290) + 16i64 * v1);
if( v3[1]-- == 1i64 )
{
*v3 = 0i64;
v5 = 1;
--*(&WheapDeferredInternalLogsEventLock + 578);
}
else
{
v3[1] |= 0x8000000000000000ui64;
v5 = 0;
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
if( v5 == 1 )
HalPutDmaAdapter((PADAPTER_OBJECT)Process);
}Referenced by:
ExFreeSvmAsid
ExpAssignPasid