問題タブ [dokan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1712 参照

python - Python ctypes: 関数ポインタ使用時の WindowsError

Python の ctypes を使用して DLL を操作しようとしていますが、別の関数へのポインターとして渡された関数を呼び出そうとすると、問題が発生することがあります。

ちょっとした背景... Dokan (バージョン 0.6.0) を使用してユーザー空間ファイルシステムを構築しようとしています。大まかに言うと、Dokan は基本的に Windows 用のFUSEです。ctypes を使用して dokan ヘッダー ファイルをラップしました ( pydokanと同様)。そのヘッダー ファイルには、次のような関数ポインターの定義が含まれています。

別の関数のプロトタイプも含まれています

対応する ctypes 定義は次のようになります

この後者の関数 (FindFilesWithPattern) の実装では、渡された FillFindData 関数を呼び出す必要があります。基本的な実装は次のようになります

この関数が呼び出されると、次のエラーが発生することがあります。

私はイライラしています。一見すると、範囲外のメモリにアクセスしようとしているように見えます。しかし、このエラーはたまにしか発生しません。場合によっては、すべてが正常に機能し、結果が期待どおりに返されることがあります。(明確にするために、ときどき言うときは、プログラムの一部の実行でエラーが発生し、他の実行ではエラーが発生しないことを意味します。エラーは、単一の実行内で一貫して発生するか、発生しないようです。)

そのとき、メモリ アドレスではなくエラー コードが返されたのではないかと考えました。こここれがエラー コードである場合、「メモリが不足している」ことを示している可能性があることがわかりました。システム モニターを見ると、これは問題ではないように見えます。HeapyMeliaeなどのさまざまなメモリ プロファイラを実行してみましたが、どちらも Windows 64 ビット上の Python 2.7 では動作しないようです。

次に考えられるのは、これは 64 ビット OS を使用した場合の問題であるということです。おそらく、関数ポインターに使用されている型は、適切にアドレス指定するのに十分ではありません。いくつかのグーグルを行った後、Win64 での ctypes の使用に関して他の人が問題を抱えているようです。Dokan ライブラリを 64 ビット アーキテクチャ用に構築しました。私のpythonコードに問題はありますか?

どんな助けでも大歓迎です。私はしばらくこれに苦労してきました。

同様の投稿がここにあります。しかし、それはひどく類似しているようには見えません。

注: Python コードには、ここで定義されていない型がいくつか表示されます (例: PDOKAN_FILE_INFO)。これらは、簡潔にするために含めなかった構造体または構造体へのポインターです。

0 投票する
2 に答える
525 参照

c# - プログラムでC#アプリを使用してDokanをインストールしますか?

Dokanが必要なアプリがあります。
アプリが起動したら、道館がインストールされているか確認したいです。
そうでない場合、どうすればインストールできますか?
インストーラーファイルを持っていますが、サイレントインストールするにはどうすればよいですか?さらに別のGUIでユーザーを煩わせたくありません。

0 投票する
1 に答える
1127 参照

c# - Dokan/Dokan.NET は同期 I/O をサポートしていますか?

Dokan(.NET) ライブラリを使用して C# で仮想ドライブを作成しましたが、非常にうまく機能しています。

ただし、別のアプリケーションでドライブからファイルを読み取ろうとすると、同期的に読み取る操作を使用するたびに例外が発生しますSystem.IO.File.ReadAllText(...)

例外のテキストは次のとおりです。

したがって、これを正しく解釈すると、.NET はファイルの内容全体を 1 回の同期操作で読み取ろうとするようですが、Dokan はそれを許可していないようです。

しかし、ReadAllText私のようなメソッドを使用する場合、 が構築される方法を実際に制御することはできませんFileStream(そのメソッドの全体的なポイントではありません。結局、ストリームとリーダーとバッファーを気にすることなく、ファイルの内容を取得するだけです)そして何?)。

どうにかして Dokan にファイル ハンドルの同期 I/O アクセスをサポートさせることはできますか? それとも、Dokan がホストするファイルでは同期操作が不可能であるという事実をどうにかして受け入れなければならないのでしょうか (そして、私の仮想ドライブで動作する必要のあるアプリケーションが Dokan に依存しないことを願っています)?

0 投票する
1 に答える
403 参照

virtualfilesystem - マウント ポイントをアンマウントするための Windows API はありますか

dokan.lib を使用して仮想ファイル システムを作成しています。このライブラリには unmountPoint 関数がなく、unmountDrive があります。

unmountpoint 呼び出しをサポートする dokan lib を探しているか、アプリを離れるときにこのマウント ポイントを削除する Windows API を探しています。

一番

0 投票する
1 に答える
1532 参照

c# - 次のシナリオで使用されるツリー構造にスレッド セーフを実装するにはどうすればよいですか?

次のリンクにある C# コードを使用して、Ram ディスク プロジェクトを実装しています。

要約すると、上記のコードは単純なツリー構造を使用して、ディレクトリ、サブディレクトリ、およびファイルを格納します。ルートには、MemoryFolder0 個以上の「MemoryFolder」オブジェクトおよび/またはオブジェクトを格納するオブジェクトがありMemoryFileます。各MemoryFolderオブジェクトは、0 個以上のMemoryFolderオブジェクトおよび/またはMemoryFileオブジェクトなどを無限の深さまで格納します。

ただし、コードはスレッドセーフではありません。スレッドセーフを実装する最もエレガントな方法は何ですか? さらに、適切なロック戦略を使用して、典型的なファイルシステムのマルチスレッド要件の次の非網羅的なリストをどのように実施する必要がありますか?

  1. スレッド セーフな実装で許可されている場合、同じ親フォルダーの下に (それぞれが異なるスレッドによって) 2 つの異なるフォルダーを同時に作成することができます。それ以外の場合は、シーケンシャルな作成のみを許可するロック戦略を実装する必要があります。

  2. 特定のファイル (現在別のスレッドによって読み取られている) を含むフォルダーの直接的または間接的な親フォルダーは、ルート フォルダーまでずっと伝達され、スレッドのReadFile実行が完了するまで、別のスレッドによって移動または削除されることはありません。

  3. 各固有のファイルに関して、複数のスレッドの同時アクセスを許可しますReadFileが、アクセスは 1 つのスレッドに制限しWriteFileます。

  4. 2 つの別々のReadFileスレッド (ほぼ同時に起動される) が、異なるアプリケーションからのそれぞれが同じ名前のフォルダーを作成しようとすると (両方のスレッドが起動される前にフォルダーがまだ存在していないと仮定して)、Ram-Disk に入る最初のスレッドは常に Ram-Disk に入ります。は成功しますが、2 つ目は常に失敗します。つまり、スレッドの実行順序は決定論的です。

  5. 別のスレッドで実行されている合計ディスク容量の計算方法は、既に進行中GetDiskFreeSpaceのすべてのスレッドが実行を完了するまで、その実行を完了してはなりません 。実行を開始していないWriteFile後続のスレッドはすべて、スレッドが実行を完了するまでブロックされます。WriteFileGetDiskFreeSpace

0 投票する
1 に答える
2466 参照

c# - Dokanで仮想ドライブを実装。WriteFileで立ち往生

C# と Dokan ライブラリを使用してファイルシステムを作成していますが、WriteFile で行き詰まりました。

アプリを実行して Dokan の仮想ドライブから txt ファイルを開くと、行を追加して保存しようとします。メモ帳から「パラメーターが正しくありません」というエラーが表示されます。

コードでは、 File.OpenWrite() 呼び出しで例外が発生します。例外は System.IO.IOException です。メッセージ: 「別のプロセスで使用されているため、プロセスはファイル foo.txt にアクセスできません。」

  • ファイルはメモ帳でのみ開きます。
  • Dokan ライブラリで提供される Mirror サンプルでも同じ動作が見られます
  • マニフェストで自分のプログラムに管理者権限を追加しましたが、役に立ちませんでした

Dokan はプロキシとして機能し、ユーザーが定義した WriteFile を呼び出すことができるはずですよね? 書き込みのためにロックされている場合、どうすればこれを行うことができますか?

助けてください。Dokan を使用した経験があるか、Dokan が機能しない理由の手がかりがあるかもしれません。

使用しています - Win 7 Pro x64 - 64 ビット Dokan ドライバー - アプリは x86 としてコンパイルされています

0 投票する
1 に答える
450 参照

python - python - 仮想ファイル システムからアプリケーションを実行する

答えを知っている人のための簡単な質問。私は仮想ファイルシステムとpythonを使っています。ファイル システム内に EXE ファイルがあります。Dokan などでファイル システムを公開しなくても、このアプリケーションを実行できますか?

不可能な場合、Dokan が Windows で必要とするようなドライバー/管理者権限を必要とせずにファイル システムを公開する方法はありますか?

どんな助けでも大歓迎です、ありがとう!

0 投票する
1 に答える
486 参照

android - Android/Monodroid での Dokan (DokanNet.dll) - コード移行の問題

コンテキスト: dokan ライブラリをロードし、実行するたびに新しいファイル システム/ドライブを作成し、新しく作成されたドライブに財務データ ファイルとコピーライト保護されたファイルを展開する Windows デスクトップ アプリ (c#) を持っています - 限られたプロセスのみを許可します (私が宣言した)新しく作成されたファイルシステム(dokanを使用)でこれらのファイルにアクセスできるようにします。現在、同じ C# コードを Android に移行しています。コードではエラーは発生しませんが、(apk の実行中) 新しいドライブは作成されません。私はある程度しかデバッグできませんでしたが(突然デバッグモードから抜け出しました)

問題の前提条件: アクセス許可の問題:

質問:

Dokan は Android で動作しますか? 許可の問題である場合、これについてどうすればよいですか? 市場では、私のアプリをインストールするほとんどのデバイスが「ルート化」されていない可能性があります!! Android/Monodroid で DokanNet を使用して新しいファイル システム/ドライブを実装し、同様の問題に直面した人はいますか? ソリューション???

0 投票する
1 に答える
397 参照

c# - Dokan ファイル システムでの Office ファイルの書き込み操作を特定する

dokan をファイル システムとして使用していますが、office ファイルの書き込み操作を識別する方法がわかりません。特にロックファイルと一時ファイル。メインファイルのみを外部データベースにアップロードする必要があるため、それらを特定する必要があります。

理論的にはオフィスの言葉が機能しますが、これはより回避策です。一時ファイルを識別するための特別な属性があることを願っています。

クリスをよろしく

0 投票する
1 に答える
839 参照

dokan - Windows 用の仮想ドライブの開発 (.net C#)

私の要件。

Windows で ntfs/fat フォーマット可能な生の仮想ドライブを開発します - truecrypt のようなものです。これのC#実装がどこかにあるかどうか知りたいです。

ファイルシステム自体を実装する必要があるため、dokan、callbackfs などは正確には適合しません。filedisk、imdisk などはカーネル空間にあり、コードは複雑に見えます。

callbackdisk や eterlogic が提供するものは完璧ですが、残念ながら高価であり、小さなプロジェクトのためだけに購入したくありません。

上記の 2 つのような自由に利用できる他の代替手段はありますか。できれば、コード化できるユーザーランドで read()/write() コールバック関数を提供する単純な C# ラッパー。