Fungsi RegQueryValueExW (winreg.h)
Mengambil jenis dan data untuk nama nilai yang ditentukan yang terkait dengan kunci registri terbuka.
Peringatan
Jika nilai yang dikueri adalah string (REG_SZ, REG_MULTI_SZ, dan REG_EXPAND_SZ) nilai yang dikembalikan TIDAK dijamin akan dihentikan null. Gunakan fungsi
Sintaksis
LSTATUS RegQueryValueExW(
[in] HKEY hKey,
[in, optional] LPCWSTR lpValueName,
LPDWORD lpReserved,
[out, optional] LPDWORD lpType,
[out, optional] LPBYTE lpData,
[in, out, optional] LPDWORD lpcbData
);
Parameter
[in] hKey
Handel ke kunci registri terbuka. Kunci harus dibuka dengan hak akses KEY_QUERY_VALUE. Untuk informasi selengkapnya, lihat Keamanan Kunci Registri dan Hak Akses.
Handel ini dikembalikan oleh RegCreateKeyEx, RegCreateKeyTransacted, RegOpenKeyEx, atau fungsi RegOpenKeyTransacted. Ini juga bisa menjadi salah satu kunci berikut yang telah ditentukan sebelumnya:
- HKEY_CLASSES_ROOT
- HKEY_CURRENT_CONFIG
- HKEY_CURRENT_USER
- HKEY_LOCAL_MACHINE
- HKEY_PERFORMANCE_DATA
- HKEY_PERFORMANCE_NLSTEXT
- HKEY_PERFORMANCE_TEXT
- HKEY_USERS
[in, optional] lpValueName
Nama nilai registri.
Jika lpValueName NULL atau string kosong, "", fungsi mengambil jenis dan data untuk nilai kunci yang tidak disebutkan namanya atau default, jika ada.
Jika lpValueName menentukan nilai yang tidak ada dalam registri, fungsi mengembalikan ERROR_FILE_NOT_FOUND.
Kunci tidak secara otomatis memiliki nilai yang tidak disebutkan namanya atau default. Nilai yang tidak disebutkan namanya bisa dari jenis apa pun. Untuk informasi selengkapnya, lihat Batas Ukuran Elemen Registri.
lpReserved
Parameter ini dicadangkan dan harus NULL.
[out, optional] lpType
Penunjuk ke variabel yang menerima kode yang menunjukkan jenis data yang disimpan dalam nilai yang ditentukan. Untuk daftar kode jenis yang mungkin, lihat Jenis Nilai Registri . Parameter lpType dapat null jika kode jenis tidak diperlukan.
[out, optional] lpData
Penunjuk ke buffer yang menerima data nilai. Parameter ini dapat NULL jika data tidak diperlukan.
[in, out, optional] lpcbData
Penunjuk ke variabel yang menentukan ukuran buffer yang diacu oleh parameter lpData
Parameter lpcbData
Jika data memiliki jenis REG_SZ, REG_MULTI_SZ, atau REG_EXPAND_SZ, ukuran ini mencakup karakter atau karakter null
Jika buffer yang ditentukan oleh parameter lpData
Jika lpData
Jika
Jika nilai registri lpValueName
Mengembalikan nilai
Jika fungsi berhasil, nilai yang dikembalikan adalah ERROR_SUCCESS.
Jika fungsi gagal, nilai yang dikembalikan adalah kode kesalahan sistem .
Jika buffer lpData
Jika nilai registri lpValueName
Komentar
Aplikasi biasanya memanggil RegEnumValue
Jika data memiliki jenis REG_SZ, REG_MULTI_SZ, atau REG_EXPAND_SZ, string mungkin belum disimpan dengan penghentian yang tepat karakter null. Oleh karena itu, bahkan jika fungsi mengembalikan ERROR_SUCCESS, aplikasi harus memastikan bahwa string dihentikan dengan benar sebelum menggunakannya; jika tidak, itu dapat menimpa buffer. (Perhatikan bahwa string REG_MULTI_SZ harus memiliki dua karakter null
Jika data memiliki REG_SZ, REG_MULTI_SZ atau jenis REG_EXPAND_SZ, dan versi ANSI dari fungsi ini digunakan (baik dengan secara eksplisit memanggil RegQueryValueExA atau dengan tidak menentukan UNICODE sebelum menyertakan file Windows.h), fungsi ini mengonversi string Unicode yang disimpan menjadi string ANSI sebelum menyalinnya ke buffer yang ditunjukkan oleh lpData.
Saat memanggil fungsi
Perhatikan bahwa operasi yang mengakses kunci registri tertentu dialihkan. Untuk informasi selengkapnya, lihat Virtualisasi Registri
Contoh
Pastikan Anda menginisialisasi ulang nilai yang ditunjukkan oleh parameter lpcbData
#include <windows.h>
#include <malloc.h>
#include <stdio.h>
#define TOTALBYTES 8192
#define BYTEINCREMENT 4096
void main()
{
DWORD BufferSize = TOTALBYTES;
DWORD cbData;
DWORD dwRet;
PPERF_DATA_BLOCK PerfData = (PPERF_DATA_BLOCK) malloc( BufferSize );
cbData = BufferSize;
printf("\nRetrieving the data...");
dwRet = RegQueryValueEx( HKEY_PERFORMANCE_DATA,
TEXT("Global"),
NULL,
NULL,
(LPBYTE) PerfData,
&cbData );
while( dwRet == ERROR_MORE_DATA )
{
// Get a buffer that is big enough.
BufferSize += BYTEINCREMENT;
PerfData = (PPERF_DATA_BLOCK) realloc( PerfData, BufferSize );
cbData = BufferSize;
printf(".");
dwRet = RegQueryValueEx( HKEY_PERFORMANCE_DATA,
TEXT("Global"),
NULL,
NULL,
(LPBYTE) PerfData,
&cbData );
}
if( dwRet == ERROR_SUCCESS )
printf("\n\nFinal buffer size is %d\n", BufferSize);
else printf("\nRegQueryValueEx failed (%d)\n", dwRet);
}
Nota
Header winreg.h mendefinisikan RegQueryValueEx sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta preprosedur UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.
Persyaratan
Syarat | Nilai |
---|---|
klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
server minimum yang didukung |
Windows 2000 Server [hanya aplikasi desktop] |
Platform Target |
Windows |
Header |
winreg.h (termasuk Windows.h) |
Pustaka |
Advapi32.lib |
DLL |
Advapi32.dll |
Lihat juga
Fungsi Registri
Gambaran Umum