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