Bagikan melalui


Fungsi NtClose (ntifs.h)

Rutinitas NtClose menutup handel objek.

Sintaksis

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

Parameter

[in] Handle

Tangani ke objek jenis apa pun.

Mengembalikan nilai

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

Mengembalikan kode Arti
STATUS_INVALID_HANDLE Handle 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 handle. Kernel memastikan bahwa handel tidak dapat ditutup dalam kasus tersebut.

Komentar

NtClose adalah rutinitas generik yang beroperasi pada semua jenis objek.

Menutup handel objek terbuka menyebabkan handel 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 merupakan yang dibuka oleh utas sistem atau dengan menentukan bendera OBJ_KERNEL_HANDLE, hanya dapat ditutup ketika mode prosesor sebelumnya KernelMode. Persyaratan ini berlaku baik untuk utas sistem maupun untuk mengirimkan rutinitas untuk RUN yang dikeluarkan dari mode kernel. (Untuk informasi selengkapnya tentang mode prosesor sebelumnya, lihat ExGetPreviousMode.) Misalnya, handel yang NtCreateKey kembali ke rutinitas DriverEntry kemudian tidak dapat ditutup oleh rutinitas pengiriman driver yang sama. DriverEntry rutin 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 alur sewenang-wenang.

Handel nonkernel dapat ditutup hanya jika salah satu dari dua kondisi terpenuhi: Mode prosesor sebelumnya 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, NtXxx dan ZwXxx versi rutin Windows Native System Services dapat berperilaku berbeda dalam cara mereka menangani dan menginterpretasikan parameter input. Untuk informasi selengkapnya tentang hubungan antara NtXxx dan versi ZwXxx rutin, lihat Menggunakan Versi Nt dan Zw dari Rutinitas Layanan Sistem Asli.

Persyaratan

Syarat Nilai
klien minimum yang didukung Windows 2000
Platform Target 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