RawInitialize

NTSTATUS __stdcall RawInitialize(_DRIVER_OBJECT *DriverObject, _UNICODE_STRING *RegistryPath){
  NTSTATUS result; 
  int v4; 
  INT64 v5; 
  INT64 v6; 
  INT64 v7; 
  INT64 v8; 
  INT64 v9; 
  INT64 v10; 
  UINT64 v11; 
  UINT64 v12; 
  UINT64 v13; 
  _UNICODE_STRING DestinationString; 

  DestinationString = 0i64;
  RtlInitUnicodeString(&DestinationString, L"\\Device\\RawDisk");
  LODWORD(v11) = 0;
  result = IoCreateDevice(DriverObject, 0i64, &DestinationString, 8ui64, v11, 0, &RawDeviceDiskObject);
  if( result >= 0 )
  {
    DriverObject->DriverUnload = (void(__fastcall *)(_DRIVER_OBJECT *))RawUnload;
    RtlInitUnicodeString(&DestinationString, L"\\Device\\RawCdRom");
    LODWORD(v12) = 0;
    v4 = IoCreateDevice(DriverObject, 0i64, &DestinationString, 3ui64, v12, 0, &RawDeviceCdRomObject);
    if( v4 >= 0 )
    {
      RtlInitUnicodeString(&DestinationString, L"\\Device\\RawTape");
      LODWORD(v13) = 0;
      v4 = IoCreateDevice(DriverObject, 0i64, &DestinationString, 0x20ui64, v13, 0, &RawDeviceTapeObject);
      if( v4 >= 0 )
      {
        v4 = IoRegisterShutdownNotification(RawDeviceTapeObject);
        if( v4 >= 0 )
        {
          RawDeviceDiskObject->Flags |= 0x10u;
          RawDeviceCdRomObject->Flags |= 0x10u;
          RawDeviceTapeObject->Flags |= 0x10u;
          DriverObject->MajorFunction[9] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
          DriverObject->MajorFunction[27] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
          DriverObject->MajorFunction[14] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
          DriverObject->MajorFunction[13] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
          DriverObject->MajorFunction[10] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
          DriverObject->MajorFunction[6] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
          DriverObject->MajorFunction[5] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
          DriverObject->MajorFunction[4] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
          DriverObject->MajorFunction[3] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
          DriverObject->MajorFunction[2] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
          DriverObject->MajorFunction[18] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
          DriverObject->MajorFunction[0] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
          DriverObject->MajorFunction[16] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawShutdown;
          IoRegisterFileSystem((UINT64)RawDeviceDiskObject, v5, v6);
          IoRegisterFileSystem((UINT64)RawDeviceCdRomObject, v7, v8);
          IoRegisterFileSystem((UINT64)RawDeviceTapeObject, v9, v10);
          ObfReferenceObject(RawDeviceDiskObject);
          ObfReferenceObject(RawDeviceCdRomObject);
          ObfReferenceObject(RawDeviceTapeObject);
          RawGlobalLock.Owner = 0i64;
          RawGlobalLock.Contention = 0;
          *(_DWORD *)&RawGlobalLock.gap14[8] = 0;
          qword_140C1DCF8 = (__int64)&RawMountedQueue;
          RawMountedQueue = (__int64)&RawMountedQueue;
          qword_140C1DCE8 = (__int64)&RawDismountedQueue;
          RawDismountedQueue = (__int64)&RawDismountedQueue;
          *(_QWORD *)&RawGlobalLock.gap14[20] = &RawGlobalLock.gap14[12];
          *(_QWORD *)&RawGlobalLock.gap14[12] = &RawGlobalLock.gap14[12];
          result = 0;
          RawGlobalLock.Count = 1;
          *(_WORD *)&RawGlobalLock.gap14[4] = 1;
          RawGlobalLock.gap14[6] = 6;
          return result;
        }
        IoDeleteDevice(RawDeviceTapeObject);
      }
      IoDeleteDevice(RawDeviceCdRomObject);
    }
    IoDeleteDevice(RawDeviceDiskObject);
    return v4;
  }
  return result;
}

Referenced by:

No references.