2009-06-30 28 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是垃圾將是理想的,但我很高興,它的作品!