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.