[VCDROM] Implement the virtual CD-ROM class driver.

It was provided by MS as a separate package to download for Windows (up to 7).
That class driver allows creating virtual drives on which we can later mount ISOs images.
It's rather basic, but does the job.

To use it, you can use the GUI app from Microsoft (Virtual CD-ROM Control Panel)
or the vcdcli in CLI. We're compatible :-).

Note that it's not loaded at boot, you need to manually start it, to lower memory footprint.
Both applications will handle this for you.
This commit is contained in:
Pierre Schweitzer 2017-12-03 18:10:32 +01:00
parent 63d46228b8
commit 6906e184bb
No known key found for this signature in database
GPG key ID: 7545556C3D585B0B
6 changed files with 1293 additions and 0 deletions

View file

@ -1 +1,2 @@
add_subdirectory(green)
add_subdirectory(vcdrom)

View file

@ -0,0 +1,7 @@
add_library(vcdrom SHARED vcdrom.c vcdrom.rc)
set_module_type(vcdrom kernelmodedriver)
target_link_libraries(vcdrom ${PSEH_LIB})
add_importlibs(vcdrom ntoskrnl hal)
add_cd_file(TARGET vcdrom DESTINATION reactos/system32/drivers FOR all)
add_registry_inf(vcdrom_reg.inf)

View file

@ -0,0 +1,29 @@
#define IOCTL_VCDROM_BASE 0x2
#define IOCTL_VCDROM_CREATE_DRIVE CTL_CODE(IOCTL_VCDROM_BASE, 0xCC0, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VCDROM_DELETE_DRIVE CTL_CODE(IOCTL_VCDROM_BASE, 0xCC1, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VCDROM_MOUNT_IMAGE CTL_CODE(IOCTL_VCDROM_BASE, 0xCC2, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VCDROM_ENUMERATE_DRIVES CTL_CODE(IOCTL_VCDROM_BASE, 0xCC3, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VCDROM_GET_IMAGE_PATH CTL_CODE(IOCTL_VCDROM_BASE, 0xCC4, METHOD_BUFFERED, FILE_ANY_ACCESS)
typedef struct _MOUNT_PARAMETERS
{
WCHAR Path[255];
USHORT Length;
ULONG Flags;
} MOUNT_PARAMETERS, *PMOUNT_PARAMETERS;
#define MOUNT_FLAG_SUPP_UDF 0x1
#define MOUNT_FLAG_SUPP_JOLIET 0x2
typedef struct _DRIVES_LIST
{
USHORT Count;
WCHAR Drives[26];
} DRIVES_LIST, *PDRIVES_LIST;
typedef struct _IMAGE_PATH
{
WCHAR Path[255];
USHORT Length;
USHORT Mounted;
} IMAGE_PATH, *PIMAGE_PATH;

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,5 @@
#define REACTOS_VERSION_DLL
#define REACTOS_STR_FILE_DESCRIPTION "Virtual CD-ROM Class Driver"
#define REACTOS_STR_INTERNAL_NAME "vcdrom"
#define REACTOS_STR_ORIGINAL_FILENAME "vcdrom.sys"
#include <reactos/version.rc>

View file

@ -0,0 +1,7 @@
; Vcdrom class driver
[AddReg]
HKLM,"SYSTEM\CurrentControlSet\Services\Vcdrom","ErrorControl",0x00010001,0x00000000
HKLM,"SYSTEM\CurrentControlSet\Services\Vcdrom","Group",0x00000000,"SCSI Class"
HKLM,"SYSTEM\CurrentControlSet\Services\Vcdrom","ImagePath",0x00020000,"system32\drivers\vcdrom.sys"
HKLM,"SYSTEM\CurrentControlSet\Services\Vcdrom","Start",0x00010001,0x00000003
HKLM,"SYSTEM\CurrentControlSet\Services\Vcdrom","Type",0x00010001,0x00000001