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