ViInitSystemPhase0
VOID __stdcall ViInitSystemPhase0(_LOADER_PARAMETER_BLOCK *LoaderBlock){
__int64 v1;
__int64 v3;
int v4;
int v5;
CHAR *v6;
wchar_t *v7;
int v8;
unsigned int v9;
UINT8 *v10;
__int64 v11;
unsigned __int64 v12;
wchar_t *v13;
unsigned __int64 v14;
int v15;
UNICODE_STRING String2;
String2 = 0i64;
v1 = *((_QWORD *)LoaderBlock + 30);
v3 = *(_QWORD *)(v1 + 280);
v4 = *(_DWORD *)(v1 + 132) & 2;
v5 = VfOptionFlags & 0x7FF;
VfOptionFlags = v5;
if( (v5 & 4) != 0 )
MmVerifierTrimFrequency = 7;
if( (v5 & 0x80u) != 0 )
VfDisableCodeIntegrityBreaks();
KiInitializeMutant(&ViDriversLoadLock, 0, 1u);
qword_140C1D0B8 = (__int64)&VfSuspectDriversList;
VfSuspectDriversList = (_VF_SUSPECT_DRIVER_ENTRY *)&VfSuspectDriversList;
qword_140C1C9F8 = (__int64)&VfExcludedDriversList;
VfExcludedDriversList = (__int64)&VfExcludedDriversList;
qword_140C1C9E8 = (__int64)&VfXdvExcludedDriversList;
VfXdvExcludedDriversList = (__int64)&VfXdvExcludedDriversList;
if( VfVerifyMode == -1 )
{
VfVerifyMode = (MmVerifierData & 0x400000) != 0 ? 2 : 4;
dword_140C2A69C = VfVerifyMode;
}
if( MmVerifyDriverLevel == -1 )
{
if( (_DWORD)VfRuleClasses )
{
MmVerifyDriverLevel = 0;
VfRuleClasses = 0i64;
MmVerifyDriverBufferLength = -1;
VfRandomVerifiedDrivers = 0;
LODWORD(ViVerifyAllDrivers) = 0;
VfSafeMode = 1;
if( (VfOptionFlags & 0x410) != 0 )
VfClearanceFlag = 1;
return;
}
}
else
{
LODWORD(VfRuleClasses) = MmVerifyDriverLevel;
}
if( !v4 && v3 )
{
*(_QWORD *)&VfBugcheckTmpData = *(unsigned int *)(v3 + 56);
BugCheckParameter1 = *(_QWORD *)(v3 + 64);
qword_140D49038 = *(_QWORD *)(v3 + 72);
*(_OWORD *)&xmmword_140D49040 = *(_OWORD *)(v3 + 80);
}
if( (VfOptionFlags & 0x410) == 0
|| MmVerifyDriverLevel == -1
|| ((MmVerifyDriverBufferLength + 1) & 0xFFFFFFFE) == 0 && !VfRandomVerifiedDrivers
|| (v8 = 1, v4) )
{
v8 = 0;
}
v6 = (CHAR *)*((_QWORD *)LoaderBlock + 27);
VfClearanceFlag = v8;
if( strstr(v6, "SAFEBOOT:") || VfClearanceFlag )
{
VfRuleClassesRecord = VfRuleClasses;
MmVerifyDriverLevel = 0;
VfRuleClasses = 0i64;
MmVerifyDriverBufferLength = -1;
VfRandomVerifiedDrivers = 0;
LODWORD(ViVerifyAllDrivers) = 0;
VfSafeMode = 1;
return;
}
VfTriageSystem(LoaderBlock);
if( MmVerifyDriverLevel == -1 )
goto LABEL_15;
if( !VfRandomVerifiedDrivers && MmVerifyDriverBufferLength == -1 )
VfInitSetVerifyDriverTargets((PWCHAR)L"*", 4ui64);
if( MmVerifyDriverLevel == -1 || (MmVerifyDriverLevel & 0x400000) == 0 )
LABEL_15:
VfRandomVerifiedDrivers = 0;
if( VfRandomVerifiedDrivers )
{
v9 = HIWORD(VfRandomVerifiedDrivers);
ViExpectedDriversCount = v9;
HIWORD(VfRandomVerifiedDrivers) = 0;
if( v9 >= 3 )
{
if( v9 > 0x200 )
ViExpectedDriversCount = 512;
}
else
{
ViExpectedDriversCount = 256;
}
}
ViRandomSeed = KeQueryPerformanceCounter(0i64).LowPart;
if( (_DWORD)ViVerifyAllDrivers == 1 )
goto LABEL_43;
if( (_DWORD)ViVerifyAllDrivers == 2 )
{
LODWORD(ViVerifyAllDrivers) = 1;
LODWORD(KernelVerifier) = 1;
ViForceAllDriversSuspect = 1;
LABEL_43:
MmVerifyDriverBufferLength = 0;
goto LABEL_44;
}
if( MmVerifyDriverBufferLength == -1 )
{
if( !(unsigned int)ViInitPickRandomTargets() )
return;
MmVerifyDriverBufferLength = 0;
if( VfVerifyMode > 2 )
VfSetVerifierRunningMode(2);
goto LABEL_45;
}
LABEL_44:
VfRandomVerifiedDrivers = 0;
LABEL_45:
if( (VfOptionFlags & 1) != 0 && !VfRandomVerifiedDrivers )
{
LABEL_75:
LODWORD(ViVerifyAllDrivers) = 1;
}
else if( !(_DWORD)ViVerifyAllDrivers && !VfRandomVerifiedDrivers )
{
v7 = (wchar_t *)&MmVerifyDriverBuffer;
v10 = &MmVerifyDriverBuffer + 2 * (((unsigned __int64)(unsigned int)MmVerifyDriverBufferLength - 2) >> 1);
if( &MmVerifyDriverBuffer < v10 )
{
v11 = 0x100002601i64;
do
{
v12 = *v7;
if( (unsigned int)v12 <= 0x20 && _bittest64(&v11, v12) || (_WORD)v12 == 12288 )
{
v13 = v7;
}
else
{
if( (_DWORD)v12 == 42 )
goto LABEL_75;
v13 = v7 + 1;
if( (_DWORD)v12 == 34 )
{
++v7;
if( ++v13 >= (wchar_t *)v10 )
break;
do
{
if( *v13 == 34 )
break;
++v13;
}
while( v13 < (wchar_t *)v10 );
if( v13 >= (wchar_t *)v10 )
break;
}
else
{
while( v13 < (wchar_t *)v10 )
{
v14 = *v13;
if( (unsigned int)v14 <= 0x20 )
{
if( _bittest64(&v11, v14) )
break;
}
if( (_WORD)v14 == 12288 )
break;
++v13;
}
}
v15 = 2 * (v13 - v7);
if( v15 )
{
String2.Length = 2 * (v13 - v7);
String2.MaximumLength = v15 + 2;
if( (unsigned __int16)(v15 + 2) < (unsigned __int16)v15 )
break;
String2.Buffer = v7;
if( RtlEqualUnicodeString((UNICODE_STRING *)&VfKernelImageName, &String2, 1u) )
{
LODWORD(KernelVerifier) = 1;
break;
}
}
}
v7 = v13 + 1;
}
while( v13 + 1 < (wchar_t *)v10 );
}
}
VfInitSystemNoRebootNeeded((UINT64)v7, 1ui64);
}Referenced by:
VerifierInitSystem