NtClose 関数 (ntifs.h)

NtClose ルーチンは、オブジェクト ハンドルを閉じます。

構文

__kernel_entry NTSYSCALLAPI NTSTATUS NtClose(
  [in] HANDLE Handle
);

パラメーター

[in] Handle

任意の型のオブジェクトを処理します。

戻り値

NtClose は 、成功したSTATUS_SUCCESS、または次のような適切な NTSTATUS エラー コードを返します。

リターン コード 意味
STATUS_INVALID_HANDLE ハンドル が有効なハンドルではありません。
STATUS_HANDLE_NOT_CLOSABLE 呼び出し元のスレッドには、ハンドルを閉じるアクセス許可がありません。つまり、指定されたオブジェクト ハンドルは、 NtClose のインスタンス試行から終了しないように保護されます。

後者の NTSTATUS コードが発生する例は、 ZwDuplicateObject の 呼び出しが handle attributes パラメーター引数 に渡OBJ_PROTECT_CLOSE 呼び出された場合です。 カーネルは、その場合にハンドルを閉じることができないことを保証します。

注釈

NtClose は、任意の種類のオブジェクトを操作するジェネリック ルーチンです。

開いているオブジェクト ハンドルを閉じると、そのハンドルが無効になります。 また、オブジェクトのハンドル数をデクリメントし、オブジェクトを削除できるかどうかを確認します。 システムは、オブジェクトのすべてのハンドルが閉じられ、参照されたポインターが残らないまで、オブジェクトを実際に削除しません。

ドライバーは、ハンドルが不要になったらすぐに開くすべてのハンドルを閉じる必要があります。 カーネル ハンドルは、システム スレッドまたはOBJ_KERNEL_HANDLE フラグを指定して開かれるハンドルであり、前のプロセッサ モードが KernelMode の場合にのみ閉じることができます。 この要件は、システム スレッドと、カーネル モードから発行された IRP のディスパッチ ルーチンの両方に適用されます。 (以前のプロセッサ モードの詳細については、「 ExGetPreviousMode」を参照してください)。たとえば、 NtCreateKeyDriverEntry ルーチンに返すハンドルを、同じドライバーの ディスパッチ ルーチンで閉じることはできません。 DriverEntry ルーチンはシステム プロセスで実行されますが、ディスパッチ ルーチンは通常、現在の I/O 要求を発行するスレッドのコンテキストで、または下位レベルのドライバーの場合は任意のスレッド コンテキストで実行されます。

非カーネル ハンドルは、2 つの条件のいずれかが満たされている場合にのみ閉じることができます。前のプロセッサ モードが KernelMode であるか、呼び出し元のスレッドにハンドルを閉じるのに十分なアクセス許可があります。 後者の例は、呼び出し元のスレッドがハンドルを作成したスレッドである場合に発生します。

NtClose の呼び出し元は、このルーチンが返される前にすべての I/O が完了するまで自動的に待機することを想定しないでください。

この関数の呼び出しがユーザー モードで発生する場合は、"ZwClose" ではなく "NtClose" という名前を使用する必要があります。

カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なります。 ルーチンの NtXxx バージョンと ZwXxx バージョン間の関係の詳細については、「Using Nt and Zw Versions of the Native System Services Routines」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000
対象プラットフォーム ユニバーサル
Header ntifs.h (Wdm.h、Ntddk.h、Ntifs.h を含みます)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 HwStorPortProhibitedDDIs、IrqlZwPassive、PowerIrpDDis、ZwRegistryCreate、ZwRegistryCreate(storport)、ZwRegistryOpen、ZwRegistryOpen(storport)

こちらもご覧ください

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection