HalpDmaZeroMapBuffers

void __fastcall HalpDmaZeroMapBuffers(__int64 a1, _QWORD *a2, unsigned int a3, unsigned int a4){
  unsigned int v4; 
  unsigned __int8 CurrentIrql; 
  __int64 v7; 
  char v8; 
  unsigned __int64 v9; 
  _QWORD *v10; 
  unsigned int i; 
  _QWORD *j; 
  size_t v13; 
  INT64 v14[2]; 
  __int128 v15; 
  __int128 v16; 
  __int64 v17; 
  unsigned int v18; 

  v18 = a3;
  v4 = a4;
  *(_OWORD *)v14 = 0i64;
  v17 = 0i64;
  v15 = 0i64;
  v16 = 0i64;
  CurrentIrql = KeGetCurrentIrql();
  v7 = a3 & 0xFFF;
  v8 = 0;
  v9 = (v7 + (unsigned __int64)a4 + 4095) >> 12;
  if( CurrentIrql <= 2u )
  {
    if( CurrentIrql < 2u )
    {
      CurrentIrql = KeGetCurrentIrql();
      __writecr8(2ui64);
      v8 = 1;
    }
    HalpDmaAcquireBufferMappings(v7, a2, v9, (__int64)v14);
    a3 = v18;
  }
  else
  {
    v10 = a2;
    for( i = 0; i < (unsigned int)v9; ++i )
    {
      if( (v10[6] & 0xFFFFFFFFFFFFF000ui64) == 0 )
        KeBugCheckEx(0xACu, (PVOID)0x1000, (PVOID)0xEF06, 0i64, 0i64);
      v10 = (_QWORD *)v10[1];
    }
  }
  for( j = a2; v4; v4 -= v13 )
  {
    v13 = v4;
    if( v4 >= 4096 - a3 )
      v13 = 4096 - a3;
    memset((VOID *)((j[6] & 0xFFFFFFFFFFFFF000ui64) + a3), 0i64, v13);
    j = (_QWORD *)j[1];
    a3 = 0;
  }
  if( CurrentIrql <= 2u )
    HalpDmaReleaseBufferMappings((INT64)v10, (INT64)a2, (unsigned int)v9, (INT64)v14);
  if( v8 )
    __writecr8(CurrentIrql);
}

Referenced by:

HalpMapTransferV2
HalpMapTransferV3