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
非カーネル ハンドルは、2 つの条件のいずれかが満たされている場合にのみ閉じることができます。前のプロセッサ モードが KernelMode
NtClose の呼び出し元は、このルーチンが戻る前にすべての I/O が完了するまで自動的に待機することを想定しないでください。
この関数の呼び出しがユーザー モードで発生する場合は、"ZwClose" ではなく"NtClose" という名前を使用する必要があります。
カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なる場合があります。 ルーチンの NtXxx と ZwXxx バージョンの間の関係の詳細については、「ネイティブ システム サービス ルーチンの 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) |