Windows에서 dd를 구현하려고합니다. [설명 : dd의 if/dev/hda of =/dev/hdb 기능을 복제하려고합니다. Windows 설치를 더 큰 HD로 마이그레이션하기 위해서입니다. 기괴하게 충분히, 나는이 접근 방식을 두 번 성공적으로 사용했습니다. - G]ReadFile은 PhysicalDrive 끝 부분에서 EOF를 알리지 않습니다.
프로그램이 작동하지만 (대상 디스크에 복사 된 원본 데이터로 끝납니다.) 자체적으로 종료되지는 않습니다. 전체 원본 디스크를 읽은 후에야 만 tskill해야합니다.
CreateFile 호출에서 "\\. \ PhysicalDriveX"구문을 사용하여 원본 및 대상 실제 드라이브를 열고 잠그는 데 아무런 문제가 없습니다.
내 문제는 원본 드라이브 데이터의 끝을 성공적으로 감지하는 것입니다.
// doesn't work - won't detect End-of-valid drive data and reads endlessly
while ((success = ReadFile(hInfile, buffer, BUFSIZE, &nRead, NULL)) && nRead != 0) {
// ... write the data to the target drive; break if it fails.
// ... write a progress indicator to the console
}
// should execute but never does
if (! success) {
// an error occurred, do cleanup.
}
else {
// all done, unlock & close filehandles
puts("ta da!");
}
EOF는 '정상'파일 (동기 IO시) TRUE 반환하지만, 0 읽은 바이트 수 (nRead)를 설정에서 ReadFile에 의해 신호된다
은 현재 내가 사용 32K 덩어리를 읽고 있어요 이것은 내 서투른 while() 문에서 시도한 것입니다.
ReadFile은 원본 PhysicalDrive의 유효한 데이터 끝을지나 읽으면 null 바이트 블록을 반환하는 것으로 보입니다.
언제 읽을 수 있는지 알 수있는 올바른 방법은 무엇입니까? - 시작하기 전에 IOCTL_DISK_GET_LENGTH_INFO를 사용해야합니까? ReadFile은 디스크 끝을 지나서 읽을 때 EOF (또는 실패)를보고해야하므로 조금 중복됩니다.
미리 감사드립니다.
흠, 잘 모르겠습니다. SDK 설명서에 따르면 ReadFile이 FALSE를 반환하면 GetLastError를 호출하기 만하면되며 OVERLAPPED IO가 수행되는 경우 EOF를 검색하는 데 필요합니다. 내 ReadFile 호출의 마지막 매개 변수는 NULL 포인터입니다. 동기 IO를 수행 중입니다. – Gerard