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; 
  unsigned int v13; 
  __int128 v14[3]; 
  __int64 v15; 
  unsigned int v16; 
  v16 = a3;
  v4 = a4;
  memset(v14, 0, sizeof(v14));
  v15 = 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 = v16;
  }
  else
  {
    v10 = a2;
    for( i = 0; i < (unsigned int)v9; ++i )
    {
      if( (v10[6] & 0xFFFFFFFFFFFFF000ui64) == 0 )
        KeBugCheckEx(0xACu, 0x1000ui64, 0xEF06ui64, 0i64, 0i64);
      v10 = (_QWORD *)v10[1];
    }
  }
  for( j = a2; v4; v4 -= v13 )
  {
    v13 = v4;
    if( v4 >= 4096 - a3 )
      v13 = 4096 - a3;
    memset((j[6] & 0xFFFFFFFFFFFFF000ui64) + a3, 0i64);
    j = (_QWORD *)j[1];
    a3 = 0;
  }
  if( CurrentIrql <= 2u )
    HalpDmaReleaseBufferMappings((__int64)v10, (__int64)a2, v9, (__int64)v14);
  if( v8 )
    __writecr8(CurrentIrql);
}

Referenced by:

HalpMapTransferV2
HalpMapTransferV3