Próbuję zainicjować i partycjonować dołączony wirtualny dysk twardy za pomocą interfejsu API systemu Windows. Odniosłem sukces, używając do tego celu DeviceIoControl(), jednak za każdym razem, gdy stosuję pożądany układ dysku, system Windows automatycznie przypisuje literę dysku do partycji i wyświetla denerwujące "Czy chcesz sformatować?". dialog.Jak utworzyć partycję bez systemu Windows, przypisując literę dysku?
Moim zamiarem jest obsługa formatowania i montowania tej partycji w dalszej części programu, ale nie jestem pewien, jak zatrzymać to zachowanie. Próbowałem ustawić RecognizedPartition
na FALSE, ale wydaje się, że nie ma to żadnego wpływu.
odpowiedni kod:
Layout.PartitionStyle = PARTITION_STYLE_MBR;
Layout.PartitionCount = 4;
Layout.Mbr.Signature = MY_DISK_MBR_SIGNATURE;
Layout.PartitionEntry[0].PartitionStyle = PARTITION_STYLE_MBR;
Layout.PartitionEntry[0].PartitionNumber = 1;
Layout.PartitionEntry[0].StartingOffset.QuadPart = MY_DISK_OFFSET;
Layout.PartitionEntry[0].PartitionLength.QuadPart =
(Geom.DiskSize.QuadPart - MY_DISK_OFFSET);
Layout.PartitionEntry[0].Mbr.PartitionType = PARTITION_IFS;
Layout.PartitionEntry[0].Mbr.BootIndicator = FALSE;
Layout.PartitionEntry[0].Mbr.RecognizedPartition = FALSE;
Layout.PartitionEntry[0].Mbr.HiddenSectors =
(MY_DISK_OFFSET/Geom.Geometry.BytesPerSector);
for (int i = 0; i < 4; i++)
{
Layout.PartitionEntry[i].RewritePartition = TRUE;
}
if (!DeviceIoControl(hDisk, IOCTL_DISK_SET_DRIVE_LAYOUT_EX,
Layout, dwLayoutSz, NULL, 0, &dwReturn, NULL))
{
// Handle error
}
DeviceIoControl(hDisk, IOCTL_DISK_UPDATE_PROPERTIES,
NULL, 0, NULL, 0, &dwReturn, NULL);
Co mogę zrobić, aby uniemożliwić automatyczne przypisanie litery dysku?
Nie próbowałem go, szczególnie, że nie mam wolnego dysku na próbę. Ale co z próbą wyłącznego otwarcia urządzenia ('hDisk'), a następnie zrobienia czegoś? Po tym wszystkim, wyłączny dostęp powinien zapewnić, że menedżer góry nie powinien mieszać się w twoje sprawy, nie? (to będzie 'dwShareMode == 0') +1 oczywiście za pytanie. – 0xC0000022L
Sprawdzone - nie działa niestety – Isso