请问REG_SZ型注册表值项的最大长度是多少?

sdcer 2004-12-11 03:37:48
如题,在做一个注册表程序,但不知道这种类型的最大长度是多少,所以分配缓冲区比较麻烦。


谢谢各位。经过测试,没有发现这种类型的最长值。
...全文
992 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hc_z 2005-07-04
  • 打赏
  • 举报
回复
Remarks
Value lengths are limited by available memory. Long values (more than 2048 bytes) should be stored as files with the file names stored in the registry. This helps the registry perform efficiently. Application elements such as icons, bitmaps, and executable files should be stored as files and not be placed in the registry.

The key identified by the hKey parameter must have been opened with KEY_SET_VALUE access. To open the key, use the RegCreateKeyEx or RegOpenKeyEx function.

If dwType is the REG_SZ, REG_MULTI_SZ, or REG_EXPAND_SZ type and the ANSI version of this function is used (either by explicitly calling RegSetValueExA or by not defining UNICODE before including the Windows.h file), the data pointed to by the lpData parameter must be an ANSI character string. The string is converted to Unicode before it is stored in the registry.

Windows 95/98/Me: The maximum size of a single registry value is 16,300 bytes. This limit includes the size of the data (cbData) and the size of the value name (lpValueName).

Windows 95/98/Me: There is a 64K limit for the total size of all values of a key.

Windows 95/98/Me: RegSetValueExW is supported by the Microsoft Layer for Unicode. To use this, you must add certain files to your application, as outlined in Microsoft Layer for Unicode on Windows 95/98/Me Systems.

sdcer 2005-03-18
  • 打赏
  • 举报
回复
说了半天谁也没告诉我,到底REG_SZ型键值的最大长度到底是多少。!!!??
sdcer 2004-12-11
  • 打赏
  • 举报
回复
长度事先是知道的,

但假如你想将这个值通过网络传递给另一方,那另一方不知道数据的长度,所以,它的接收缓冲区就没法分配。
w100 2004-12-11
  • 打赏
  • 举报
回复
REG_BINARY Binary data in any form.
REG_DWORD A 32-bit number.
REG_DWORD_LITTLE_ENDIAN A 32-bit number in little-endian format. This is equivalent to REG_DWORD.
In little-endian format, a multi-byte value is stored in memory from the lowest byte (the "little end") to the highest byte. For example, the value 0x12345678 is stored as (0x78 0x56 0x34 0x12) in little-endian format.

Windows NT/Windows 2000, Windows 95, and Windows 98 are designed to run on little-endian computer architectures. A user may connect to computers that have big-endian architectures, such as some UNIX systems.

REG_DWORD_BIG_ENDIAN A 32-bit number in big-endian format.
In big-endian format, a multi-byte value is stored in memory from the highest byte (the "big end") to the lowest byte. For example, the value 0x12345678 is stored as (0x12 0x34 0x56 0x78) in big-endian format.
msdn中定义:
REG_EXPAND_SZ A null-terminated string that contains unexpanded references to environment variables (for example, "%PATH%"). It will be a Unicode or ANSI string depending on whether you use the Unicode or ANSI functions. To expand the environment variable references, use the ExpandEnvironmentStrings function.
REG_LINK A Unicode symbolic link. Used internally; applications should not use this type.
REG_MULTI_SZ An array of null-terminated strings, terminated by two null characters.
REG_NONE No defined value type.
REG_QWORD A 64-bit number.
REG_QWORD_LITTLE_ENDIAN A 64-bit number in little-endian format. This is equivalent to REG_QWORD.
REG_RESOURCE_LIST A device-driver resource list.
REG_SZ A null-terminated string. It will be a Unicode or ANSI string, depending on whether you use the Unicode or ANSI functions.
Winnt.h中的定义:
#define REG_NONE ( 0 ) // No value type
#define REG_SZ ( 1 ) // Unicode nul terminated string
#define REG_EXPAND_SZ ( 2 ) // Unicode nul terminated string
// (with environment variable references)
#define REG_BINARY ( 3 ) // Free form binary
#define REG_DWORD ( 4 ) // 32-bit number
#define REG_DWORD_LITTLE_ENDIAN ( 4 ) // 32-bit number (same as REG_DWORD)
#define REG_DWORD_BIG_ENDIAN ( 5 ) // 32-bit number
#define REG_LINK ( 6 ) // Symbolic Link (unicode)
#define REG_MULTI_SZ ( 7 ) // Multiple Unicode strings
#define REG_RESOURCE_LIST ( 8 ) // Resource list in the resource map
#define REG_FULL_RESOURCE_DESCRIPTOR ( 9 ) // Resource list in the hardware description
#define REG_RESOURCE_REQUIREMENTS_LIST ( 10 )
superhandsome 2004-12-11
  • 打赏
  • 举报
回复
双字节够了吧
DentistryDoctor 2004-12-11
  • 打赏
  • 举报
回复
一般来说键值的长度你事先大概已经知道了吧。
liufeng24 2004-12-11
  • 打赏
  • 举报
回复
最好用1024
winxp系统结构5课(注册表)->1认识注册表 作者:netcicala 来源:www.netcicala.com 发布时间:2007-7-4 19:56:01 减小字体 增大字体 一.计算机原理2课(硬件)->二.计算机脚本技术25课(DOS命令/批处理/VBS脚本)->三.winxp系统结构5课(注册表)->四.计算机病毒原理5课(VBS/VC语言实现)->五.网络安全及其网络软件应用10课->六.VB6.0程序设计入门10课->七.C语言程序设计入门10课->时间:每周一,二,四8:00~9:00。UC房间:黑客家族网络安全本人UC号:38378943 83034769winxp系统结构5课(注册表)->1认识注册表时间:6月28日晚20点30-22点地点:UC聊天室-> 黑客家族网络安全讲义地址:http://www.netcicala.com/article/sort015/info-251.html大概内容:FSO 对象主讲:网蝉。WINXP的系统结构:==============================================================windows启动过程:1,windows的启动过程:一,winxp首先加载NTLDR文件。 此文件位于:C:根目录下。二,初始化:NTLDR加载后会将处理器从实模式转化为32位保护模式。三,读取boot.ini文件,c:\下的boot.ini和bootsect.dos配合来完成多操作系统的管理。四,加载NtDetect.com文件:此文件的作用是检测计算机硬件,如并口,显示适配器等设备, 并将收集到的信息的硬件列表返回NTLDR用于以后的注册表中注册保存。五,选择硬件配置文件,一般WINxp会按照默认形式加载,如要修改,可直接到设备管理器中进行修改。六,装在内核:NtOsKrNl.exe 此文件位于windows\system32目录下。七,HAL加载:HAL=硬件抽象层,系统会采用HAL来隐藏特定平台的硬件接口细节。 为操作系统提供虚拟硬件平台,使其具有硬件无关性。八,内核初始化,NTLDR将控制权交给NtOsKrNl.exe,九,开始装并初始化设备驱动程序,启动win32子系统和winxp的各项服务系统。十,win32子系统启动winlogon.exe,并启动LSASS.EXE显示登陆对话框,同时windows也会配置网络设备/用户环境, 个性化设置等信息。 =====================================================windows注册表注册表的用途:用来记录windows系统配置信息和软件配置情况的数据库。什么是系统配置情况? 例如你把显示器分辨率变成800*600的了,下次启动的时候将会是800*600。又如windows开机会自动运行哪些程序。什么叫软件配置情况?例如我们设置uctools里面的自动留言功能,则在uctools.ini里面就有你设置自动回复的文字项在里面。为什么很多安装软件都要去改写注册表?1,在系统中注册。2,在注册表中保存软件配置信息。为什么某些软件你对他的使用情况配置了一下, 下次启动之后这个软件的配置就会保留?1,注册表中做记录。2,程序自身或程序的数据库文件内记录。例子1:在数据文件中配置我们的软件。Set fso = CreateObject("Scripting.FileSystemObject")If fso.FileExists("password.txt") Then set objTextFile = fso.OpenTextFile("password.txt",1) k= objTextFile.Readline l= objTextFile.Readline objTextFile.Close End IfSet f = fso.CreateTextFile("password.txt", True)i=InputBox("输入用户名","用户信息确认",k)j=InputBox("输入密码","用户信息确认",l)f.WriteLine(i)f.WriteLine(j)f.CloseSet fso=Nothing上面脚本执行第一次的时候,我们输入一个信息到程序中。 当地二次运行后,你会发现他所显示的是我们上一次打开这个程序的时候输入的内容。注册表是用来记录WINDOWS系统配置信息的。 道理同我们上例中的password.txt文件一样,是一个数据库文件。例子2:在注册表中配置我们的软件。on error resume nextSet WshShell = WScript.CreateObject("WScript.Shell")readreg = WshShell.RegRead("HKCU\Software\aaa\")If readreg="" ThenMsgBox("软件没有配置过")ElseMsgBox("配置信息为:"&readreg)End Ifaa=InputBox("输入/更改我们的软件配置信息")WshShell.RegWrite"HKCU\Software\aaa\",aa, "REG_SZ"set WshShell=Nothing为什么双击exe文件会直接运行,而双击txt文本打开的却是记事本?===================================================== 名称---〉数据类--〉描述二进制值 REG_BINARY 原始二进制数据。大多数硬件组件信息作为二进制数据存储,以十六进制的格式显示在注册表编辑器中。=====================================================DWORD 值REG_DWORD由 4 字节长(32 位整数)的数字表示的数据。设备驱动程序和服务的许多参数都是此类,以二进制、十六进制或十进制格式显示在注册表编辑器中。与之有关的值是 DWORD_LITTLE_ENDIAN(最不重要的字节在最低位地址)和 REG_DWORD_BIG_ENDIAN(最不重要的字节在最高位地址)。=====================================================可扩展字符串值 REG_EXPAND_SZ 长度可变的数据字符串。这种数据类包括程序或服务使用该数据时解析的变量。=====================================================多字符串值 REG_MULTI_SZ 多字符串。包含用户可以阅读的列表或多个值的值通常就是这种类。各条目之间用空格、逗号或其他标记分隔。=====================================================字符串值 REG_SZ 长度固定的文本字符串。=====================================================二进制值 REG_RESOURCE_LIST一系列嵌套的数组,用于存储硬件设备驱动程序或它控制的某个物理设备所使用的资源列表。此数据由系统检测并写入 \ResourceMap 树,作为二进制值以十六进制的格式显示在注册表编辑器中。=====================================================二进制值 REG_RESOURCE_REQUIREMENTS_LIST 一系列嵌套的数组,用于存储一个设备驱动程序(或其控制的某个物理设备)可以使用的硬件资源列表。系统将此列表的子集写入 \ResourceMap 树。此数据由系统检测,作为二进制值以十六进制的格式显示在注册表编辑器中。=====================================================二进制值 REG_FULL_RESOURCE_DESCRIPTOR 一系列嵌套的数组,用于存储物理硬件设备使用的资源列表。此数据由系统检测并写入 \HardwareDescription 树,作为二进制值以十六进制的格式显示在注册表编辑器中。=====================================================无 REG_NONE 没有具体类的数据。此数据由系统或应用程序写到注册表,作为二进制值以十六进制的格式显示在注册表编辑器中。=====================================================链接 REG_LINK 一个 Unicode 字符串,它命名一个符号链接。=====================================================QWORD 值 REG_QWORD 由 64 位整数数字表示的数据。此数据作为二进制值显示在注册表编辑器中,最初用在 Windows 2000 中。=====================================================注册表配置单元是注册表中的一组项、子项和值,它有一组支持文件,这些文件包含其数据的备份。在 Windows NT 4.0、Windows 2000、Windows XP 和 Windows Server 2003 中,除 HKEY_CURRENT_USER 之外,所有其他配置单元的支持文件都位于 Systemroot\System32\Config 文件夹中;HKEY_CURRENT_USER 的支持文件位于C:\Documents and Settings\用户名\NTUSER.DAT文件夹中。注册表配置单元 支持文件HKEY_LOCAL_MACHINE\SAM Sam、Sam.log、Sam.savHKEY_LOCAL_MACHINE\Security Security、Security.log、Security.savHKEY_LOCAL_MACHINE\Software Software、Software.log、Software.savHKEY_LOCAL_MACHINE\System System、System.alt、System.log、System.savHKEY_CURRENT_CONFIG System、System.alt、System.log、System.sav、Ntuser.dat、Ntuser.dat.logHKEY_USERS\DEFAULT Default、Default.log、Default.sav注册表的修改方法:1,REGEDIT2,INF文件3,REG命令4,VBS5,编程改写(如VB/VC/DELPHI等)6,程序改写,如WINDOWS优化大师等软件。

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧