1、RegOpenKeyEx:该函数用来打开特定的注册表键,注册表键值是不区分大小写的。
该远程调用接口也存在,函数名称为CeRegOpenKeyEx
LONG RegOpenKeyEx(
HKEY hKey,
LPCWSTR lpSubKey,
DWORD ulOptions,
REGSAM samDesired,
PHKEY phkResult
);
Parameters
参数
hKey
入参,标识当前被 RegCreateKeyEx 或RegOpenKeyEx打开的注册表键的句柄,或者是以下预定义的句柄
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
lpSubKey
入参,该参数指向一个字符串,该字符串用来保存将要打开的注册表名称。如果这个参数是空,或者是一个指向空串的指针,该函数将会打开一个由hKey所定义的键,在此种情况下,该函数不会关闭舷墙已经打开的句柄。
ulOptions
入参,保留,设置为0
samDesired
入参。标识打开注册表的权力,如果该参数的安全描述符不容许当前进程访问注册表,则该函数会返回失败。详细的安全描述见下表:
KEY_ALL_ACCESS (0xF003F) | Combines the STANDARD_RIGHTS_REQUIRED, KEY_QUERY_VALUE, KEY_SET_VALUE, KEY_CREATE_SUB_KEY, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, and KEY_CREATE_LINK access rights. |
KEY_CREATE_LINK (0x0020) | Reserved for system use. |
KEY_CREATE_SUB_KEY (0x0004) | Required to create a subkey of a registry key. |
KEY_ENUMERATE_SUB_KEYS (0x0008) | Required to enumerate the subkeys of a registry key. |
KEY_EXECUTE (0x20019) | Equivalent to KEY_READ. |
KEY_NOTIFY (0x0010) | Required to request change notifications for a registry key or for subkeys of a registry key. |
KEY_QUERY_VALUE (0x0001) | Required to query the values of a registry key. |
KEY_READ (0x20019) | Combines the STANDARD_RIGHTS_READ, KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, and KEY_NOTIFY values. |
KEY_SET_VALUE (0x0002) | Required to create, delete, or set a registry value. |
KEY_WOW64_32KEY (0x0200) | Indicates that an application on 64-bit Windows should operate on the 32-bit registry view. For more information, see Accessing an Alternate Registry View. |
This flag must be combined using the OR operator with the other flags in this table that either query or access registry values. | |
KEY_WOW64_64KEY (0x0100) | Indicates that an application on 64-bit Windows should operate on the 64-bit registry view. For more information, see Accessing an Alternate Registry View. |
This flag must be combined using the OR operator with the other flags in this table that either query or access registry values. | |
KEY_WRITE (0x20006) | Combines the STANDARD_RIGHTS_WRITE, KEY_SET_VALUE, and KEY_CREATE_SUB_KEY access rights. |
phkResult
出参,指向一个变量的指针,该变量用来保存打开注册表键的句柄。如果不再使用返回的句柄,则调用RegCloseKey来关闭它。
返回值:
ERROR_SUCCESS表示该函数执行成功,非零值表示该函数执行失败。想要获得错误描述,调用FormatMessage函数,并传入FORMAT_MESSAGE_FROM_SYSTEM参数。
注意:
与RegCreateKeyEx不同,当要打开的键不存在时,RegOpenKeyEx函数不创建新键。
2、RegSetValueEx:该函数用来设置注册表的键值和键类型
LONG RegSetValueEx(
HKEY hKey,
LPCTSTR lpValueName,
DWORD Reserved,
DWORD dwType,
const BYTE× lpDate,
DWORD cbData
);
参数
hKey
入参,标示一个被打开的键的句柄,该键必须以KEY_SET_VALUE 安全级别打开。该句柄可以是由RegCreateKeyEx或者RegOpenKeyEx函数返回的句柄,也可以是一下预定义的句柄值
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_PERFORMANCE_DATA
HKEY_USERS
lpValueName
入参,字符串指针,所指的字符串标示了将要设定的键的名称。如果该键值不存在,该函数则设定该键值。
如果该指针为NULL或者指向的字符串为空,该函数为一个无名字或者默认名字的键设定键值和类型
Reserved
入参,保留,必须为0
dwType
入参,由lpDate所指向的数据的类型,该参数的值如下:
REG_BINARY 任意二进制数.
REG_DWORD 32位的数字.
REG_DWORD_LITTLE_ENDIAN little-endian格式32位的数字。该值在Windows头文件中被定义为REG_DWORD.
REG_DWORD_BIG_ENDIAN big-endian格式的32位数字,一些UNIX系统支持big-endian格式。
REG_EXPAND_SZ 字符串(例如, "%PATH%"). 当你使用Unicode函数,该值则标识Unicode字符串,否则表示ANSI字符串。
REG_LINK 保留值,供系统使用.
REG_MULTI_SZ 字符串数组。以两个空字符结束。
REG_NONE 为定义类型.
REG_QWORD 64位的数字
.
REG_QWORD_LITTLE_ENDIAN little-endian格式的64位数字。
Windows系统是在little-endian结构的计算机上运行的,因此该值在Windows头文件中被定义为REG_QWORD
REG_SZ 字符串,当使用Unicode函数是,该类型表示Unicode字符串,否则表示ANSI字符串。
lpData
入参,指向一个缓存区,该缓存区保存要设置的键值。如果是字符类型,则该字符串必须以NULL结尾,如果是REG_MULTI_SZ类型,该值必须以两个NULL字符结尾。如果最后一个字符不是NULL,该函数将会检查下一个字符,并判断是否以NULL结尾。如果需要,该函数会增加字符串长度以便可以容纳更多的字符
cbData
入参,lpData所指向信息的字节长度。如果是字符串类型,必须包含字符串结束符号。
返回值
如果成功,则返回ERROR_SUCCESS
3、RegQueryValueEx
该函数用来查找一个给定类型和值的注册表项,为了保证任何字符串以空结束符返回,请使用RegGetValue函数
LONG RegQueryValueEx(
HKEY hKey,
LPCTSTR lpValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData
);
参数
hKey
入参,指向一个打开键的句柄。该键必须以KEY_QUERY_VALUE的安全级别打开。该参数可以是RegCreateKeyEx或者RegOpenKeyEx的返回值。也可以是以下预定义的值
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_PERFORMANCE_DATA
HKEY_PERFORMANCE_NLSTEXT
HKEY_PERFORMANCE_TEXT
HKEY_USERS
lpValueName
入参,指向一个以NULL结尾的字符串,该字符串保存了需要查询的键名。如果该参数为空或者该参数指向一个空字符串,该函数则会获取未命名的键或者默认键的类型和值
lpReserved
保存,必须为NULL
lpType
出参,表示查找到的键的类型,如果查找失败,该参数返回NULL
lpData
出参,表示查找到的键值,如果查找失败,则返回空。
lpcbData
出参并且是入参。标识键值的字节长度,包括结束符。
Return Values
如果该函数成功,则返回ERROR_SUCCESS;
4、该函数用来创建注册表键,如果该键已经存在,则打开它(注册表键不区分大小写)
LONG RegCreateKeyEx(
HKEY hKey,
LPCTSTR lpSubKey,
DWORD Reserved,
LPTSTR lpClass,
DWORD dwOptions,
REGSAM samDesired,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
PHKEY phkResult,
LPDWORD lpdwDisposition
);
参数:
hKey
入参,一个打开键的句柄。调用该函数的进程必须拥有KEY_CREATE_SUB_KEY的权力。该句柄可以是RegCreateKeyEx或者RegOpenKeyEx的返回值,也可以是以下预定义的值
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
lpSubKey
入参,标识子键名称。该参数不能为空。参数中不能存在(/)
Reserved
保留值,必须为0
lpClass
入参,指向一个字符串,该字符串定义了该键的类型。可以为空。该参数可以在操作本地和远程注册表时使用
dwOptions
入参,该参数可以是以下值
REG_OPTION_BACKUP_RESTORE,0x00000004L
REG_OPTION_NON_VOLATILE,0x00000000L ,一般使用该值
REG_OPTION_VOLATILE,0x00000001L
samDesired
入参,定义访问权限
lpSecurityAttributes
入参,定义返回的句柄是否可以被子进程继承,为NULL时不能继承。
phkResult
出参,保存返回的句柄
lpdwDisposition
出参,可以是以下值。如果为空,则不返回。
REG_CREATED_NEW_KEY,0x00000001L 该键是新创建的键
REG_OPENED_EXISTING_KEY,0x00000002L 该键是已经存在的键
Return Values
成功则返回 ERROR_SUCCESS.
Remarks
该函数创建的键没有键值。应用程序不能创建HKEY_USERS 或者 HKEY_LOCAL_MACHINE的直接子键。
Windows启动时通常会有一大堆程序自动启动,最重要的两个文件夹和八个注册键。
一、当前用户专有的启动文件夹
这是许多应用软件自动启动的常用位置,Windows自动启动放入该文件夹的所有快捷方式。用户启动文件夹一般在:/Documents and Settings/<用户名字>/「开始」菜单/程序/启动,其中“<用户名字>”是当前登录的用户帐户名称。
二、对所有用户有效的启动文件夹
这是寻找自动启动程序的第二个重要位置,不管用户用什么身份登录系统,放入该文件夹的快捷方式总是自动启动——这是它与用户专有的启动文件夹的区别所在。该文件夹一般在:/Documents and Settings/All Users/「开始」菜单/程序/启动。
三、Load注册键
介绍该注册键的资料不多,实际上它也能够自动启动程序。位置:HKEY_CURRENT_USER/Software/Microsoft/WindowsNT/CurrentVersion/Windows/load。
四、Userinit注册键
位置:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/Winlogon/Userinit。这里也能够使系统启动时自动初始化程序。通常该注册键下面有一个userinit.exe,如图一,但这个键允许指定用逗号分隔的多个程序,例如“userinit.exe,OSA.exe”(不含引号)。
五、Explorer/Run注册键
和load、Userinit不同,Explorer/Run键在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有,具体位置是:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer/Run,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/Explorer/Run。
六、RunServicesOnce注册键
RunServicesOnce注册键用来启动服务程序,启动时间在用户登录之前,而且先于其他通过注册键启动的程序。RunServicesOnce注册键的位置是:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/RunServicesOnce,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunServicesOnce。
七、RunServices注册键
RunServices注册键指定的程序紧接RunServicesOnce指定的程序之后运行,但两者都在用户登录之前。RunServices的位置是:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/RunServices,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunServices。
八、RunOnce/Setup注册键
RunOnce/Setup指定了用户登录之后运行的程序,它的位置是:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/RunOnce/Setup,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnce/Setup。
九、RunOnce注册键
安装程序通常用RunOnce键自动运行程序,它的位置在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnce和HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/RunOnce。HKEY_LOCAL_MACHINE下面的RunOnce键会在用户登录之后立即运行程序,运行时机在其他Run键指定的程序之前。HKEY_CURRENT_USER下面的RunOnce键在操作系统处理其他Run键以及“启动”文件夹的内容之后运行。如果是XP,你还需要检查一下HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnceEx。
此
十、Run注册键
Run是自动运行程序最常用的注册键,位置在:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run。HKEY_CURRENT_USER下面的Run键紧接HKEY_LOCAL_MACHINE下面的Run键运行,但两者都在处理“启动”文件夹之前。
下面使用的是第十方法,在Run下注册键,在Run下写入和删除键值
1.如想在开机自动行C盘下的"测试.txt",可在注册表中Run位置写入键值