注册表API函数
·创建/打开Key
LONG RegCreateKeyEx(
HKEY hKey,
LPCWSTR lpSubKey,
DWORD Reserved,
LPWSTR lpClass,
DWORD dwOptions,
REGSAM samDesired,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
PHKEY phkResult,
LPDWORD lpdwDisposition
);
如果指定的子键存在则打开,不存在则创建该子键并打开。
hKey:要创建或者打开的键的父键。如:HKEY_LOCAL_MACHINE,HKEY_CURRENT_USER。
lpSubKey:要创建或者打开的键的名称。如:_T("Drivers//Active//")。
lpClass:该参数是一个指针,指向包含键的类名称的字符串。如果没有类名称要制定,则设置为NULL。
dwOptions:设置为REG_OPTION_NON_VOLATILE,表示创建非易失性的键,在系统重新启动后,该键保留。设置为REG_OPTION_VOLATILE,当系统重新启动后,所创建的键将不保存。该参数对于打开键时被忽略。
samDesired:忽略,设置为0。
lpSecurityAttributes:设置为NULL。
phkResult:用于存储创建或者打开的键的句柄。
lpdwDisposition:用于存储子键是被打开还是创建的信息。REG_CREATED_NEW_KEY表示子键不存在,是被创建的。REG_OPENED_EXISTING_KEY表示子键存在,是被打开的。
函数执行成功,返回ERROR_SUCCESS。
·打开Key
LONG RegOpenKeyEx(
HKEY hKey,
LPCWSTR lpSubKey,
DWORD ulOptions,
REGSAM samDesired,
PHKEY phkResult
);
其参数与RegCreateKeyEx函数的参数含义相同。如果指定的子键不存在,该函数不会去创建它,而是执行失败。
·写入键值
LONG RegSetValueEx(
HKEY hKey,
LPCWSTR lpValueName,
DWORD Reserved,
DWORD dwType,
const BYTE* lpData,
DWORD cbData
);
hKey:已打开的键的句柄,通常是上面两个函数的输出参数phkResult。
lpValueName:用于设置键值的名称,如果此键值名称不存在,就新添一个键值,否则就修改此键值。
dwType:用于设置键值的数据类型。
REG_BINARY | 二进制数据 |
REG_DWORD | 4字节32位整数 |
REG_DWORD_LITTLE_ENDIAN | 等同于REG_DWORD |
REG_DWORD_BIG_ENDIAN | 以big-endian格式存储的DWORD值 |
REG_EXPAND_SZ | 使用嵌入式环境变量,以0终止的字符串 |
REG_LINK | 应用程序不使用 |
REG_MULTI_SZ | 一系列以0终止的字符串,是以两个0字符终止 |
REG_NONE | 没有定义的数据类型 |
REG_RESOURCE_LIST | 设备驱动的资源列表 |
REG_SZ | 以0终止的Unicode字符串 |
lpData:指向存储要写入的数据的缓冲区。
cbData:指定lpData所指向的缓冲区的大小。
·读取键值
LONG RegQueryValueEx(
HKEY hKey,
LPCWSTR lpValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData
);
hKey:已打开的键的句柄。
lpValueName:要读取的键值的名称。
lpType:所读取的键值的数据类型。
lpData:存储所读取键值的值。
lpcbData:做为输入参数用来指定lpData缓冲区的大小,做为输出参数用来存储所读取键值的值的长度。
·删除键
LONG RegDeleteKey(
HKEY hKey,
LPCWSTR lpSubKey
);
hKey:要删除的键的父键,通常此参数被设置为根键常数或者已打开的键。
lpSubKey:要删除键的名称。
需要注意的是,在调用该函数删除键时,该键不能处于打开状态。
朱铭雷