'STATUS_MEDIA_WRITE_PROTECTED'에 해당되는 글 1건

  1. 2008/12/05 STATUS_MEDIA_WRITE_PROTECTED 1

STATUS_MEDIA_WRITE_PROTECTED
2008/12/05 09:29
파일 필터 드라이버 기능중에 이동저장장치(외장하드, USB저장장치등)에 쓰기금지기능이 있다.
이동저장장치에서 자유롭게 읽기는 가능해도 쓰기는 안되게 하는 기능인데...
이 기능이 다른 프로그램에서는 제대로 동작하는 한글2007에서는 원본파일을 강제로 2KB로 만들어 버린다.

코드를 살펴보니 IRP_MJ_WRITE시 STATUS_ACCESS_DENIED를 리턴하여 쓰기금지 기능을 수행하고 있다.
대체로 양호하게 동작을 수행하는데 유독 한글2007에서만 파일이 깨진다.

Filemon, Filespy로 IRP를 들여다 봐도 별반 차이가 없고 왜 그럴까 하던차에 SD 메모리카드에 lock기능이 있길래 lock으로 설정을 하고 쓰기기능을 수행한 결과.

눈에 띄는게 IRP_MJ_SET_INFORMATION의 FileEndOfFileInformation 일때STATUS_MEDIA_WRITE_PROTECTED 값을 리턴한다.

MSDN에 이런 내용이 있다.

FileEndOfFileInformation
This is called when someone is trying to change the logical size of the stream. Note that when the cache manager’s lazy writer thread attempts to set a new end of file no oplock check is made. This is because the check will have been made previously when the real write request came in.

결국 이동저장장치에 쓰기금지를 하려면
일반적으로 IRP_MJ_WRITE에서 막으면 되겠지만 프로그램에 따라(특히 한글2007 같이 cache를 사용한다면)...
IRP_MJ_SET_INFORMATION(FileEndOfFileInformation)에서도 알맞는 처리를 해줘야 한다.

NTSTATUS.H를 참조해서 STATUS_ACCESS_DENIED를 하던지...STATUS_MEDIA_WRITE_PROTECTED를 하던지 취향에 맞게 하면 되겠다.
2008/12/05 09:29 2008/12/05 09:29
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

  • PROpecia 2011/09/14 04:19  댓글주소  수정/삭제  댓글쓰기
    좋은 정보 감사! ㅎㅎ
    즐거운 하루 되세요~