Fungsi ZwCreateKeyTransacted (wdm.h)
Rutinitas ZwCreateKeyTransacted membuat kunci registri baru atau membuka yang sudah ada, dan mengaitkan kunci dengan transaksi.
Sintaks
NTSYSAPI NTSTATUS ZwCreateKeyTransacted(
[out] PHANDLE KeyHandle,
[in] ACCESS_MASK DesiredAccess,
[in] POBJECT_ATTRIBUTES ObjectAttributes,
ULONG TitleIndex,
[in, optional] PUNICODE_STRING Class,
[in] ULONG CreateOptions,
[in] HANDLE TransactionHandle,
[out, optional] PULONG Disposition
);
Parameter
[out] KeyHandle
Penunjuk ke variabel HANDLE tempat rutin menulis handel ke kunci.
[in] DesiredAccess
Menentukan jenis akses ke kunci yang diminta pemanggil. Parameter ini adalah nilai ACCESS_MASK . Untuk informasi selengkapnya, lihat deskripsi parameter DesiredAccess dari rutinitas ZwCreateKey .
[in] ObjectAttributes
Penunjuk ke atribut objek kunci yang sedang dibuka. Parameter ini menunjuk ke struktur OBJECT_ATTRIBUTES yang sebelumnya harus diinisialisasi oleh rutinitas InitializeObjectAttributes . Pemanggil harus menentukan nama kunci registri sebagai parameter ObjectName dalam panggilan ke InitializeObjectAttributes. Jika pemanggil tidak berjalan dalam konteks utas sistem, pemanggil harus mengatur atribut OBJ_KERNEL_HANDLE saat memanggil InitializeObjectAttributes.
TitleIndex
Perangkat dan driver perantara mengatur parameter ini ke nol.
[in, optional] Class
Perangkat dan driver perantara mengatur parameter ini ke NULL.
[in] CreateOptions
Menentukan opsi yang akan diterapkan saat rutin membuat atau membuka kunci. Atur parameter ini ke nol atau ke bitwise OR dari satu atau beberapa bit bendera REG_OPTION_XXX berikut.
Bendera CreateOptions | Deskripsi |
---|---|
REG_OPTION_VOLATILE | Kunci tidak dipertahankan setelah komputer dimulai ulang. |
REG_OPTION_NON_VOLATILE | Kunci dipertahankan setelah komputer dimulai ulang. |
REG_OPTION_CREATE_LINK | Kuncinya adalah tautan simbolis. Bendera ini tidak digunakan oleh perangkat dan driver perantara. |
REG_OPTION_BACKUP_RESTORE | Buka kunci dengan hak istimewa khusus yang mengaktifkan operasi pencadangan dan pemulihan. Bendera ini tidak digunakan oleh perangkat dan driver perantara. |
[in] TransactionHandle
Handel ke objek transaksi. Untuk mendapatkan handel ini, Anda dapat memanggil rutinitas ZwCreateTransaction . Atau, jika Anda memiliki penunjuk ke objek transaksi, Anda dapat menyediakan penunjuk ke rutinitas ObOpenObjectByPointer untuk mendapatkan handel transaksi yang sesuai.
[out, optional] Disposition
Penunjuk ke lokasi tempat rutin menulis salah satu nilai berikut untuk menunjukkan apakah panggilan membuat kunci baru atau membuka yang sudah ada.
Nilai disposisi | Deskripsi |
---|---|
REG_CREATED_NEW_KEY | Kunci baru dibuat. |
REG_OPENED_EXISTING_KEY | Kunci yang ada telah dibuka. |
Anda dapat mengatur Disposisi = NULL jika informasi ini tidak diperlukan.
Nilai kembali
ZwCreateKeyTransacted mengembalikan STATUS_SUCCESS jika panggilan berhasil membuat atau membuka kunci. Kemungkinan nilai pengembalian kesalahan meliputi yang berikut ini:
Menampilkan kode | Deskripsi |
---|---|
|
Parameter ObjectAttributes adalah NULL atau menunjuk ke informasi yang tidak valid, atau nilai parameter CreateOptions menentukan opsi yang tidak valid. |
|
Jalur registri dalam atribut objek tidak valid. |
|
Jalur registri dalam atribut objek tidak ditemukan. |
|
Pemanggil tidak memiliki hak akses yang diperlukan untuk membuka handel untuk kunci registri bernama. |
|
Operasi alokasi memori gagal. |
Keterangan
Rutinitas ini menyediakan handel yang dapat diakses oleh pemanggil kunci registri. Selain itu, rutinitas ini mengaitkan kunci dengan transaksi aktif.
Setelah handel yang ditunjukkan oleh KeyHandle tidak lagi digunakan, driver harus memanggil rutinitas ZwClose untuk menutupnya.
Seperti ZwCreateKeyTransacted, rutinitas ZwOpenKeyTransacted mengaitkan kunci dengan transaksi. Tidak seperti ZwCreateKeyTransacted, yang dapat membuat kunci baru atau membuka kunci yang ada, ZwOpenKeyTransacted hanya dapat membuka kunci registri yang sudah ada.
Setelah driver mode kernel mendapatkan handel ke transaksi (misalnya, dengan memanggil ZwCreateTransaction), driver dapat melakukan serangkaian operasi registri yang merupakan bagian dari transaksi ini. Driver dapat menutup transaksi baik dengan berkomitmen pada perubahan yang dilakukan dalam transaksi atau dengan menggulung balik transaksi.
Setelah driver berhasil menyelesaikan semua operasi registri yang merupakan bagian dari transaksi, driver dapat memanggil rutinitas ZwCommitTransaction untuk berkomitmen pada perubahan. Driver dapat memanggil rutinitas ZwRollbackTransaction untuk mengembalikan transaksi.
Selama transaksi, operasi registri adalah bagian dari transaksi jika panggilan sistem yang melakukan operasi memenuhi salah satu kondisi berikut:
- Panggilan menentukan, sebagai parameter input, handel transaksi. Misalnya, panggilan ke ZwCreateKeyTransacted dan ZwOpenKeyTransacted dapat mengaitkan satu atau beberapa handel ke kunci registri dengan transaksi.
- Panggilan menentukan, sebagai parameter input, handel kunci registri yang diperoleh dengan panggilan ke ZwCreateKeyTransacted atau ZwOpenKeyTransacted tempat handel transaksi disediakan. Misalnya, panggilan ke rutinitas ZwSetValueKey dapat menggunakan handel kunci yang diperoleh dengan cara ini untuk menetapkan nilai kunci registri sebagai bagian dari transaksi.
Deskriptor keamanan dalam atribut objek menentukan apakah hak akses yang ditentukan oleh parameter DesiredAccess diberikan pada panggilan nanti ke rutinitas, seperti ZwOpenKeyTransacted yang mengakses kunci, atau ke rutinitas, seperti ZwCreateKeyTransacted, yang membuat subkunci kunci.
Jika pemanggil mode kernel tidak berjalan dalam konteks utas sistem, pemanggil harus memastikan bahwa setiap penanganan yang dibuatnya adalah handel kernel. Jika tidak, handel dapat diakses oleh proses dalam konteks driver yang berjalan. Untuk informasi selengkapnya, lihat Penanganan Objek.
Untuk informasi selengkapnya tentang cara bekerja dengan kunci registri dalam mode kernel, lihat Menggunakan Registri di Driver.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia di Windows Vista dan versi Windows yang lebih baru. |
Target Platform | Universal |
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk