VfDeadlockInitialize
VOID __stdcall VfDeadlockInitialize(UINT64 VerifyAllDrivers, UINT64 VerifyKernel){
int v2;
int v3;
VOID **PoolWithTag;
VOID **v5;
_QWORD *v6;
VOID **v7;
__int64 v8;
__int64 v9;
_QWORD *v10;
_QWORD *v11;
int v12;
_DWORD *v13;
int v14;
void *v15;
void *v16;
int v17;
int v18;
v2 = VerifyKernel;
v3 = VerifyAllDrivers;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x8180ui64, 1801677892i64);
ViDeadlockGlobals = PoolWithTag;
if( PoolWithTag )
{
memset(PoolWithTag, 0i64, 0x8180u);
v5 = ExAllocatePoolWithTag(0x200ui64, 0x3FF0ui64, 1801677892i64);
v6 = ViDeadlockGlobals;
*((_QWORD *)ViDeadlockGlobals + 2) = v5;
if( v5
&& (v7 = ExAllocatePoolWithTag(0x200ui64, 0x3FF0ui64, 1801677892i64),
v6 = ViDeadlockGlobals,
(*((_QWORD *)ViDeadlockGlobals + 2050) = v7) != 0i64) )
{
LODWORD(ViDeadlockDatabaseLock) = 0;
v8 = 0i64;
v9 = 1023i64;
do
{
v10 = (_QWORD *)(v8 + v6[2]);
v10[1] = v10;
*v10 = v10;
v11 = (_QWORD *)(v8 + v6[2050]);
v8 += 16i64;
v11[1] = v11;
*v11 = v11;
--v9;
}
while( v9 );
v12 = 4;
v13 = ViDeadlockGlobals;
if( ViRecursionDepthLimitFromRegistry )
v12 = ViRecursionDepthLimitFromRegistry;
*((_DWORD *)ViDeadlockGlobals + 8202) = v12;
v14 = 1000;
if( ViSearchedNodesLimitFromRegistry )
v14 = ViSearchedNodesLimitFromRegistry;
v13[8203] = v14;
((void(__fastcall *)(_NPAGED_LOOKASIDE_LIST *, unsigned __int64, VOID(__stdcall *)(VOID *), __int64, __int64, int, __int16, int, VOID(__stdcall *)(_NPAGED_LOOKASIDE_LIST *, VOID **, POOL_TYPE, UINT64, UINT64, VOID *, VOID *, INT64, UINT64, INT64, INT64, INT64)))pXdvExInitializeNPagedLookasideList)(
&ViDeadlockThreadLookaside,
(unsigned __int64)ViDeadlockKernelVerifierLookasideAllocate & -(__int64)(v2 != 0),
VfUtilFreePoolCheckIRQL,
512i64,
56i64,
1919439958,
v2 != 0 ? 512 : 32,
VfInitializedWithoutReboot,
ExInitializeNPagedLookasideListInternal);
LOWORD(v17) = v2 != 0 ? 0x2000 : 64;
((void(__fastcall *)(_NPAGED_LOOKASIDE_LIST *, unsigned __int64, VOID(__stdcall *)(VOID *), __int64, __int64, int, int, int, VOID(__stdcall *)(_NPAGED_LOOKASIDE_LIST *, VOID **, POOL_TYPE, UINT64, UINT64, VOID *, VOID *, INT64, UINT64, INT64, INT64, INT64)))pXdvExInitializeNPagedLookasideList)(
&ViDeadlockResourceLookaside,
(unsigned __int64)ViDeadlockKernelVerifierLookasideAllocate & -(__int64)(v2 != 0),
VfUtilFreePoolCheckIRQL,
512i64,
248i64,
1936020054,
v17,
VfInitializedWithoutReboot,
ExInitializeNPagedLookasideListInternal);
LOWORD(v18) = v2 != 0 ? 0x4000 : 64;
((void(__fastcall *)(_NPAGED_LOOKASIDE_LIST *, unsigned __int64, VOID(__stdcall *)(VOID *), __int64, __int64, int, int, int, VOID(__stdcall *)(_NPAGED_LOOKASIDE_LIST *, VOID **, POOL_TYPE, UINT64, UINT64, VOID *, VOID *, INT64, UINT64, INT64, INT64, INT64)))pXdvExInitializeNPagedLookasideList)(
&ViDeadlockNodeLookaside,
(unsigned __int64)ViDeadlockKernelVerifierLookasideAllocate & -(__int64)(v2 != 0),
VfUtilFreePoolCheckIRQL,
512i64,
208i64,
1685016150,
v18,
VfInitializedWithoutReboot,
ExInitializeNPagedLookasideListInternal);
if( v2 )
{
ViDeadlockPopulateLookasideCache(&ViDeadlockThreadLookaside, 0x200u);
ViDeadlockPopulateLookasideCache(&ViDeadlockNodeLookaside, 0x4000u);
ViDeadlockPopulateLookasideCache(&ViDeadlockResourceLookaside, 0x2000u);
ViDeadlockState |= 2u;
}
if( v3 )
ViDeadlockState |= 4u;
ViDeadlockDetectionApplySettings();
}
else
{
v15 = (void *)v6[2];
if( v15 )
ExFreePoolWithTag(v15, 0);
v16 = (void *)*((_QWORD *)ViDeadlockGlobals + 2050);
if( v16 )
ExFreePoolWithTag(v16, 0);
ExFreePoolWithTag(ViDeadlockGlobals, 0);
ViDeadlockGlobals = 0i64;
}
}
}Referenced by:
VfInitVerifierComponents