HalpQueueMapBufferWorker
VOID __stdcall HalpQueueMapBufferWorker(_ADAPTER_OBJECT *ChildAdapter, UINT64 NumberOfMapRegisters){
int v2;
__int64 v4;
VOID **PoolWithTag;
v2 = NumberOfMapRegisters;
v4 = ChildAdapter->ScatterGather != 0 ? 4 : 0;
if( !_InterlockedCompareExchange((volatile signed __int32 *)((char *)&HalpDmaGrowMapBufferWorkerQueued + v4), 1, 0) )
{
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x38ui64, 543973704i64);
if( PoolWithTag )
{
*PoolWithTag = 0i64;
PoolWithTag[2] = HalpGrowMapBufferWorker;
PoolWithTag[3] = PoolWithTag;
PoolWithTag[4] = ChildAdapter->MasterAdapter;
*((_DWORD *)PoolWithTag + 11) = v2;
*((_BYTE *)PoolWithTag + 40) = ChildAdapter->ScatterGather;
*((_DWORD *)PoolWithTag + 12) = ChildAdapter->AdapterObject.LibraryVersion;
ExQueueWorkItem((PWORK_QUEUE_ITEM)PoolWithTag, DelayedWorkQueue);
}
else
{
*(_DWORD *)((char *)&HalpDmaGrowMapBufferWorkerQueued + v4) = 0;
}
}
}Referenced by:
HalAllocateAdapterChannelV2
HalpAllocateDmaResourcesInternal
HalpDmaProcessMapRegisterQueueV2
IoFreeAdapterChannelV2