WmipDriverEntry
INT64 __fastcall WmipDriverEntry(_DRIVER_OBJECT *DriverObject, _UNICODE_STRING *RegistryPath){
INT64 result;
INT8 v4;
WCHAR v5;
WCHAR v6;
NTSTATUS v7;
UINT64 DeviceCharacteristics;
struct _UNICODE_STRING DeviceName;
struct _STRING DestinationString;
struct _UNICODE_STRING SymbolicLinkName;
DeviceName = 0i64;
SymbolicLinkName = 0i64;
DestinationString = 0i64;
KeInitializeMutex(&WmipSMMutex, 0i64);
WmipInitializeRegistration(0i64);
WmipEventWorkQueueItem.Parameter = 0i64;
WmipEventWorkQueueItem.List.Flink = 0i64;
WmipNPNotificationSpinlock = 0i64;
WmipEventWorkQueueItem.WorkerRoutine = WmipEventNotification;
result = WmipInitializeDataStructs();
if( (int)result >= 0 )
{
RtlInitAnsiString(&DestinationString, "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\WMI", v4);
RtlAnsiStringToUnicodeString(&WmipRegistryPath, &DestinationString, 1u);
result = WmipInitializeSecurity();
if( (int)result >= 0 )
{
RtlInitUnicodeString(&DeviceName, L"\\Device\\WMIDataDevice", v5);
LODWORD(DeviceCharacteristics) = 256;
LODWORD(result) = IoCreateDevice(
DriverObject,
0i64,
&DeviceName,
0x22ui64,
DeviceCharacteristics,
0,
&WmipServiceDeviceObject);
if( (int)result >= 0 )
{
RtlInitUnicodeString(&SymbolicLinkName, L"\\DosDevices\\WMIDataDevice", v6);
v7 = IoCreateSymbolicLink(&SymbolicLinkName, &DeviceName);
if( v7 < 0 )
{
IoDeleteDevice(WmipServiceDeviceObject);
}
else
{
*((_BYTE *)WmipServiceDeviceObject + 76) = 2;
DriverObject->MajorFunction[14] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))WmipIoControl;
DriverObject->MajorFunction[23] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))WmipSystemControl;
DriverObject->MajorFunction[0] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))&WmipOpenCloseCleanup;
DriverObject->MajorFunction[2] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))&WmipOpenCloseCleanup;
DriverObject->MajorFunction[18] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))&WmipOpenCloseCleanup;
*((_DWORD *)WmipServiceDeviceObject + 12) &= ~0x80u;
IoWMIRegistrationControl(WmipServiceDeviceObject, 1ui64);
IoRegisterShutdownNotification(WmipServiceDeviceObject);
}
return(unsigned int)v7;
}
}
}
return result;
}Referenced by:
No references.