Необходимо получить смещение разделов жёсткого диска. Я делаю это следующим образом:
PDRIVE_LAYOUT_INFORMATION_EX partitions;
DWORD partitionsSize = sizeof(DRIVE_LAYOUT_INFORMATION_EX)
+ 127 * sizeof(PARTITION_INFORMATION_EX);
partitions = (PDRIVE_LAYOUT_INFORMATION_EX)malloc(partitionsSize);
HANDLE h = CreateFile(L"\\\\.\\PhysicalDrive0", FILE_ANY_ACCESS ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, 0, 0);
if (h == INVALID_HANDLE_VALUE)
{
// handle error and exit
}
if (DeviceIoControl(h, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, NULL, 0, partitions,
partitionsSize, 0, NULL) != 0)
{
// do stuff with partitions here
}
Данный код корректно отрабатывает на Windows 10, однако мне необходима совместимость с Windows 7. Приложение падает на вызове DeviceIoControl со следующим выводом отладчика: Unhandled exception at 0x76B5D2EA (KernelBase.dll) in myapp.exe: 0xC0000005: Access violation writing location 0x00000000.
Для сборки использовал компилятор Microsoft Visual Studio 14.0
Для решения испробовал следующее: менял параметры доступа в вызове CreateFile, запускал от имени администратора
При вызове DeviceIoControl
c флагом IOCTL_DISK_GET_DRIVE_LAYOUT_EX
без использования асинхронного чтения параметр lpBytesReturned
должен быть ненулевым указателем, согласно документации:
If lpOverlapped
is NULL
, lpBytesReturned
cannot be NULL
. Even when an operation returns no output data and lpOutBuffer is NULL, DeviceIoControl
makes use of lpBytesReturned
. After such an operation, the value of lpBytesReturned
is meaningless.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пытаюсь понять, как работает данное решение с валидатором (вложенный в 'do' while)Никак не могу понять порядок исполнения кода
Нужно записывать метаданные и большие файлы в удаленную MongoDBИзвестен адрес сервера с монгой
подскажите пожалуйста как передвинуть или удалить маркер в google map Android