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