問題タブ [windows-kernel]
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.
wdk - 1 kb 以上のファイルを読み取るための FltReadFile 関数
ファイルの読み取りに WDK の FltReadFile 関数を使用しています。1kbのファイルしか読めません。1kb以上のファイルを読むには?? ありがとうございました。
windows - Windowsカーネルのイベントオブジェクトが自動リセットされているか手動リセットされているかを確認するにはどうすればよいですか?
Windowsでは、(名前付きの)イベントオブジェクトを作成できます。
イベント(Windowsの同期プリミティブ)は、自動リセットタイプ(この場合はセマフォの一種と言えます)にすることも、手動リセットタイプにすることもできます。この場合、誰かがリセットするまで設定されたままになります。
さて、CreateEvent、OpenEvent、SetEventなどのドキュメントから、イベントが作成されると、それが自動リセットか手動リセットかを判断する方法はないようです。
私は、1つのプロセスが名前付きイベントを作成し、2番目のプロセスがこのイベントを操作する必要がある状況にあります(名前が渡され、イベントを開いて最終的に通知します)。イベントは、すべてが意味をなすために常に手動リセットイベントである必要があるため、手動リセットイベントであることを確認するために、2番目のプロセスにチェックを追加したいと思います。これを確認する方法はありますか?
(はい、私の状況ではもっと便利です。コードが自動リセットイベントを作成し、それをこのプロセスに渡すと、とにかくバグになるからです。しかし、バグは発生します。私はそれらを検出することができます。)
windows-kernel - \ ?? \で始まるWindowsカーネルオブジェクト名はどういう意味ですか?
ユーザースペースとカーネルコンポーネントの両方を備えたレガシーWindowsアプリケーションを維持しています。ユーザースペースは、レジストリキーを介していくつかのファイルパスをデバイスドライバーに渡します。
現在、コードはファイルへのフルパスを見つけ、\??\
レジストリに書き込む前にファイルの先頭に追加するため、パスはのようになります\??\C:\foo.bar
。ドライバーはこのパスをInitializeObjectAttributes()
とZwCreateFile()
に渡します。これにより、ファイルが正常に開かれます(または必要に応じて作成されます)。
\\.\
のエイリアスとしてのプレフィックスについてはよく知っていますが、ではあり\DosDevices\
ませ\??\
ん。Googleで検索できるようなものではありません。これが何を意味するのか誰か知っていますか?
windows - スレッドへのハンドルが開いている限り、スレッドIDは一意/有効のままですか?
Win32スレッドがある場合は、ハンドルを介して参照し、スレッドIDを取得することもできます。
スレッドが終了した場合でも、ハンドルを閉じるまでハンドルは有効で使用可能です。(それ以外の場合は、GetExitCodeThreadなどを使用できませんでした
ただし、スレッドが終了した後、スレッドIDに何が「発生する」かについては、ドキュメントで一貫して言及されていないようですが、終了したスレッドへのスレッドハンドルを保持している人がいる限りです。
スレッドハンドルと識別子は次のように述べています
識別子は、スレッドが作成されてからスレッドが終了するまで有効です。
次にGetThreadIdAPIを見ると、スレッドが終了するまでIDが有効である場合にのみ、終了したスレッドに対して何が返されるのか疑問に思うことがあります。(また、このサイトにはユーザーのコメントがあります:「正しくありません。スレッドへのオープンハンドルがある限り、スレッドIDはまだ有効で一意です。」これは、この質問に「はい」で答えますが、それ以上はありません。コンテキスト私は警戒しています。)
また、私はこのスニペットをSOの回答で見つけました:
IDは、システムで実行されているスレッドの一意の数値識別子です。スレッドハンドルは、他のカーネルオブジェクトハンドルと同様に、カーネルオブジェクトへの特殊なタイプの参照カウントポインタと見なすことができます。
それが正しく、スレッドIDが実際にカーネルオブジェクトのIDである場合、ハンドルが開いている限り、このIDが有効である必要があるようです(カーネルオブジェクトはクエリを実行するためにそこにとどまる必要があるため)。
私の推論は正しいですか?ハンドルが開いている限り、スレッドIDは有効ですか?どちらか一方を明示的に述べているMSドキュメントまたは権威ある本はありますか?
c++ - C++を使用してプロセスのクラッシュを検出する最良の方法は何ですか
Windows 7でプロセスのクラッシュを検出する方法はありますか?明確にするために、すべてのプロセスのクラッシュウィンドウでWERfault.exe(Windowsエラー報告)が作成されます。カーネルの既存のカーネルコールバックメカニズムを使用してシステムを監視するドライバーがあります。コールバックは、特定のプロセスイベントが発生したときにドライバーに通知します(PsSetCreateProcessNotifyRoutineを使用)。問題は、svchost.exeによって作成されたWERfault.exeが表示されますが、どのプロセスがクラッシュしたかを解決する方法が見つからないことです。
winapi - ユーザーランドの Windows Vista/7 カーネル フック
ユーザーランド プロセスの任意のシステム機能をフックおよび監視できる、Vista および 7 でのドライバーの実装に関するアドバイスを探しています。私の目標は、ntdll、kernel32 などから呼び出されたシステム関数の引数を単純にダンプすることです。XP 以降では、SSDT の変更や同様の手法が一般的でした。Vista+ には、フィルタ ドライバと通知ルーチンがあります。これらのいずれかは、ネイティブ関数をフックするためのものですか? ドライバーは 32 および 64 ビット用で、Patch Guard とうまく連携する必要があります。どんな提案も歓迎します。
windows - Windbg およびシンボル ファイル
シンボル ファイルに問題があります。シンボル ファイル パスを試し、パスを次のように設定しました。
しかし、その後、次のように変更しました。
パスに mydriver を使用して driver2 を変更しました。これは、ドライバーの .pdb ファイルが配置されているパスです。問題は、以下に示すように .sympath が正しいパスを出力することです。
しかし、ドライバーのシンボルはまだ見つかりません。.reload コマンドを実行すると、WinDbg が mydriver/ ディレクトリではなく driver2/ ディレクトリで .pdb を探していることがわかります。
すべてのワークスペースを削除し、WinDbg を閉じ、Windows を再起動しましたが、driver2/ エントリがまだ残っています。既定のワークスペースのキャッシュまたはどこかにある必要があります。これらのキャッシュを含む WinDbg の個人設定全体を削除するにはどうすればよいですか。そうすると、WinDbg を再起動して、driver2/ パスを削除し、mydriver/ を使用できるようになります。
mydriver/ ディレクトリの名前を driver2/ に戻すことで問題を解決することもできますが、そのような問題は解決したくありません。何が起こっているのかを理解し、できる限り解決したいと思います。