MiQueuePinDriverAddressLog

VOID __fastcall MiQueuePinDriverAddressLog(INT64 a1, UINT64 a2, UINT64 a3){
  __int64 v4; 
  unsigned __int8 CurrentIrql; 
  unsigned int v6; 
  unsigned int v7; 
  unsigned int v8; 
  unsigned int v9; 
  int v10; 
  char *v11; 
  unsigned int v12; 
  unsigned int v13; 
  __int64 *v14; 
  __int64 i; 
  int v16; 
  int v17; 
  unsigned int v18; 
  int v19; 
  int v20; 
  unsigned __int64 v21; 
  int v22; 
  unsigned int SizeOfBitMap; 
  __int64 *v24; 
  unsigned __int64 v25; 
  INT64 v26; 
  int v27; 
  v26 = a2;
  v4 = (unsigned int)a3;
  if( PoAllProcIntrDisabled || (KiBugCheckActive & 3) != 0 || KdEnteredDebugger )
    return;
  CurrentIrql = KeGetCurrentIrql();
  if( CurrentIrql < 2u )
  {
    KeGetCurrentIrql();
    __writecr8(2ui64);
  }
  v6 = -1;
  if( (word_140C2A012 & 1) == 0 )
    goto LABEL_59;
  do
  {
    v7 = v6 + 1;
    v8 = v7 < stru_140C29EA0.SizeOfBitMap ? v7 : 0;
    v9 = stru_140C29EA0.SizeOfBitMap - 1;
    v10 = ((__int64)stru_140C29EA0.Buffer & 4) != 0i64 ? 0x20 : 0;
    v11 = (char *)stru_140C29EA0.Buffer - (((__int64)stru_140C29EA0.Buffer & 4) != 0i64 ? 4 : 0);
    while( 1 )
    {
      v27 = 0;
      v12 = v10 + v9;
      v13 = v10 + v8;
      if( v9 - v8 != -1 )
        break;
      v6 = -1;
LABEL_43:
      if( !v8 )
        goto LABEL_17;
      SizeOfBitMap = v7 + 1;
      if( v7 + 1 > stru_140C29EA0.SizeOfBitMap )
        SizeOfBitMap = stru_140C29EA0.SizeOfBitMap;
      v9 = SizeOfBitMap - 1;
      v8 = 0;
    }
    v14 = (__int64 *)&v11[8 * ((unsigned __int64)v13 >> 6)];
    for( i = ((1i64 << (v13 & 0x3F)) - 1) | *v14; i == -1; i = *v14 )
    {
      if( ++v14 > (__int64 *)&v11[8 * ((unsigned __int64)v12 >> 6)] )
        goto LABEL_39;
    }
    _BitScanForward64((unsigned __int64 *)&i, ~i);
    v6 = i + ((unsigned int)(((char *)v14 - v11) >> 3) << 6);
    v27 = i;
    if( v6 > v12 )
    {
LABEL_39:
      v6 = -1;
      goto LABEL_43;
    }
    if( v6 == -1 )
      goto LABEL_43;
    v6 -= v10;
LABEL_17:
    ;
  }
  while( v6 != -1 && !(unsigned int)RtlInterlockedSetClearRun(&stru_140C29EA0, v6, 1ui64) );
  if( v6 >= 0x800 )
  {
LABEL_59:
    v24 = qword_140C29FB8;
    if( !(_BYTE)KdDebuggerEnabled )
      v24 = (__int64 *)byte_140C29FB0;
    _InterlockedAdd((volatile signed __int32 *)((char *)&v24[4 * v4] + (CurrentIrql > 2u ? 0x10 : 0)), 1u);
    goto LABEL_37;
  }
  v16 = MiFlags;
  v25 = a1 & 0xFFFFFFFFFFFFF000ui64;
  if( (((unsigned int)MiFlags >> 4) & 3) != 0 )
  {
    if( (((unsigned int)MiFlags >> 4) & 3) == 1 )
      v17 = (v25 ^ (v25 ^ (2 * v4)) & 2) & 0xFFFFFCFE | 0x101;
    else
      v17 = (v25 ^ (v25 ^ (2 * v4)) & 2) & 0xFFFFFCFE | 0x201;
  }
  else
  {
    v17 = (v25 ^ (v25 ^ (2 * v4)) & 2) & 0xFFFFFCFE | 1;
  }
  if( CurrentIrql >= 2u )
  {
    if( CurrentIrql == 2 )
      v18 = v17 & 0xFFFFFF3F | 0x40;
    else
      v18 = v17 & 0xFFFFFF3F | 0x80;
  }
  else
  {
    v18 = v17 & 0xFFFFFF3F;
  }
  LODWORD(v25) = v18;
  if( (_BYTE)KdDebuggerEnabled )
  {
    if( (_BYTE)KdDebuggerNotPresent )
      v18 = v18 & 0xFFFFF3FF | 0x400;
    else
      v18 = v18 & 0xFFFFF3FF | 0x800;
    LODWORD(v25) = v18;
  }
  v19 = v18;
  if( (v26 & 1) != 0 )
  {
    if( (((unsigned __int64)v26 >> 11) & 1) != 0 )
    {
      v18 |= 8u;
      LODWORD(v25) = v18;
    }
    v20 = v19 | 8;
    if( (((unsigned __int64)v26 >> 11) & 1) == 0 )
      v20 = v19;
    if( (v26 & 0x8000000000000000ui64) == 0 )
    {
      v18 = v20 | 0x10;
      LODWORD(v25) = v20 | 0x10;
    }
    v21 = ((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)&v26) >> 12) & 0xFFFFFFFFFi64;
    if( (v16 & 0x8000000) == 0
      || (*((_QWORD *)MmGetPfnDb() + 6 * v21 + 5) & 0x4000000000000i64) == 0
      || *((_WORD *)MmGetPfnDb() + 24 * v21 + 16) <= 1u )
    {
      goto LABEL_36;
    }
    v22 = v18 | 0x20;
  }
  else
  {
    v22 = v18 | 4;
  }
  LODWORD(v25) = v22;
LABEL_36:
  MiPinDriverAddressLog[v6] = v25;
LABEL_37:
  if( CurrentIrql < 2u )
    __writecr8(CurrentIrql);
}

Referenced by:

MiGetPhysicalAddress
MmBuildMdlForNonPagedPool