HalpDmaProcessMapRegisterQueueV2
void __fastcall HalpDmaProcessMapRegisterQueueV2(__int64 a1, char a2){
__int64 *v4;
__int64 v5;
__int64 v6;
__int64 v7;
__int64 v8;
__int64 MapRegisters;
int v10;
unsigned int v11;
while( 1 )
{
v4 = HalpDmaDequeueAdapter(a1, a2);
v7 = (__int64)v4;
if( !v4 )
break;
v8 = v4[43];
MapRegisters = HalpDmaAllocateMapRegisters((__int64)v4, *((_DWORD *)v4 + 60), v5, v6);
*(_QWORD *)(v7 + 232) = MapRegisters;
if( !MapRegisters )
{
HalpDmaQueueAdapter(v7);
HalpQueueMapBufferWorker(v7, *(_DWORD *)(v7 + 240));
return;
}
v10 = (*(__int64(__fastcall **)(_QWORD, _QWORD, __int64, _QWORD))(v8 + 24))(
*(_QWORD *)(v8 + 48),
*(_QWORD *)(v8 + 56),
MapRegisters,
*(_QWORD *)(v8 + 32));
if( v10 == 3 )
{
*(_DWORD *)(v7 + 240) = 0;
v10 = 2;
}
if( v10 == 2 )
{
v11 = *(_DWORD *)(v7 + 240);
if( v11 )
{
HalpDmaFreeMapRegisters(v7, *(_QWORD *)(v7 + 232), v11);
*(_DWORD *)(v7 + 240) = 0;
}
IoFreeAdapterChannel((PDMA_ADAPTER)v7);
}
}
}Referenced by:
HalpGrowMapBufferWorker
IoFreeMapRegistersV2