2016-10-06 3 views
0

수십 개의 예제처럼 볼륨 {GUID} 및 WriteFile 기능으로 CreateFile으로 직접 USB 드라이브에 데이터를 쓰는 C++ WinAPI 프로그램을 개발 중입니다. 비고 here을 언급 한 바와 같이 :USB 드라이브 WriteFile을 볼륨 외 섹터로

볼륨이 마운트 된 파일 시스템이없는 경우 볼륨 손잡이에 쓰기가 성공하거나 다음 조건 중 하나에 해당하는 경우 :

  • 섹터 기록 할 대상은 부트 섹터입니다.
  • 파일 시스템 공간 외부에 상주하도록 기록 할 섹터.
  • FSCTL_LOCK_VOLUME 또는 FSCTL_DISMOUNT_VOLUME을 사용하여 볼륨을 명시 적으로 잠 그거나 분리했습니다.
  • 볼륨에 실제 파일 시스템이 없습니다. (즉, RAW 파일 시스템이 마운트 있습니다.)

내가 원활히 마운트 해제하지 않고 100MB의 USB에 데이터를 기록 할 수 있습니다. 그래서 위의 두 가지 경우를 시도했습니다.

  1. 두 번째 경우 : 파일 시스템 외부에서 작성 (FAT32 테이블을 확장하지 않고 파티션 당 섹터 수를 확장했습니다)이지만 마운트 해제하지 않으면 작동하지 않습니다!
  2. 네 번째 경우 : 파일 시스템없이 볼륨에 쓰기 (포맷되지 않음). 하지만 언 마운트하지 않고도 작동하지 않습니다 !!!

또한 또한 실패 파일 시스템없이와/두 번째 파티션 (즉, Windows 용 보이지 않는) 생성하고 첫 번째 파티션의 끝에서 오프셋에 의해 직접이 작성했지만, 한 : 나는 읽을 수 없습니다 또는 거기에 쓰십시오.

그래서, 사람이 적어도 질문에 한 대답을 알고있는 경우 :

  1. 어떻게 파일 시스템 외부 파티션 내에서 섹터를 만들 수 있습니까?
  2. USB에 원활하게 쓸 수 있습니까?
  3. 드라이버, NTCreateFile 및 기타 심층 기능을 사용하지 않고도 USB의 두 번째 파티션에 Windows로 쓸 수 있습니까?
+3

이것은 맬웨어에만 해당 될 수 있습니다. 맞습니까? –

+0

@DavidHeffernan 아니, 그냥 학문적 목적을 위해 :) 나는 USB와 FAT32 형식으로 뛰어 들었고 msdn 발언이 정확한지 확인하려고했습니다. – heyjohnnyfunt

답변

2

나는 실제로 효과가 있었지만 Windows를 우회하고 있다는 것을 알지 못합니다. 즉, Windows가 당신이 한 일을 알아 채지 못할 것입니다. 따라서 Windows를 사용하여 수행 한 작업을 확인하면 변경 사항이보고되지 않습니다.

개별 하위 질문을 처리하려면 다음과 같이하십시오. 일반 파일 시스템이 전체 파티션을 채우므로 그렇게 할 수 없습니다. 귀하의 기능은 USB에 원활하게 기록됩니다. 문제는 아닙니다. Windows는 일반적으로 USB를 파티션되지 않은 저장소로 취급합니다.

+0

답변 해 주셔서 감사합니다! HxD를 사용하여 드라이브의 변경 사항을 확인했지만 아무 일도 일어나지 않았습니다. 또한 WriteFile 및 ReadFile은 0 바이트의 쓰기/읽기 바이트를 반환합니다. 맞습니까? 파티션 섹터의 크기를 늘리면 파일 시스템이 자동으로 해당 공간을 채 웁니다. 그러나 Microsoft가 "파일 시스템 공간 외부에 존재하도록 작성된 섹터"의 의미는 무엇입니까? 마운트 된 파티션을 사용하면 원활하게 쓸 수 없습니다. 잠겨 있거나 마운트 해제 된 경우에만 쓸 수 있습니다 ... 확인 가능한 파티션에만 쓸 수 있습니까? – heyjohnnyfunt