VfFilterAttach
VOID __stdcall VfFilterAttach(PDEVICE_OBJECT PhysicalDeviceObject, VF_DEVOBJ_TYPE DeviceObjectType){
PDRIVER_OBJECT v4;
__int64 v5;
__int64 v6;
__int64 v7;
const _UNICODE_STRING *v8;
PDEVICE_OBJECT v9;
char *DeviceExtension;
PDEVICE_OBJECT *v11;
_OBJECT_ATTRIBUTES *DeviceCharacteristics;
_UNICODE_STRING DestinationString;
PDEVICE_OBJECT SourceDevice;
DestinationString = 0i64;
SourceDevice = 0i64;
if( !VfFilterCreated )
{
RtlInitUnicodeString(&DestinationString, L"\\DRIVER\\VERIFIER_FILTER");
IoCreateDriver((OWORD *)&DestinationString.Length, (UINT64)ViFilterDriverEntry);
VfFilterCreated = 1;
}
v4 = VfFilterDriverObject;
if( VfFilterDriverObject
&& DeviceObjectType >= VF_DEVOBJ_LOWER_DEVICE_FILTER
&& (DeviceObjectType <= VF_DEVOBJ_LOWER_CLASS_FILTER || (unsigned int)(DeviceObjectType - 5) <= 1) )
{
LODWORD(v5) = IoGetAttachedDevice((INT64)PhysicalDeviceObject);
v6 = v5;
if( *(PDRIVER_OBJECT *)(v5 + 8) != v4 )
{
if( !HviIsAnyHypervisorPresent()
|| (v7 = *(_QWORD *)(*(_QWORD *)(v6 + 8) + 40i64)) == 0
|| (v8 = (const _UNICODE_STRING *)(v7 + 88), !(unsigned __int8)RtlEqualUnicodeString(&VfVidName, v8, 1u))
&& !(unsigned __int8)RtlEqualUnicodeString(&VfSynth3DvscName, v8, 1u)
&& !(unsigned __int8)RtlEqualUnicodeString(&VfSynth3DvspName, v8, 1u) )
{
LODWORD(DeviceCharacteristics) = 256;
if( IoCreateDevice(
VfFilterDriverObject,
0x68ui64,
0i64,
0x22ui64,
(UINT64)DeviceCharacteristics,
0,
&SourceDevice) >= 0 )
{
v9 = SourceDevice;
DeviceExtension = (char *)SourceDevice->DeviceExtension;
IoInitializeRemoveLockEx((PIO_REMOVE_LOCK)(DeviceExtension + 32), 0x4C526656u, 0, 0, 0x20u);
*((_QWORD *)DeviceExtension + 11) = 0i64;
v11 = IoAttachDeviceToDeviceStack(v9, PhysicalDeviceObject);
*((_QWORD *)DeviceExtension + 1) = v11;
if( v11 )
{
v9->Flags |= (_DWORD)v11[6] & 0x86014;
v9->DeviceType = *(_DWORD *)(*((_QWORD *)DeviceExtension + 1) + 72i64);
v9->Characteristics = *(_DWORD *)(*((_QWORD *)DeviceExtension + 1) + 52i64);
v9->Flags &= ~0x80u;
*((_QWORD *)DeviceExtension + 2) = v9;
*(_QWORD *)DeviceExtension = PhysicalDeviceObject;
_InterlockedOr((volatile signed __int32 *)DeviceExtension + 25, 1u);
}
else
{
IoDeleteDevice(v9);
}
}
}
}
}
}Referenced by:
VfDevObjPostAddDevice
VfDevObjPreAddDevice