Fungsi NtClose (ntifs.h)

Rutinitas NtClose menutup handel objek.

Sintaks

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

Parameter

[in] Handle

Tangani ke objek dari jenis apa pun.

Nilai kembali

NtClose mengembalikan STATUS_SUCCESS pada keberhasilan, atau kode kesalahan NTSTATUS yang sesuai seperti berikut ini.

Menampilkan kode Makna
STATUS_INVALID_HANDLE Handel bukan handel yang valid.
STATUS_HANDLE_NOT_CLOSABLE Utas panggilan tidak memiliki izin untuk menutup handel; artinya, handel objek yang ditentukan dilindungi dari penutupan dari setiap upaya instans NtClose.

Contoh di mana kode NTSTATUS terakhir terjadi adalah ketika panggilan ZwDuplicateObject telah dipanggil dengan OBJ_PROTECT_CLOSE diteruskan ke argumen parameter atribut handel. Kernel memastikan bahwa handel tidak dapat ditutup dalam kasus tersebut.

Keterangan

NtClose adalah rutinitas generik yang beroperasi pada semua jenis objek.

Menutup handel objek terbuka menyebabkan handel tersebut menjadi tidak valid. Sistem juga mengurangi jumlah handel untuk objek dan memeriksa apakah objek dapat dihapus. Sistem tidak benar-benar menghapus objek sampai semua handel objek ditutup dan tidak ada penunjuk yang dirujuk yang tersisa.

Driver harus menutup setiap handel yang terbuka segera setelah handel tidak lagi diperlukan. Handel kernel, yang dibuka oleh utas sistem atau dengan menentukan bendera OBJ_KERNEL_HANDLE, hanya dapat ditutup ketika mode prosesor sebelumnya adalah KernelMode. Persyaratan ini berlaku baik untuk utas sistem maupun untuk mengirimkan rutinitas untuk IRP yang dikeluarkan dari mode kernel. (Untuk informasi selengkapnya tentang mode prosesor sebelumnya, lihat ExGetPreviousMode.) Misalnya, handel yang dikembalikan NtCreateKey ke rutinitas DriverEntry kemudian tidak dapat ditutup oleh rutinitas pengiriman driver yang sama. Rutinitas DriverEntry berjalan dalam proses sistem, sedangkan rutinitas pengiriman biasanya berjalan baik dalam konteks utas yang mengeluarkan permintaan I/O saat ini, atau, untuk driver tingkat bawah, dalam konteks utas arbitrer.

Handel nonkernel hanya dapat ditutup jika salah satu dari dua kondisi terpenuhi: Mode prosesor sebelumnya adalah KernelMode, atau utas panggilan memiliki izin yang memadai untuk menutup handel. Contoh yang terakhir terjadi ketika utas panggilan adalah yang membuat handel.

Penelepon NtClose tidak boleh berasumsi bahwa rutinitas ini secara otomatis menunggu semua I/O selesai sebelum kembali.

Jika panggilan ke fungsi ini terjadi dalam mode pengguna, Anda harus menggunakan nama "NtClose" alih-alih "ZwClose".

Untuk panggilan dari driver mode kernel, versi NtXxx dan ZwXxx dari rutinitas Windows Native System Services dapat berperilaku berbeda dalam cara mereka menangani dan menafsirkan parameter input. Untuk informasi selengkapnya tentang hubungan antara versi NtXxx dan ZwXxx dari rutinitas, lihat Menggunakan Versi Nt dan Zw dari Rutinitas Layanan Sistem Asli.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000
Target Platform Universal
Header ntifs.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Aturan kepatuhan DDI HwStorPortProhibitedDDIs, IrqlZwPassive, PowerIrpDDis, ZwRegistryCreate, ZwRegistryCreate(storport), ZwRegistryOpen, ZwRegistryOpen(storport)

Lihat juga

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection