次の方法で共有


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を参照してください)。たとえば、NtCreateKey DriverEntry ルーチンに戻るハンドルは、同じドライバーの ディスパッチ ルーチンによって後で閉じることはできません。 DriverEntry ルーチンはシステム プロセスで実行されますが、ディスパッチ ルーチンは通常、現在の I/O 要求を発行するスレッドのコンテキストで、または下位レベルのドライバーの場合は任意のスレッド コンテキストで実行されます。

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

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

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

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

必要条件

要件 価値
サポートされる最小クライアント Windows 2000
ターゲット プラットフォーム の 万国
ヘッダー ntifs.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 を する HwStorPortProhibitedDDIs、IrqlZwPassive、PowerIrpDDis、ZwRegistryCreate、ZwRegistryCreate(storport)、ZwRegistryOpen、ZwRegistryOpen(storport)

関連項目

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection