Пишу драйвер, который подключает виртуальный диск. Когда происходит Маунт диска, диск появляется, как "Съмное устройство". А как сделать так, чтобы подключаемый диск появлялся в системе, как "Логический диск"?
Вот код ответов на некоторые иоконтролы в драйвере:
case IOCTL_DISK_GET_MEDIA_TYPES:
case IOCTL_DISK_GET_DRIVE_GEOMETRY:
if (irpSp->Parameters.DeviceIoControl.OutputBufferLength <
sizeof (DISK_GEOMETRY))
{
Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
Irp->IoStatus.Information = 0;
}
else
{
PDISK_GEOMETRY outputBuffer = (PDISK_GEOMETRY)
Irp->AssociatedIrp.SystemBuffer;
outputBuffer->MediaType = RemovableMedia; // пробовала и - FixedMedia - ничего не изменяется...
outputBuffer->Cylinders.QuadPart = Extension->NumberOfCylinders;
outputBuffer->TracksPerCylinder = Extension->TracksPerCylinder;
outputBuffer->SectorsPerTrack = Extension->SectorsPerTrack;
outputBuffer->BytesPerSector = Extension->BytesPerSector;
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = sizeof (DISK_GEOMETRY);
}
break;
case IOCTL_DISK_GET_PARTITION_INFO:
if (irpSp->Parameters.DeviceIoControl.OutputBufferLength <
sizeof (PARTITION_INFORMATION))
{
Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
Irp->IoStatus.Information = 0;
}
else
{
PPARTITION_INFORMATION outputBuffer = (PPARTITION_INFORMATION)
Irp->AssociatedIrp.SystemBuffer;
outputBuffer->PartitionType = Extension->PartitionType;
outputBuffer->BootIndicator = FALSE;
outputBuffer->RecognizedPartition = TRUE;
outputBuffer->RewritePartition = FALSE;
outputBuffer->StartingOffset = RtlConvertUlongToLargeInteger (0);
outputBuffer->PartitionLength.QuadPart= Extension->DiskLength;
outputBuffer->HiddenSectors = 1L;
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = sizeof (PARTITION_INFORMATION);
}
break;
case IOCTL_DISK_GET_DRIVE_LAYOUT:
if (irpSp->Parameters.DeviceIoControl.OutputBufferLength <
sizeof (DRIVE_LAYOUT_INFORMATION))
{
Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
Irp->IoStatus.Information = 0;
}
else
{
PDRIVE_LAYOUT_INFORMATION outputBuffer = (PDRIVE_LAYOUT_INFORMATION)
Irp->AssociatedIrp.SystemBuffer;
outputBuffer->PartitionCount = 1;
outputBuffer->Signature = 0;
outputBuffer->PartitionEntry->PartitionType = Extension->PartitionType;
outputBuffer->PartitionEntry->BootIndicator = FALSE;
outputBuffer->PartitionEntry->RecognizedPartition = TRUE;
outputBuffer->PartitionEntry->RewritePartition = FALSE;
outputBuffer->PartitionEntry->StartingOffset = RtlConvertUlongToLargeInteger (0);
outputBuffer->PartitionEntry->PartitionLength.QuadPart= Extension->DiskLength;
outputBuffer->PartitionEntry->HiddenSectors = 1L;
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = sizeof (PARTITION_INFORMATION);
}
break;
04.07.08 13:50: Перенесено модератором из 'C/C++' — Кодт
07.07.08 02:35: Перенесено модератором из 'WIN API' — Хитрик Денис
Здравствуйте, Aniramap, Вы писали:
A>Пишу драйвер, который подключает виртуальный диск. Когда происходит Маунт диска, диск появляется, как "Съмное устройство". А как сделать так, чтобы подключаемый диск появлялся в системе, как "Логический диск"?
Логично было бы задать вопрос в форуме "Низкоуровневое программирование".
Обратите внимание ещё на запросы: IOCTL_STORAGE_GET_MEDIA_TYPES, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, IOCTL_STORAGE_GET_HOTPLUG_INFO.
У меня для запроса IOCTL_STORAGE_GET_HOTPLUG_INFO код такой (хотя у меня как раз Removable диск):
case IOCTL_STORAGE_GET_HOTPLUG_INFO:
{
if (ioStackLocation->Parameters.DeviceIoControl.OutputBufferLength < sizeof(STORAGE_HOTPLUG_INFO))
{
Irp->IoStatus.Information = sizeof(STORAGE_HOTPLUG_INFO);
status = STATUS_BUFFER_TOO_SMALL;
}
else
{
PSTORAGE_HOTPLUG_INFO info;
info = Irp->AssociatedIrp.SystemBuffer;
info->Size = sizeof(STORAGE_HOTPLUG_INFO);
info->MediaRemovable = TRUE;
info->MediaHotplug = TRUE;
info->DeviceHotplug = TRUE;
info->WriteCacheEnableOverride = FALSE;
Irp->IoStatus.Information = sizeof(STORAGE_HOTPLUG_INFO);
status = STATUS_SUCCESS;
}
break;
}
Здравствуйте, Maxim S. Shatskih, Вы писали:
A>>Пишу драйвер, который подключает виртуальный диск. Когда происходит Маунт диска, диск появляется, как "Съмное устройство". А как сделать так, чтобы подключаемый диск появлялся в системе, как "Логический диск"?
MSS>Флаг FILE_REMOVABLE_MEDIA стоит?
Да, стоит! Спасибо большое! Убрала флаг и все заработало.