ExpAllocateFannedOutPushLock

VOID *__stdcall ExpAllocateFannedOutPushLock(VOID *ParentLock, UINT64 Flags, UINT64 a3){
  VOID *v4; 
  unsigned int v5; 
  __int64 *v6; 
  unsigned int v7; 
  __int64 v8; 
  __int64 v9; 
  unsigned int v10; 
  __int64 v11; 
  __int64 v12; 

  v4 = ExSaAllocate(0x10ui64);
  if( v4 != (VOID *)-1i64 )
  {
    KeQueryMaximumProcessorCountEx(0xFFFFu);
    if( v5 )
    {
      v6 = (__int64 *)*(&WheapDeferredInternalLogsEventLock + 52);
      v7 = ((unsigned int)v4 >> 13) & 0x3FFFF;
      v8 = ((unsigned int)v4 >> 4) & 0x1FF;
      v9 = v5;
      do
      {
        _BitScanReverse(&v10, v7);
        v11 = *v6++;
        v12 = *(_QWORD *)(*(_QWORD *)(v11 + 8i64 * (v10 - 2)) + 8 * (v7 ^ (unsigned __int64)(unsigned int)(1 << v10)) + 8);
        *(_QWORD *)(v12 + 8 * v8) = 0i64;
        *(_QWORD *)(v12 + 8 * v8 + 8) = ParentLock;
        --v9;
      }
      while( v9 );
    }
  }
  return v4;
}

Referenced by:

ExpTryExpandAutoExpandPushLock