問題タブ [deviceiocontrol]
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.
c# - FSCTL_SET_ZERO_DATA を指定した DeviceIoControl が ERROR_INVALID_PARAMETER を返す
C# の制御コードで DeviceIoControl
使用しようとしています。FSCTL_SET_ZERO_DATA
ファイルを作成し、そのC:\tmp\test.txt
中に「aaaa」というテキストを入れました。
コードを実行したところ、エラー番号 87 を受け取りました。MSDN
によると、「パラメーターが正しくありません。」
DeviceIoControl
問題は、入力バッファ ( のパラメータ番号 3 ) をデータなし で送信しているためだと思いました。
DeviceIoControl
を返しますfalse
。
有効なパラメータを挿入DeviceIoControl
しFSCTL_SET_ZERO_DATA
て返すにはどうすればよいtrue
ですか?
c++ - HANDLE c++ を使用した DeviceIoControl カーネルからユーザーモードへ
Windows 7 x64 で正常に動作するドライバーがありますが、ドライバーからユーザーモード アプリケーションにハンドルをプッシュする方法がわかりません。
ここに私のカーネルモードコードがあります:
今ユーザーモードの部分:
hTest は常に異なりますが、決して正しくありません。DeviceIoControl は成功し、hDevice は有効です。
誰かが私に欠けているものを教えてもらえますか? :)
winapi - NTFS 変更ジャーナルから削除されたファイルのフル パスを取得するにはどうすればよいですか?
ドライブ上のファイルの変更を監視するために NTFS 変更ジャーナルを読んでいますが、返された USN_RECORD には関連ファイルのファイル名のみが含まれ、完全なパスは含まれていません。
完全なパスを取得するには、OpenFileById API で FileReferenceNumber (USN_RECORD にもあります) を使用して、関連付けられたファイルへのハンドルを取得し、続いて GetFinalPathNameByHandleA を使用して完全なパスを取得します。
これは、そのファイルがまだ存在する限りうまく機能しますが、ファイルが削除されている場合 (たとえば、ファイルの削除のために USN_RECORD を処理している場合)、明らかに OpenFileById が失敗するため、完全なパスを取得できません。
USN_RECORD には、親ディレクトリの名前を取得できるようにする ParentFileReferenceNumber メンバー (おそらく OpenFileById を使用して開くことができる) が含まれていますが、同じ問題が存在します。つまり、親ディレクトリが削除された場合はどうなりますか?
また、親ディレクトリが削除されていない場合でも、ボリューム ルートに到達するまで、次のディレクトリ (つまり、親の親) に移動するにはどうすればよいですか?
これが私のコード例です:
出力例:
c++ - 再解析ポイントとしての 1 つのドライブ
Win 10 Fall Creators Update Version 10.0.16299 Build 16299 で実験している次のスタンドアロン ソース コードを検討してください。
これは、関数として扱われる 1 つのドライブのターゲットを解決するために使用するコードIO_REPARSE_TAG_CLOUD_7
ですGetFileAttributesExW
。
_REPARSE_DATA_STRUCTURE
とのみの情報がSymbolicLinkReparseBuffer
ありMountPointReparseBuffer
、One Drive などの再解析ポイントに関連するフィールドがないことはわかっています。
One Drive をサポートするように構造が更新されているかどうかを確認するために、windows ドライバー キットの (秋のクリエーターの更新用)ntifs.h
ファイルを確認しました。しかし、そうではないようです。
また、最初の if ブロックで行ったように、One Drive ターゲット情報を取得しようとしましたSymbolicLinkReparseBuffer
。MountPointReparseBuffer
しかし、それは私にゴミを与えてしまいました。
質問:
1) One Drive などの REPARSE_POINTS のターゲットを正しく判断するにはどうすればよいですか?
2) Windows 10 Fall Creators update SDK は、そのような REPARSE_POINT タグをさらに追加します。ターゲットを解決できない場合 (One Drive など)、それらを処理するための一般的な経験則は何ですか (つまり、ソース REPARSE_POINTS) ? ファイルまたはディレクトリとして ?