第四篇 一个简单的任务(二)(续)(已修改)

啊,终于毕业了,回到家过完暑假就该上班了。值得庆幸的是,现在终于又有时间写这个教程了。让大家久等了,实在是不好意思。由于个人水平有限,所以也不知道能写到什么地步,实在是让来我空间的一些高手失望了哈!

        好了,废话也就不多说了。现在接着我的“一个简单的任务”讲起。前面提到我们通过修改注册表项“HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Run”来完成程序的开机自启动。我们需要使用三个API函数来完成这个目的。它们分别是RegCreateKeyEx 、RegSetValueEx 和RegCloseKey 。

        在前面我已经大体描述了使用这三个API函数修改注册表的流程,现在我详细讲一下每个函数、使用方法以及整个流程。

        首先,我们用RegCreateKeyEx函数来打开一个注册表项,并得到一个可操作的句柄。此函数的原型如下:

        LONG RegCreateKeyEx(
        HKEY
hKey,
        LPCWSTR
lpSubKey,
        DWORD
Reserved,
        LPWSTR
lpClass,
        DWORD
dwOptions,
        REGSAM
samDesired,
        LPSECURITY_ATTRIBUTES
lpSecurityAttributes,
        PHKEY
phkResult,
        LPDWORD
lpdwDisposition );  

        返回值:返回宏ERROR_SUCCESS,表示打开注册表项成功。

        参数:

        HKEY hKey此参数为子键所在的父键的句柄,预定义好的句柄有HKEY_CLASSES_ROOT 、HKEY_CURRENT_USER 、HKEY_LOCAL_MACHINE 和HKEY_USERS 。这些已经预定义好,可直接填入就好了。

        LPCWSTR lpSubKey此参数传递的是一个字符串指针,该指针指向指明子健的字符串,如:"Software//Microsoft//Windows//CurrentVersion//Run"。

        DWORD Reserved此设置为0就好。

        LPWSTR lpClass设置为NULL就好。

        DWORD dwOptions:子健的特殊选项。可以为以下三个值:

        REG_OPTION_NON_VOLATILE:默认选项,表示子健不是临时的,将会保存在文件中,在系统重启之后不会丢失。
        REG_OPTION_VOLATILE:临时子健。将仅被保存在内存中,重启后丢失。
        REG_OPTION_BACKUP_RESTORE:略。

        REGSAM samDesired:指明访问权限的标记。可以是以下一些值,或者它们的组合:KEY_CREATE_LINK、KEY_CREATE_SUB_KEY、KEY_ENUMERATE_SUB_KEYS、KEY_EXECUTE、KEY_NOTIFY、KEY_QUERY_VALUE、KEY_SET_VALUE、KEY_ALL_ACCESS、KEY_READ、KEY_WOW64_64KEY、KEY_WOW64_32KEY、KEY_WRITE。具体含义请自行查阅MSDN,这里我们使用KEY_ALL_ACCESS就可以了。

        LPSECURITY_ATTRIBUTES lpSecurityAttributes:设置为NULL就好。

        PHKEY phkResult:此参数为子健句柄的指针,不用初始化,只需要将参数填入,函数将传出句柄的值。

        LPDWORD lpdwDisposition:一个双字变量的指针,不用初始化,若函数调用成功后,其内容被改为REG_CREATED_NEW_KEY,则表明子健本身不存在而被创建;若被改为REG_OPENED_EXISTING_KEY,则表明子健本身存在,只是被简单地打开,没有被修改。

        在通过此函数打开子健,得到子健句柄后,我们就可以通过此句柄来修改子健的值。这里我们需要使用第二个API函数RegSetValueEx 。此函数的原型如下:

        LONG RegSetValueEx(
        HKEY hKey,
        LPCWSTR lpValueName,
        DWORD Reserved,
        DWORD dwType,
        const BYTE *lpData,
        DWORD cbData );

        返回值:返回宏ERROR_SUCCESS,表示设置键值成功。

        参数:

        HKEY hKey:这里传入前面打开的子健的句柄。

        LPCWSTR lpValueName:字符串指针,指向键值的名称字符串。

        DWORD Reserved:设置为0 。

        DWORD dwType:设置键值的数据类型。可为:REG_BINARY、REG_DWORD、REG_DWORD_LITTLE_ENDIAN、REG_DWORD_BIG_ENDIAN、REG_EXPAND_SZ、REG_LINK、REG_MULTI_SZ、REG_NONE、REG_RESOURCE_LIST、REG_SZ等值。具体意义,可自行查看MSDN。

        const BYTE *lpData:设置键值的数据缓冲区。

        DWORD cbData:键值数据缓冲区的大小,按字节计算。

        通过这个函数设置好键值后,工作就差不多了~ 不过最后,我们别忘了调用RegCloseKey函数来关闭打开的句柄。这个函数调用就简单了:

        LONG RegCloseKey( HKEY hKey );

        返回值:返回宏ERROR_SUCCESS,表示关闭句柄成功。

        这里只需要将前面打开的句柄传入就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值