mountmgr.sys: Fix values returned for IOCTL_STORAGE_GET_DEVICE_NUMBER on emulated disks.

This commit is contained in:
Alexandre Julliard 2008-01-16 15:23:10 +01:00
parent 5b71d645f0
commit 4003457ff3
1 changed files with 10 additions and 4 deletions

View File

@ -142,17 +142,17 @@ static NTSTATUS create_disk_device( DRIVER_OBJECT *driver, DWORD type, DEVICE_OB
case DRIVE_REMOVABLE: case DRIVE_REMOVABLE:
info->devnum.DeviceType = FILE_DEVICE_DISK; info->devnum.DeviceType = FILE_DEVICE_DISK;
info->devnum.DeviceNumber = i; info->devnum.DeviceNumber = i;
info->devnum.PartitionNumber = 0; info->devnum.PartitionNumber = ~0u;
break; break;
case DRIVE_CDROM: case DRIVE_CDROM:
info->devnum.DeviceType = FILE_DEVICE_CD_ROM; info->devnum.DeviceType = FILE_DEVICE_CD_ROM;
info->devnum.DeviceNumber = i; info->devnum.DeviceNumber = i;
info->devnum.PartitionNumber = 0; info->devnum.PartitionNumber = ~0u;
break; break;
case DRIVE_FIXED: case DRIVE_FIXED:
default: /* FIXME */ default: /* FIXME */
info->devnum.DeviceType = FILE_DEVICE_DISK; info->devnum.DeviceType = FILE_DEVICE_DISK;
info->devnum.DeviceNumber = 1; info->devnum.DeviceNumber = 0;
info->devnum.PartitionNumber = i; info->devnum.PartitionNumber = i;
break; break;
} }
@ -441,6 +441,7 @@ static NTSTATUS WINAPI harddisk_driver_entry( DRIVER_OBJECT *driver, UNICODE_STR
UNICODE_STRING nameW, linkW; UNICODE_STRING nameW, linkW;
DEVICE_OBJECT *device; DEVICE_OBJECT *device;
NTSTATUS status; NTSTATUS status;
struct disk_device_info *info;
driver->MajorFunction[IRP_MJ_DEVICE_CONTROL] = harddisk_ioctl; driver->MajorFunction[IRP_MJ_DEVICE_CONTROL] = harddisk_ioctl;
@ -449,13 +450,18 @@ static NTSTATUS WINAPI harddisk_driver_entry( DRIVER_OBJECT *driver, UNICODE_STR
RtlInitUnicodeString( &nameW, harddisk0W ); RtlInitUnicodeString( &nameW, harddisk0W );
RtlInitUnicodeString( &linkW, physdrive0W ); RtlInitUnicodeString( &linkW, physdrive0W );
if (!(status = IoCreateDevice( driver, 0, &nameW, 0, 0, FALSE, &device ))) if (!(status = IoCreateDevice( driver, sizeof(*info), &nameW, 0, 0, FALSE, &device )))
status = IoCreateSymbolicLink( &linkW, &nameW ); status = IoCreateSymbolicLink( &linkW, &nameW );
if (status) if (status)
{ {
FIXME( "failed to create device error %x\n", status ); FIXME( "failed to create device error %x\n", status );
return status; return status;
} }
info = device->DeviceExtension;
info->name = nameW;
info->devnum.DeviceType = FILE_DEVICE_DISK;
info->devnum.DeviceNumber = 0;
info->devnum.PartitionNumber = 0;
create_drive_mount_points( driver ); create_drive_mount_points( driver );