2017-06-30 7 views
0

で呼ばれるべきことで有効に設定されたドライバ検証がIrqlZwPassiveルール潜在的影響のみサードパーティのデータ損失防止ドライバIRQL = PASSIVE_LEVEL

に基づいて、ドライバの検証のバグチェックが発生したときにクラッシュするには、次の情報が含まれています

ZwOpenKeyは、IRQL = PASSIVE_LEVELで呼び出される必要があります。

ZwOpenKeyをIRQL = PASSIVE_LEVELの外で使用すると、Windowsシステムに与える影響はありますか?

これは、常にベンダーに提出しなければならない重大な問題であるか、特定のシナリオでのみ発生します。

+0

あなたはソースコードを所有していないので、これはプログラミングに関連する質問ではなく、SuperUser.comでより一般的なPCドライバの問題であると言います。 –

+0

これは常に重大な問題です。 –

答えて

1

カーネル内のすべてのZw apiは、PASSIVE_LEVELでのみ呼び出される必要があります。これは設計によるものです。 APC_LEVELに電話をかけると、これはすでにUBになります。これは何度か動作しますが、何度かハングやクラッシュが発生します。例えば、ZwOpenKey - レジストリマネージャは、メモリにまだ格納されていない場合、ディスクからキーデータを読み取ることができます。 IRPをファイルシステムに渡して、それが完了するのを待ちます。完了のためのIrpは呼び出し元のスレッドに特殊なAPC(IopCompleteRequest)を挿入できます。 APCレベルのスレッド - スレッドのIRQLがパッシブになるまでAPCは実行されません。それやったことがない - 彼の完全なIRPを待つ。..

別のポイント - Zwとサービス、システムチェックからの出口では - スレッドにUserApcPendingあり、そうならば、APC_LEVELにIRQLを上げ、ユーザーのAPCを開始し、そして背中にそれを下げますPASSIVE_LEVEL(システムはZwがPASSIVE_LEVELを呼び出したと仮定します) - Zw APIにはAPC_LEVELで入力し、PASSIVE_LEVELで終了することができます。何時にスレッドがAPC_LEVELを持っているのがなぜ尋ねることができますか?なぜならIRQLを何もしないからです。ある時点でAPC_LEVELである必要があるいくつかの要件が存在していますか?はいの場合、状況がAPC_LEVELに留まる必要がありますが、スレッドが先に遅いIRQLをPASSIVE_LEVELに下ろす場合はどうなりますか?本当にUB。ほとんどの場合、何もできません。しかし、場合によっては非常に厄介なバグとなることがあります。

関連する問題