次の方法で共有


ObDereferenceObjectDeferDelete 関数 (wdm.h)

ObDereferenceObjectDeferDelete ルーチンは、指定されたオブジェクトの参照カウントをデクリメントし、オブジェクトの保持を確認し、デッドロックを回避します。

構文

void ObDereferenceObjectDeferDelete(
  [in] PVOID Object
);

パラメーター

[in] Object

オブジェクトの本体へのポインター。

戻り値

なし

解説

ObDereferenceObjectDeferDeleteObDereferenceObject に似ていますが、オブジェクトの参照カウントが 0 に達すると、オブジェクト マネージャーはオブジェクトの削除要求をワーカー スレッドに渡します。 したがって、削除は後で IRQL = PASSIVE_LEVELで行われます。

オブジェクトの現在のスレッド (ObDereferenceObject を使用) によってすぐに削除されるとデッドロックが発生する可能性がある場合は、オブジェクトに対して ObDereferenceObjectDeferDelete を使用します。

たとえば、ドライバー スタック上の上位レベルのドライバーがロックを保持しているときに 、ObDereferenceObject を使用して カーネル トランザクション マネージャー (KTM) オブジェクトを逆参照すると、このようなデッドロックが発生する可能性があります。

このようなデッドロックを回避するには、ObDereferenceObject の代わりに ObDereferenceObjectDeferDelete を使用して、KTM オブジェクトを逆参照します。

オブジェクトの永続性と属性の詳細については、「 ObDereferenceObject」を参照してください。

要件

要件
対象プラットフォーム ユニバーサル
Header wdm.h (Fltkernel.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL

こちらもご覧ください

ObDereferenceObject

ObReferenceObject