2009-06-30 72 views
1

由于某些原因,在运行某些硬盘配置(RAID,随机分区,通过单独的IDE控制器,而不是操作系统分区)时,我的应用程序返回nullGetLastError代码ERROR_INVALID_PARAMETERVirtualAlloc在hdd的某些配置上失败

除了标志(MEM_COMMIT | MEM_TOP_DOWN, PAGE_READWRITE)传入的唯一参数是根据从磁盘几何获得的扇区大小的倍数计算的大小(不幸的是,由于NDA等原因,我无法发布代码)。

想知道有没有人有这方面的经验?或者如果有人知道为什么Windows可能会在不同的磁盘上对页面大小进行不同的处理,那么任何帮助都非常感谢!

+1

当您试图提交一个已经保留的块时,您是否在检查保留该块时是否将地址舍入为分配粒度的倍数?在计算所需的大小时,是否有任何保护措施来防止请求异常大的内存? – 2009-06-30 10:53:33

回答

0

问题是试图返回IOCTL_DISK_GET_DRIVE_GEOMETRY似乎使用除主硬盘以外的任何时返回完整的垃圾时做的DeviceIoControl,我解决了这个用GetDiskFreeSpace,而不是让该部门的信息,是所有工作的罚款

显然找出为什么IOCTL_DISK_GET_DRIVE_GEOMETRY是垃圾将是理想的,但我很高兴,它的作品!