2015年8月27日木曜日
Network Redirector Drivers 固有の動作
IRP_MJ_QUERY_INFORMATION
https://msdn.microsoft.com/ja-jp/library/ff549283(v=vs.85).aspx
Operation: Network Redirector Drivers
「A network redirector driver not based on RDBSS that receives an IRP_MJ_QUERY_INFORMATION request for FileAllInformation or FileNameInformation, must respond with the full "\server\share\file" path for the file name with a single leading backslash before the server name. This format for name information must be returned for a file accessed as a Universal Naming Convention (UNC) name (\\server\share\folder\filename.txt, for example) or a file located on a mapped drive (x:\folder\filename.txt, for example).」
FileNameInformation 対応が必要。
2015年6月3日水曜日
Dokan 0.6.0 は Windows 10 で動作?
先ほど、Windows 10 Insider Preview の、
Windows 10 Insider Preview (x86) - ビルド 10074 で試しました。
顧客案件なので詳細は明かせませんが、、、一応ふつうに動いていました。
製品版の Windows 10 でも一応、動いています。
Windows 10 Insider Preview (x86) - ビルド 10074 で試しました。
顧客案件なので詳細は明かせませんが、、、一応ふつうに動いていました。
製品版の Windows 10 でも一応、動いています。
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ファイルが壊れたりします。。。
実はもっと沢山有って、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ファイルが壊れたりします。。。
ファイル→新規作成で、盾フォルダだけになる件
DokanNetの場合、GetFileSecurityを実装すれば、通常フォルダのように、ファイル項目が出るようになります。
因みにFAT32のドライブに対してSDDLを調査した所、O:WDG:WDでした。ACL非対応といいつつも、さり気無くGetFileSecurityへ応答している所が。。。
O:WDG:WD
Owner = Everyone
Group = Everyone
DACL なし?
SACL なし?
因みにFAT32のドライブに対してSDDLを調査した所、O:WDG:WDでした。ACL非対応といいつつも、さり気無くGetFileSecurityへ応答している所が。。。
O:WDG:WD
Owner = Everyone
Group = Everyone
DACL なし?
SACL なし?
2015年1月31日土曜日
Oplockについて
Dokanでは直接Oplockに関与する機会が無いのですが。。。 Windows 8 アプリ対策で必要になりそうな感じですので、少し勉強しました。
SDKとWDKの両方に、別々の情報が有ります。
ーーー
Oplock Semantics - Overview
https://msdn.microsoft.com/ja-jp/library/ff551011(v=vs.85).aspx
ーーー
Types of Opportunistic Locks
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa365713(v=vs.85).aspx
4種類のOplockが有ります。
ーーー
Oplockは、共有モード(DenyRead, DenyWrite)とは別の概念です。
Samba3のドキュメントによると、
「Opportunistic lockingは、この機能に対して、実際には妥当ではない名前 である。この機能の真の利点は、クライアントサイドのデータキャッシングであり…」
ーーー
Breaking Opportunistic Locks
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa363786(v=vs.85).aspx
Oplockは一種の権利ですが、剥奪される可能性も有ります。
ーーー
Opportunistic Lock Examples
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa365436(v=vs.85).aspx
Oplockの動きについて書かれています。
ーーー
OSによって、使われるIOCTLコードが異なるようです。(詳細は未確認)
Windows 7, 8, 8.1
Windows Vista, XP, 2000
ーーー
折角Windows 8.1を使っているので、FileTestにてOplockをテストした所、
0x0000012C
ERROR_OPLOCK_NOT_GRANTED
Oplock 要求は拒否されました。
User modeからはダメなのだろうか。
SDKとWDKの両方に、別々の情報が有ります。
ーーー
Oplock Semantics - Overview
https://msdn.microsoft.com/ja-jp/library/ff551011(v=vs.85).aspx
ーーー
Types of Opportunistic Locks
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa365713(v=vs.85).aspx
4種類のOplockが有ります。
- Level 1 Oplock -- 先読み許可、遅延書き込み許可。何でも許可。一人だけ取得可能。
- Level 2 Oplock -- 書き込み者なし。先読み許可。何人でも取得可能。
- Batch Oplock -- コマンドプロンプトのバッチファイル実行は、一行実行するごとにファイルを閉じる・開くを繰り返しやっている。この様を示して、バッチロック。Close/Openを送らない、省く事で最適化します。
- Filter Oplock -- 他者による書き込み&削除を拒否。コンパイラがソースコードを読み取り専用でアクセスする様を示して、フィルタロック。
ーーー
Oplockは、共有モード(DenyRead, DenyWrite)とは別の概念です。
Samba3のドキュメントによると、
「Opportunistic lockingは、この機能に対して、実際には妥当ではない名前 である。この機能の真の利点は、クライアントサイドのデータキャッシングであり…」
ーーー
Breaking Opportunistic Locks
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa363786(v=vs.85).aspx
Oplockは一種の権利ですが、剥奪される可能性も有ります。
ーーー
Opportunistic Lock Examples
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa365436(v=vs.85).aspx
Oplockの動きについて書かれています。
ーーー
OSによって、使われるIOCTLコードが異なるようです。(詳細は未確認)
Windows 7, 8, 8.1
Windows Vista, XP, 2000
- FSCTL_OPBATCH_ACK_CLOSE_PENDING
- FSCTL_OPLOCK_BREAK_ACK_NO_2
- FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
- FSCTL_OPLOCK_BREAK_NOTIFY
- FSCTL_REQUEST_BATCH_OPLOCK
- FSCTL_REQUEST_FILTER_OPLOCK
- FSCTL_REQUEST_OPLOCK_LEVEL_1
- FSCTL_REQUEST_OPLOCK_LEVEL_2
ーーー
折角Windows 8.1を使っているので、FileTestにてOplockをテストした所、
0x0000012C
ERROR_OPLOCK_NOT_GRANTED
Oplock 要求は拒否されました。
User modeからはダメなのだろうか。
登録:
コメント (Atom)