問題タブ [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.

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

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
有効なパラメータを挿入DeviceIoControlFSCTL_SET_ZERO_DATAて返すにはどうすればよいtrueですか?

0 投票する
0 に答える
165 参照

c++ - HANDLE c++ を使用した DeviceIoControl カーネルからユーザーモードへ

Windows 7 x64 で正常に動作するドライバーがありますが、ドライバーからユーザーモード アプリケーションにハンドルをプッシュする方法がわかりません。

ここに私のカーネルモードコードがあります:

今ユーザーモードの部分:

hTest は常に異なりますが、決して正しくありません。DeviceIoControl は成功し、hDevice は有効です。

誰かが私に欠けているものを教えてもらえますか? :)

0 投票する
0 に答える
659 参照

winapi - NTFS 変更ジャーナルから削除されたファイルのフル パスを取得するにはどうすればよいですか?

ドライブ上のファイルの変更を監視するために NTFS 変更ジャーナルを読んでいますが、返された USN_RECORD には関連ファイルのファイル名のみが含まれ、完全なパスは含まれていません。

完全なパスを取得するには、OpenFileById API で FileReferenceNumber (USN_RECORD にもあります) を使用して、関連付けられたファイルへのハンドルを取得し、続いて GetFinalPathNameByHandleA を使用して完全なパスを取得します。

これは、そのファイルがまだ存在する限りうまく機能しますが、ファイルが削除されている場合 (たとえば、ファイルの削除のために USN_RECORD を処理している場合)、明らかに OpenFileById が失敗するため、完全なパスを取得できません。

USN_RECORD には、親ディレクトリの名前を取得できるようにする ParentFileReferenceNumber メンバー (おそらく OpenFileById を使用して開くことができる) が含まれていますが、同じ問題が存在します。つまり、親ディレクトリが削除された場合はどうなりますか?

また、親ディレクトリが削除されていない場合でも、ボリューム ルートに到達するまで、次のディレクトリ (つまり、親の親) に移動するにはどうすればよいですか?

これが私のコード例です:

出力例:

0 投票する
0 に答える
731 参照

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 ターゲット情報を取得しようとしましたSymbolicLinkReparseBufferMountPointReparseBufferしかし、それは私にゴミを与えてしまいました。

質問:

1) One Drive などの REPARSE_POINTS のターゲットを正しく判断するにはどうすればよいですか?

2) Windows 10 Fall Creators update SDK は、そのような REPARSE_POINT タグをさらに追加します。ターゲットを解決できない場合 (One Drive など)、それらを処理するための一般的な経験則は何ですか (つまり、ソース REPARSE_POINTS) ? ファイルまたはディレクトリとして ?