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 の呼び出しが、ハンドル属性パラメーター引数 に渡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 バージョン間の関係の詳細については、「ネイティブ システム サービス ルーチンの Nt バージョンと Zw バージョンの使用」を参照してください。

要件

   
サポートされている最小のクライアント 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)

関連項目

Nt および Zw バージョンのネイティブ システム サービス ルーチンの使用

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection