Skip to content

Commit

Permalink
[VCDROM] Implement the virtual CD-ROM class driver.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
HeisSpiter committed Dec 3, 2017
1 parent 63d4622 commit 6906e18
Show file tree
Hide file tree
Showing 6 changed files with 1,293 additions and 0 deletions.
1 change: 1 addition & 0 deletions modules/rosapps/drivers/CMakeLists.txt
@@ -1 +1,2 @@
add_subdirectory(green)
add_subdirectory(vcdrom)
7 changes: 7 additions & 0 deletions modules/rosapps/drivers/vcdrom/CMakeLists.txt
@@ -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)
29 changes: 29 additions & 0 deletions modules/rosapps/drivers/vcdrom/vcdioctl.h
@@ -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;

0 comments on commit 6906e18

Please sign in to comment.