HalpDmaFreeMapRegisters
void __fastcall HalpDmaFreeMapRegisters(__int64 a1, __int64 a2, unsigned int a3){
unsigned int v3;
_QWORD *v7;
__int64 v8;
unsigned __int64 v9;
char v10;
char v11;
unsigned __int8 CurrentIrql;
unsigned __int64 v13;
__int128 v14[3];
__int64 v15;
_QWORD *v16;
v3 = 0;
v15 = 0i64;
v7 = (_QWORD *)a2;
memset(v14, 0, sizeof(v14));
if( a3 )
{
do
{
v16 = (_QWORD *)v7[1];
v8 = v7[6];
if( (v8 & 0x20) != 0 )
{
v9 = v8 & 0xFFFFFFFFFFFFFFDFui64;
v10 = 0;
v11 = 0;
v7[6] = v9;
CurrentIrql = 0;
if( (v9 & 0xFFFFFFFFFFFFF000ui64) == 0 )
{
CurrentIrql = KeGetCurrentIrql();
if( CurrentIrql > 2u )
KeBugCheckEx(0xACu, 0x1000ui64, 0xEF03ui64, 0i64, 0i64);
if( CurrentIrql < 2u )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v11 = 1;
}
HalpDmaAcquireBufferMappings(2i64, v7, 1u, (__int64)v14);
v10 = 1;
}
v13 = v7[6] & 0xFFFFFFFFFFFFF000ui64;
if( v13 )
memset(v13, 0i64);
if( v10 )
HalpDmaReleaseBufferMappings(v13, a2, 1u, (__int64)v14);
if( v11 )
__writecr8(CurrentIrql);
}
HalpDmaReturnPageToOwner(a1, *(_QWORD *)(a1 + 152), (unsigned __int64)v7);
v7 = v16;
++v3;
}
while( v3 < a3 );
}
}Referenced by:
HalDmaAllocateCrashDumpRegistersEx
HalDmaFreeCrashDumpRegistersEx
HalpDmaFreeCrashDumpRegisters
HalpDmaProcessMapRegisterQueueV2
IoFreeMapRegistersV2
IoFreeMapRegistersV3