VfAddVerifierEntry
INT64 __fastcall VfAddVerifierEntry(_UNICODE_STRING *ImageFileName){
INT64 v1;
INT64 v2;
unsigned int v4;
UINT64 v5;
WCHAR v6;
_ETHREAD *Lock;
_VF_SUSPECT_DRIVER_ENTRY *Entry;
_VF_SUSPECT_DRIVER_ENTRY *v9;
struct _UNICODE_STRING DestinationString;
UINT64 EntryInserted;
LODWORD(EntryInserted) = 0;
DestinationString = 0i64;
if( VfSafeMode )
{
return(unsigned int)-1073740961;
}
else
{
VfDriverLock((INT64)ImageFileName, v1, v2);
VfInitSystemNoRebootNeeded(v5, 0i64);
ViDriversLoadLockOwner = 0i64;
KeReleaseMutex(&ViDriversLoadLock, 0);
RtlInitUnicodeString(&DestinationString, L"*", v6);
if( RtlEqualUnicodeString(&DestinationString, ImageFileName, 1u) )
{
Lock = MmAcquireLoadLock();
v4 = VfDriverEnableVerifierForAll();
MmReleaseLoadLock(Lock);
}
else
{
Entry = VfSuspectDriversAllocateEntry(ImageFileName);
v9 = Entry;
if( Entry )
{
v4 = MmEnableVerifierForDriver(Entry, &EntryInserted);
if( !(_DWORD)EntryInserted )
ExFreePoolWithTag(v9, 0);
}
else
{
return(unsigned int)-1073741670;
}
}
}
return v4;
}Referenced by:
NtSetSystemInformation