問題タブ [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.
kernel - 文書化されていない Windows カーネル API - Windows 7 以降の OS の KeSetAffinityThread() に代わるものは何ですか
void KeSetAffinityThread(PKTHREAD pKThread, KAFFINITY cpuAffinityMask)
ルーチンは Windows カーネルで利用でき、そのドキュメントは OS/2 カーネル ドキュメントにあります。そして、Windows は今でもこの API をカーネルに保持しています。この API を使用して、任意のスレッドのアフィニティ マスクを設定できます。システムに 64 を超えるプロセッサがある場合にこれを行う方法を探しています。
少し背景 - Windows 7 でのプロセッサ グループ機能の導入により、KAFFINITY に安全に依存できなくなりました。そのため、64 を超えるプロセッサを搭載したシステムでコードを実行すると信頼性が低下するため、上記の API を使用できません。MSDN include によって提供される API である MSDN で適切な代替品を見つけることができKeSetSystemAffinityThread
ませKeSetSystemGroupAffinityThread
んでしたが、これらの呼び出しは呼び出しスレッドのアフィニティを設定するためにのみ使用されるため、目的を果たしません。
関数も表示されます-SetThreadAffinityMask()
任意のスレッドのアフィニティを設定しますが、これはユーザーレベルのルーチンです。カーネルモードで似たようなものを探しています。
windows - COM ポートの数とそのリソースを見つける方法
学習目的のためだけに、WindowsでUARTのシリアルドライバーを作成しています。具体的には WDM で。バス ドライバーと関数ドライバーの両方を記述します。
現在、私はバスドライバーを書いています。だから私の質問は、バスドライバーからその数の PDO を公開できるように、システムにいくつのシリアルポートがあるかをドライバーで知ることができる場所からですか?? そして、各ポートに割り当てられたリソース。ある種のレジストリを確認する必要がありますか、またはウィンドウが何らかの構造を提供します。
私を助けてください!!前もって感謝します
c++ - Windows カーネル システム コールに直接アクセスできますか?
私は Windows の内部構造を調査しており、最近システム コールについて学びました。これらのシステム コールを関数のように使用できるかどうか疑問に思っています。外部からアクセスするためのものではないことを理解しています。
例:NtUserEmptyClipboard
は Win32k.sys のシステム コールで、そのアドレスは0x117f
この呼び出しを関数のように使用したい場合、どうすればよいでしょうか?
sockets - winsock カーネル (winsock2 ではなく WSK) にソケット ラッパーはありますか?
Windows カーネル モード ドライバーを IPV4 から IPV4/IPV6 にアップグレードする必要がありますが、TDI を使用する既存のカーネル モード ソケット ライブラリは IPV6 をサポートしていません。
そこで、ソケット ライブラリを「Winsock Kernel」に変更したいと思いますhttp://msdn.microsoft.com/en-us/library/windows/hardware/ff571084(v=vs.85).aspx 注: これは winsock2 ではありません.
Storagecraft の Kernsock の代わりに WSK を使用するために必要な変更を開始しましたが、このドライバー コードが Windows と Linux の両方で実行されることを考えると、考慮すべきことがたくさんあります。
できればBSDまたはwinsock2関数APIシグネチャを使用して、WSKの周りにカーネルモードソケットラッパーが利用できるかどうか疑問に思っています。私の検索では何も得られません。
ありがとう。
windows - TDI フィルター ドライバーから TCP ポートが使用可能かどうかを確認するにはどうすればよいですか?
私の TDI フィルター ドライバーは、IRP_MJ_CREATE 要求をインターセプトし、必要に応じて、開いている各 TCP/UDP 接続のソース ポートを割り当てています。ドライバーは、接続 (ソケットのオープン/クローズおよび TCP 猶予期間を含む) を含むテーブルを内部的に維持していますが、ドライバーが特定のイベントの通知を受け取らず、特定の TCP ソース ポートが使用中は無料。
このポートを割り当てる前に TDI_QUERY_INFORMATION リクエストを送信するオプションを検討していましたが、任意のアドレスを照会するオプションが表示されません。開いているアドレス オブジェクトのみを照会できますが、一般的なアドレスは照会できません。
特定の送信元ポートを照会し、それが使用されているかどうかを確認する (効率的な) オプションはありますか?
http - http.sysはどのように機能しますか
IIS の仕組みをより深く理解しようとしています。
http.sys は、その主要なコンポーネントの 1 つです。しかし、私はそれについて簡単に消化できる情報を見つけるのに苦労しています. WSK の話を聞くまでは、良いメンタル モデルを思いつくことができませんでしたが、すべてうまくいったと思います。
多くのランダムなグーグル検索と小さな実験から、これは、なぜそれが存在し、どのように機能するかについての私の現在の高レベルの理解です.
どうして:
ポート共有と高性能キャッシング。
どのように:
ユーザー モード プロセスは、WinSock API を使用してポートをリッスンするソケットを開き、ネットワーク サブシステム (tcp/ip など) にアクセスします。http.sys ドライバーのようなカーネル モード ソフトウェアは、Winsock Kernal Sockets (WSK) API を使用して、WinSock API と同じ TCP ポート番号のプールを使用して同じ目的を達成します。
IIS、Web サービス、または http を使用したいものは、一意の URL/ポートの組み合わせを使用して http.sys に登録されます。http.sys は、WSK を使用してこのポートでソケットを開き (同じポートで別の URL/ポートの組み合わせをまだ使用していない場合)、リッスンします。
トランスポート層 (tcpip.sys) が IP パケットの負荷をクライアントが送信した http 要求に再構築すると、要求のポートを介して http.sys に送信されます。Http.sys は、url/ポート番号を使用して、それを解析する適切なプロセスに送信します。
私は自分自身の質問に答えているように見えることを知っていますが、私はこれについて自分自身に確信が持てず、もっと興味深いことに取り掛かることができるようにいくつかの閉鎖を望んでいます.
私は近くにいますか?
file-io - Filesystem Minifilter 削除ドライバーの実行可能性チェック
msdn の削除ミニフィルターの例をベースとして使用しています: http://code.msdn.microsoft.com/windowshardware/Delete-File-System-b904651d
私が達成する必要があるのは:
- DfPreCleanupCallback で削除候補へのハンドルを取得します。
- DfPostCleanupCallback - ハンドルが取得されていない場合、ファイルを削除する必要があると判断します。
- また、DfPostCleanupCallback で - 削除されたであろうファイルに対していくつかの操作を実行し、ハンドルを解放します。また、次回 IRP_MJ_CLEANUP に入ったときに削除を保証して、無限ループを回避します。
私はミニフィルターとフィルター マネージャーについて非常に漠然とした理解を持っているので、ミニフィルターの世界を深く掘り下げる前に、原則としてこれが可能かどうかを知りたいと思います。
短いバージョン - ファイルが間違いなく削除されると判断し、そのファイルに対して何らかの操作を行う方法が必要です。
driver - ミニフィルター コールバック関数中のスレッドのユーザーモード スタックのバックトレース
ミニフィルター コールバック関数の実行中に、スレッドのユーザー モード スタックをバックトレースしようとしています。
呼び出し元のスレッドと同じコンテキストにいると仮定すると、TEB/TIB からスレッド スタック アドレスを取得し、そのスタック上のアドレスを処理することで、そのスタックをバックトレースできるはずです。
私が取得しているアドレスは、システム コールを呼び出している予想されるユーザー モード モジュールではないため、何か問題があるに違いありません。
正しい方向に向けていただければ幸いです。
前もって感謝します。
以下は、スタック コンテンツを読み取るコードです。
以下は、モジュール名とアドレスを取得する関数です。
windbg - WinDBG でのローカル シンボルの読み込みに関する問題 - カーネル ドライバー
WDK と VS2013 を使用してコンパイルされたカーネル ドライバーのローカル シンボルが読み込まれない理由がわかりません。
ドライバーをビルドして myDriver.pdb を C:\Symbols\local に配置し、myDriver.sys を仮想マシンにコピーします。VirtualKD を使用して、デバッガーを起動し、ドライバーをインストールして、読み込まれたモジュールを確認するか、myDriver!DriverEntry にブレークポイントを設定しようとします。ブレークポイントを試すと、次のようになります。
私のシンボルパスは次のとおりです。
.reload /f myDriver.sys を実行しようとすると、次のようになります。
これを修正する方法についてのアイデアはありますか? ありがとう!