ViDdiDriverEntry
INT64 __fastcall ViDdiDriverEntry(_DRIVER_OBJECT *DriverObject, _UNICODE_STRING *RegistryPath){
int v4;
__int64 v5;
NTSTATUS v6;
PDEVICE_OBJECT v7;
int v8;
__int64 i;
__int64 v10;
NTSTATUS v11;
UINT64 DeviceCharacteristics;
PDEVICE_OBJECT DeviceObject;
DeviceObject = 0i64;
DriverObject->MajorFunction[23] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))ViDdiDispatchWmi;
ViDdiDeviceObjectArray = (__int64)ExAllocatePoolWithTag(NonPagedPoolNx, 8ui64, 0x61446656ui64);
if( !ViDdiDeviceObjectArray )
return 3221225626i64;
v4 = 0;
v5 = 0i64;
do
{
LODWORD(DeviceCharacteristics) = 384;
v6 = IoCreateDevice(DriverObject, 4ui64, 0i64, 0x22ui64, DeviceCharacteristics, 0, &DeviceObject);
if( v6 < 0 )
return(unsigned int)v6;
v7 = DeviceObject;
*(_QWORD *)(v5 + ViDdiDeviceObjectArray) = DeviceObject;
v5 += 8i64;
**((_DWORD **)v7 + 8) = v4++;
}
while( !v4 );
v8 = 0;
for( i = 0i64; ; i += 8i64 )
{
v10 = *(_QWORD *)(i + ViDdiDeviceObjectArray);
*(_DWORD *)(v10 + 48) &= ~0x80u;
v11 = IoWMIRegistrationControl((DEVICE_OBJECT *)v10, 1ui64);
if( v11 < 0 )
break;
if( ++v8 )
return 0i64;
}
IoDeleteDevice((_DEVICE_OBJECT *)v10);
return(unsigned int)v11;
}Referenced by:
No references.