Сбой VirtualAlloc на определенных конфигурациях жесткого диска - PullRequest
1 голос
/ 30 июня 2009

По какой-то причине в моем приложении при работе на некоторой конфигурации жесткого диска (RAID, случайные разделы, через отдельный контроллер IDE, а не в разделе операционных систем), VirtualAlloc возвращает null с кодом GetLastError ERROR_INVALID_PARAMETER.

Единственным параметром, кроме переданных флагов (MEM_COMMIT | MEM_TOP_DOWN, PAGE_READWRITE), является размер, рассчитанный как кратное размеру сектора, полученное из геометрии диска (к сожалению, я не могу отправить код из-за NDA и т. Д.).

Просто интересно, есть ли у кого-нибудь такой опыт? или если кто-то знает причину, по которой Windows может по-разному относиться к размерам страниц на дисках, являющихся частью рейда или разделенных на разделы?, любая помощь очень ценится, спасибо!

1 Ответ

0 голосов
/ 30 июня 2009

Проблема была связана с DeviceIoControl при попытке вернуть IOCTL_DISK_GET_DRIVE_GEOMETRY, казалось, возвращал полный мусор при использовании чего-либо, кроме основного жесткого диска, я решил эту проблему, используя вместо этого GetDiskFreeSpace, чтобы получить информацию о секторе и все работает нормально

очевидно, выяснить, почему IOCTL_DISK_GET_DRIVE_GEOMETRY является мусором, было бы идеально, но я рад, что это работает!

...