2015年2月5日木曜日

共有アクセスモードの取り扱い

DokanNetでは、CreateFileに渡されるFileAccessが限定されています。Read, Write, ReadWrite

実はもっと沢山有って、DokanNetのCreateFileProxyから渡される情報を鵜呑みにしたのでは、はまってしまいます。

Generic Access Rights
https://msdn.microsoft.com/en-us/library/windows/desktop/aa446632(v=vs.85).aspx

File Access Rights Constants
https://msdn.microsoft.com/en-us/library/windows/desktop/gg258116(v=vs.85).aspx

詳しくはDokanNetのソースコードを見れば早いのですが、Query専用で開くCreateFileに対応できていません。

(FileAccess)0  ← これが欠けています。代わりにReadが来るので、場合によっては、共有違反扱いになります。
Read
Write
ReadWrite

例えば、GetFileSizeの実装として、CreateFileを使うと思うのですが、場合によっては、共有違反になり、ファイルを開くことができません。

できませんので、アプリによっては、とんでもない結果を招いたりします。例えば、WindowsのZipフォルダ機能では、Zipファイルが壊れたりします。。。

0 件のコメント:

コメントを投稿