ExInitializeNPagedLookasideListInternal

__int64 __fastcall ExInitializeNPagedLookasideListInternal(
        __int64 a1,
        PVOID (__stdcall *a2)(POOL_TYPE PoolType, SIZE_T NumberOfBytes, ULONG Tag),
        void (__stdcall *a3)(PVOID P, ULONG Tag),
        int a4,
        int a5,
        int a6,
        __int16 a7,
        int a8){
  UINT64 v12; 
  unsigned __int8 v13; 
  unsigned __int64 v14; 
  _LIST_ENTRY *Blink; 
  _LIST_ENTRY *v16; 
  __int64 result; 
  InitializeSListHead((_SLIST_HEADER *)a1);
  *(_WORD *)(a1 + 16) = ExMinimumLookasideDepth;
  *(_WORD *)(a1 + 18) = 256;
  *(_DWORD *)(a1 + 40) = a6;
  *(_DWORD *)(a1 + 44) = a5;
  *(_QWORD *)(a1 + 20) = 0i64;
  *(_QWORD *)(a1 + 28) = 0i64;
  *(_DWORD *)(a1 + 36) = a4;
  if( !a2 )
    a2 = (PVOID(__stdcall *)(POOL_TYPE, SIZE_T, ULONG))ExAllocatePoolWithTag;
  *(_QWORD *)(a1 + 48) = a2;
  if( !a3 )
    a3 = ExFreePoolWithTag;
  *(_QWORD *)(a1 + 56) = a3;
  *(_QWORD *)(a1 + 80) = 0i64;
  KeAcquireSpinLockRaiseToDpc(ExNPagedLookasideLock, v12);
  v14 = v13;
  if( a8 )
  {
    *(_WORD *)(a1 + 18) = -1;
    *(_WORD *)(a1 + 16) = a7;
  }
  else if( !ExMinimumLookasideDepth )
  {
    *(_DWORD *)(a1 + 16) = -65536;
  }
  Blink = ExNPagedLookasideListHead.Blink;
  v16 = (_LIST_ENTRY *)(a1 + 64);
  if( ExNPagedLookasideListHead.Blink->Flink != &ExNPagedLookasideListHead )
    __fastfail(3u);
  v16->Flink = &ExNPagedLookasideListHead;
  v16->Blink = Blink;
  Blink->Flink = v16;
  ExNPagedLookasideListHead.Blink = v16;
  KxReleaseSpinLock(ExNPagedLookasideLock);
  result = (unsigned int)KiIrqlFlags;
  __writecr8(v14);
  return result;
}

Referenced by:

CcInitializeCacheManager
ExInitializeNPagedLookasideList
FsRtlInitializeFileLocks
MiInitNucleus
PopInitializeIrpWorkers
RtlInitializeCompression
WmipInitializeRegistration