VfThunkAddDriverThunks

INT64 __stdcall VfThunkAddDriverThunks(
        PVOID ThunkBuffer,
        UINT64 ThunkBufferSize,
        _KLDR_DATA_TABLE_ENTRY *DataTableEntry){
  INT64 v3; 
  INT64 v4; 
  _LIST_ENTRY *ThunkTable; 
  INT64 v6; 
  _LIST_ENTRY *Blink; 
  int v9[10]; 
  ThunkTable = (_LIST_ENTRY *)ViThunkCreateThunkTable(ThunkBuffer, ThunkBufferSize, (INT64)DataTableEntry);
  if( !ThunkTable )
    return 3221225626i64;
  VfDriverLock(v4, v3, v6);
  VfThunksExtended = 1;
  _InterlockedOr(v9, 0);
  Blink = ViVerifierDriverAddedThunkListHead.Blink;
  ++ViActiveVerifierThunks;
  if( ViVerifierDriverAddedThunkListHead.Blink->Flink != &ViVerifierDriverAddedThunkListHead )
    __fastfail(3u);
  ThunkTable->Flink = &ViVerifierDriverAddedThunkListHead;
  ThunkTable->Blink = Blink;
  Blink->Flink = ThunkTable;
  ViVerifierDriverAddedThunkListHead.Blink = ThunkTable;
  ViDriversLoadLockOwner = 0i64;
  KeReleaseMutex(&ViDriversLoadLock, 0);
  return 0i64;
}

Referenced by:

MmAddVerifierThunks