ExInitializeLookasideListExInternal
NTSTATUS __stdcall ExInitializeLookasideListExInternal(
_LOOKASIDE_LIST_EX *Lookaside,
VOID **Allocate,
POOL_TYPE a3,
UINT64 a4,
UINT64 a5,
_LOOKASIDE_LIST_EX *a6,
VOID *Free,
VOID *a8,
_LOOKASIDE_LIST_EX *a9,
INT64 PoolType,
INT64 Flags,
UINT64 Size,
INT64 Tag,
INT64 Depth,
UINT64 CacheDisabled){
int v15;
__int16 v17;
VOID(__stdcall *v19)(VOID *, VOID *);
unsigned __int16 v20;
int v21;
int v22;
_LIST_ENTRY *v23;
UINT64 *v24;
unsigned __int64 v25;
_LIST_ENTRY *Blink;
_LIST_ENTRY *p_ListEntry;
unsigned int v29;
v15 = a4;
v17 = (__int16)a8;
v19 = *(VOID(__stdcall **)(VOID *, VOID *))&a3;
if( (_WORD)a8 )
{
if( (unsigned __int16)((_WORD)a8 - 256) > 0x300u )
return -1073741578;
}
else
{
v17 = 256;
}
v20 = 0;
if( !(_DWORD)a9 )
v20 = v17;
v21 = 8;
if( (unsigned __int64)a6 > 8 )
v21 = (int)a6;
v29 = v21;
if( (((_DWORD)a5 - 1) & (unsigned int)a5) != 0 || (a5 & 0xFFFFFFFC) != 0 )
return -1073741581;
if( (a5 & 1) != 0 )
{
v22 = 16;
}
else
{
v22 = 0;
if( (_DWORD)a5 )
v22 = 8;
}
if( (a4 & 0xFFFFFC18) != 0 || (a4 & 3) == 3 )
return -1073741582;
v23 = (_LIST_ENTRY *)((char *)&WheapDeferredInternalLogsEventLock + 2832);
v24 = (UINT64 *)((char *)&WheapDeferredInternalLogsEventLock + 2880);
if( (a4 & 1) != 0 )
v23 = (_LIST_ENTRY *)((char *)&WheapDeferredInternalLogsEventLock + 2816);
if( (a4 & 1) != 0 )
v24 = (UINT64 *)((char *)&WheapDeferredInternalLogsEventLock + 2848);
InitializeSListHead(&Lookaside->L.ListHead);
Lookaside->L.Depth = ExMinimumLookasideDepth;
Lookaside->L.Tag = (unsigned int)Free;
Lookaside->L.Size = v29;
Lookaside->L.MaximumDepth = v20;
*(_QWORD *)&Lookaside->L.TotalAllocates = 0i64;
*(_QWORD *)&Lookaside->L.TotalFrees = 0i64;
Lookaside->L.Type = v15 | v22;
if( !Allocate )
Allocate = (VOID **)CmpAllocateTransientPoolWithTag;
Lookaside->L.AllocateEx = (void *(__fastcall *)(_POOL_TYPE, unsigned __int64, unsigned int, _LOOKASIDE_LIST_EX *))Allocate;
if( !v19 )
v19 = ExFreePoolEx;
Lookaside->L.FreeEx = (void(__fastcall *)(void *, _LOOKASIDE_LIST_EX *))v19;
*(_QWORD *)&Lookaside->L.LastTotalAllocates = 0i64;
v25 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc(v24);
if( (_DWORD)a9 )
{
Lookaside->L.Depth = v20;
Lookaside->L.MaximumDepth = -1;
}
else if( !ExMinimumLookasideDepth )
{
*(_DWORD *)&Lookaside->L.Depth = -65536;
}
Blink = v23->Blink;
p_ListEntry = &Lookaside->L.ListEntry;
if( Blink->Flink != v23 )
__fastfail(3u);
p_ListEntry->Flink = v23;
p_ListEntry->Blink = Blink;
Blink->Flink = p_ListEntry;
v23->Blink = p_ListEntry;
KxReleaseSpinLock(v24);
__writecr8(v25);
return 0;
}Referenced by:
VmInitSystem