| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 开发工具 -> 叨一叨注册表中的字符串类型值 -> 正文阅读 |
|
|
[开发工具]叨一叨注册表中的字符串类型值 |
|
如果一个注册表表项的值类型为REG_SZ,请注意了,它并不意味着这个字符串一定会以一个空字符串结束。从底层实现的角度来说,注册表仅仅是一个层次化组织的名值数据库而已。 所以,你可以使用一些小技巧来”欺骗”注册表。 下面的程序代码是一个如何在注册表查询字符串的长度的一个例子。
如果你运行这个例子程序,则你会得到如下的结果:
发生了什么?首先,我们调用的RegSetValueExW给出了一个错误的字符串长度,它宣称字符串的长度为2个字节,而实际值为6个字节。(2个宽字符加上一个结束字符) 第一次调用RegQueryValueExW询问字符串有多大,注册表报告值2,因为这是最初存储该值时给出的值。 为了表明确实没有空终止符,我们要求注册表将这两个字节的数据读入我们的缓冲区,用特殊值预先填充缓冲区,以便我们可以查看哪些内容已更新,哪些内容未更新。 瞧,这些值是从注册表中读取的,并且只读取了两个字节。 sz[0]包含字符“1”,而sz[1]保持未初始化。 安全隐患如果你的程序假定注册表中的字符串总是以空字符结尾,那么如果遇到非空字符结尾的字符串,你可能会被误导,从而导致缓冲区溢出。(例如,如果你使用strcpy来复制它。) 总结我们需要实际测试,从而探究事物的本质。表面上给人的感觉,往往它是不靠谱的。 最后Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。 最近我写了个东西正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
|
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/20 22:52:37- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |