Module: wine Branch: master Commit: 07e92a7dad0c881efda10b5f3c914c178b0bbcf9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=07e92a7dad0c881efda10b5f3c...
Author: Alexandre Julliard julliard@winehq.org Date: Fri Jan 4 14:21:27 2008 +0100
mountmgr.sys: Create a hard disk device for PhysicalDrive0.
---
dlls/mountmgr.sys/mountmgr.c | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 50 insertions(+), 0 deletions(-)
diff --git a/dlls/mountmgr.sys/mountmgr.c b/dlls/mountmgr.sys/mountmgr.c index 3bc9534..f6c0f20 100644 --- a/dlls/mountmgr.sys/mountmgr.c +++ b/dlls/mountmgr.sys/mountmgr.c @@ -58,11 +58,58 @@ static NTSTATUS WINAPI mountmgr_ioctl( DEVICE_OBJECT *device, IRP *irp ) return irp->IoStatus.u.Status; }
+/* handler for ioctls on the harddisk device */ +static NTSTATUS WINAPI harddisk_ioctl( DEVICE_OBJECT *device, IRP *irp ) +{ + IO_STACK_LOCATION *irpsp = irp->Tail.Overlay.s.u.CurrentStackLocation; + + TRACE( "ioctl %x insize %u outsize %u\n", + irpsp->Parameters.DeviceIoControl.IoControlCode, + irpsp->Parameters.DeviceIoControl.InputBufferLength, + irpsp->Parameters.DeviceIoControl.OutputBufferLength ); + + switch(irpsp->Parameters.DeviceIoControl.IoControlCode) + { + default: + FIXME( "unsupported ioctl %x\n", irpsp->Parameters.DeviceIoControl.IoControlCode ); + irp->IoStatus.u.Status = STATUS_NOT_SUPPORTED; + break; + } + return irp->IoStatus.u.Status; +} + +/* driver entry point for the harddisk driver */ +static NTSTATUS WINAPI harddisk_driver_entry( DRIVER_OBJECT *driver, UNICODE_STRING *path ) +{ + static const WCHAR harddisk0W[] = {'\','D','e','v','i','c','e', + '\','H','a','r','d','d','i','s','k','0',0}; + static const WCHAR physdrive0W[] = {'\','?','?','\','P','h','y','s','i','c','a','l','D','r','i','v','e','0',0}; + + UNICODE_STRING nameW, linkW; + DEVICE_OBJECT *device; + NTSTATUS status; + + driver->MajorFunction[IRP_MJ_DEVICE_CONTROL] = harddisk_ioctl; + + RtlInitUnicodeString( &nameW, harddisk0W ); + RtlInitUnicodeString( &linkW, physdrive0W ); + if (!(status = IoCreateDevice( driver, 0, &nameW, 0, 0, FALSE, &device ))) + status = IoCreateSymbolicLink( &linkW, &nameW ); + if (status) + { + FIXME( "failed to create device error %x\n", status ); + return status; + } + + return status; +} + /* main entry point for the mount point manager driver */ NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *path ) { static const WCHAR device_mountmgrW[] = {'\','D','e','v','i','c','e','\','M','o','u','n','t','P','o','i','n','t','M','a','n','a','g','e','r',0}; static const WCHAR link_mountmgrW[] = {'\','?','?','\','M','o','u','n','t','P','o','i','n','t','M','a','n','a','g','e','r',0}; + static const WCHAR harddiskW[] = {'\','D','r','i','v','e','r','\','H','a','r','d','d','i','s','k',0};
UNICODE_STRING nameW, linkW; DEVICE_OBJECT *device; @@ -82,5 +129,8 @@ NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *path ) return status; }
+ RtlInitUnicodeString( &nameW, harddiskW ); + status = IoCreateDriver( &nameW, harddisk_driver_entry ); + return status; }