2009-06-30 5 views
1

VirtualAlloc은 운영 체제 파티션이 아닌 별도의 IDE 컨트롤러를 통해 하드 디스크의 일부 구성 (RAID, 임의 파티션)을 실행할 때 어떤 이유로 응용 프로그램에서 nullGetLastError으로 반환합니다 코드는 ERROR_INVALID_PARAMETER입니다.하드 디스크의 특정 구성에서 VirtualAlloc이 실패 함

깃발 (MEM_COMMIT | MEM_TOP_DOWN, PAGE_READWRITE)을 제외하고 유일한 매개 변수는 디스크 형상에서 얻은 섹터 크기의 배수로 계산 된 크기입니다 (불행히도 NDA 등으로 인해 게시 코드가 없습니다).

누구나이 경험이 있는지 궁금하십니까? 또는 누군가가 급습이나 파티션의 일부인 디스크에서 페이지 크기를 다르게 처리하는 이유를 아는 사람이 있다면 어떤 도움을 주셔서 감사합니다!

+1

이미 예약 된 블록을 커밋하려고 시도 할 때 블록을 예약 할 때 주소가 할당 단위의 배수로 반올림되었는지 여부를 확인하고 있습니까? 요청한 크기를 계산할 때 비정상적으로 많은 양의 메모리를 요청하는 것에 대해 어떤 보호 장치가 있습니까? –

+0

오프셋은 섹터 크기의 세분화로 반올림되며이 오류를 방지하기 위해 체크인합니다. 그러나 많은 양의 메모리가 요청되는 것을 지키지 않는 것처럼 보입니다. 길이가 실패 할 때 – Stowelly

+0

문제는 DeviceIoControl에있는 것처럼 보입니다. 주 하드 드라이브가 아닌 디스크의 경우 올바른 드라이브 형상, 아이디어를 반환하지 않습니다. – Stowelly

답변

0

문제가 IOCTL_DISK_GET_DRIVE_GEOMETRY가 주 하드 디스크 이외의 것을 사용하는 경우 전체 쓰레기를 반환 할 듯 반환 할 때 DeviceIoControl을 함께 할 수 있었다, 내가 대신 섹터 정보를 얻을 수 GetDiskFreeSpace를 사용하여이 문제를 해결하고 모든 작업을 잘

입니다

분명히 IOCTL_DISK_GET_DRIVE_GEOMETRY가 왜 쓰레기인지 알아내는 것이 이상적 일지 모르지만 그것이 효과가 있다는 것이 기쁘다!

관련 문제