黑客24小时在线接单网站

黑客在线接单,网站入侵,渗透测试,渗透网站,入侵网站

*** 安全编程:注册表操作常用API函数

注册表的操作与文件的操作非常相似,也有打开、关闭、写入、查询等操作,即“增、删、改、查”所有的功能都有,只是使用的API函数都是以Reg开头的。

1. 打开和关闭注册表

操作注册表需要通过可以操作注册表的句柄,类似于文件操作。在读写注册表之前,需要通过API通过操作注册表,函数打开注册表,返回用于操作注册表的句柄API函数打开返回的句柄,然后读写注册表。读写操作完成后,通过API函数关闭打开的注册表句柄。

打开注册表使用的函数是RegOpenKeyEx()。在Win16下面有一个函数叫RegOpenKey()虽然这个函数在Win32它仍然可用,但它是为兼容目的而设定的。RegOpenKeyEx()函数的定义如下:

  • LONGRegOpenKeyEx(
  • HKEYhKey,//handletoopenkey
  • LPCTSTRlpSubKey,//subkeyname
  • DWORDulOptions,//reserved
  • REGSAMsamDesired,//securityacces *** ask
  • PHKEYphkResult//handletoopenkey
  • );
  • 参数说明如下。

    hKey:指定父键句柄。

    lpSubKey:指向字符串,表示要打开的子键名称。

    ulOptions:必须将系统保留指定为 0 值。

    samDesired:为了方便注册表的操作,通常使用 KEY_ALL_ACCESS 即可。

    phkResult:指向双子变量接收打开的子键句柄。

    如果函数执行成功,则返回 ERROR_SUCCESS,并且在 phkResult 保存回打开子键的句柄。

    打开注册表的本质是打开注册表的子键,然后操作。

    注册表操作完成后,需关闭打开的注册表句柄,以释放资源。关闭注册表句柄的函数定义如下:

  • LONGRegCloseKey(
  • HKEYhKey//handletokeytoclose
  • );
  • 函数只有一个参数RegOpenKeyEx()函数的最后一个参数,即打开的注册表句柄。

    2. 创建和删除子键

    创建子键API函数为RegCreateKeyEx()其定义如下:

  • LONGRegCreateKeyEx(
  • HKEYhKey,//handletoopenkey
  • LPCTSTRlpSubKey,//subkeyname
  • DWORDReserved,//reserved
  • LPTSTRlpClass,//classstring
  • DWORDdwOptions,//specialoptions
  • REGSAMsamDesired,//desiredsecurityaccess
  • LPSECURITY_ATTRIBUTESlpSecurityAttributes,//inheritance
  • PHKEYphkResult,//keyhandle
  • LPDWORDlpdwDisposition//dispositionvaluebuffer
  • );
  • 参数说明如下。

    hKey:用于指定父键句柄。

    lpSubKey:指向字符串来表示要创建的子键名称。

    Reserved:必须将系统保留指定为 0 值。

    lpClass:子键类名一般设置为 NULL 值。

    dwOptions:通常使用 创建子键时的选项REG_OPTION_NON_VOLATILE宏,表示创建的子键是在注册表文件中创建的,而不是内存。

    samDesired:为了方便注册表的操作,通常使用 KEY_ALL_ ACCESS 即可。

    lpSecurityAttributes:该参数指向 SECURITY_ATTRIBUTES 结构体用于指定键句柄的安全属性。 通常用于这里NULL。

    phkResult:指向双子变量接收打开的子键句柄。

    lpdwDisposition:一般设置为 NULL 值。

    如果函数执行成功,则返回ERROR_SUCCESS,并且在phkResult保存并返回创建子键的句柄。当需要创建的子键已经存在时,函数发挥作用RegOpenKeyEx()功能相同,打开注册表也可以使用RegCreateKeyEx()函数进行代替。不过该函数的参数比RegOpenKeyEx()函数参数多。因此,为了更容易编写代码,打开注册表或使用它RegOpenKeyEx()函数比较省事。

    使用删除子键RegDeleteKey()函数的定义如下:

  • LONGRegDeleteKey(
  • HKEYhKey,//handletoopenkey
  • LPCTSTRlpSubKey//subkeyname
  • );
  • 该函数的值可以用来删除键值项,即函数只能删除下一层的子键。函数有两个参数,hKey为父键句柄,lpSubKey指向要删除的子键名字字符串。

    3. 查询、写入和删除注册表键值

    使用读取键名中的数据或查询键名的属性RegQueryValueEx()函数的定义如下:

  • LONGRegQueryValueEx(
  • HKEYhKey,//handletokey
  • LPCTSTRlpValueName,//valuename
  • LPDWORDlpReserved,//reserved
  • LPDWORDlpType,//typebuffer
  • LPBYTElpData,//databuffer
  • LPDWORDlpcbData//sizeofdatabuffer
  • );
  • 参数说明如下。

    hKey:用于指定要读取的键值项的子键句柄。

    lpValueName:指定要读取的键值项的名称。

    lpReserved:必须保留参数NULL 值。

    lpType:如果不需要返回键值类型,可以给 NULL 值。

    lpData:用于接收返回的键值数据指向缓冲区。

    lpcbData:该参数用于指定缓冲区的长度;当函数返回时,该变量保存缓冲区实际接收的长度。

    写入键值项的函数是 RegSetValueEx()其定义如下:

  • LONGRegSetValueEx(
  • HKEYhKey,//handletokey
  • LPCTSTRlpValueName,//valuename
  • DWORDReserved,//reserved
  • DWORDdwType,//valuetype
  • CONSTBYTE*lpData,//valuedata
  • DWORDcbData//sizeofvaluedata
  • );
  • 参数说明如下。

    hKey:用于指定要写入的键值项的子键句柄。

    lpValueName:指定键值项名称的字符串。

    Reserved:0 值必须保留参数。

    dwType:指出要写入的键数据类型。

    lpData:指向要写入键值数据的缓冲区。

    cbData:缓冲区长度应写入键值数据。

    删除键值项的函数为RegDeleteValue()其定义如下:

  • LONGRegDeleteValue(
  • HKEYhKey,//handletokey
  • LPCTSTRlpValueName//valuename
  • );
  • 参数说明如下。

    hKey:用于指定删除的句柄。

    lpValueName:删除键值项的名称。

    4. 子键和键值的枚举

    枚举是一个接一个的获取。子键的枚举逐一获取指定键下的子键。键值的枚举是指指定子键下的键值。

    枚举子键的函数是RegEnumKeyEx()其定义如下:

  • LONGRegEnumKeyEx(
  • HKEYhKey,//handletokeytoenumerate
  • DWORDdwIndex,//subkeyindex
  • LPTSTRlpName,//subkeyname
  • LPDWORDlpcName,//sizeofsubkeybuffer
  • LPDWORDlpReserved,//reserved
  • LPTSTRlpClass,//classstringbuffer
  • LPDWORDlpcClass,//sizeofclassstringbuffer
  • PFILETIMElpftLastWriteTime//lastwritetime
  • );
  • 参数说明如下。

    hKey:指定被枚举的键句柄。

    dwIndex:指定需要返回信息的子键索引号。

    lpName:用户接收回子键名称的缓冲区。

    lpcName:该参数在调用该函数前保存 lpName 指向缓冲区的长度;该参数保存缓冲区实际接收到的数据的长度。

    lpReserved:必须保留参数NULL 值。

    lpClass:一般为 NULL 值。

    lpcClass:一般为 NULL 值。

    lpftLastWriteTime:指向一个 FILETIME 结构体用于接收最后一次被写入的时间。

    枚举键值的函数是RegEnumValue()其定义如下:

  • LONGRegEnumValue(
  • HKEYhKey,//handletokeytoquery
  • DWORDdwIndex,//indexofvaluetoquery
  • LPTSTRlpValueName,//valuebuffer
  • LPDWORDlpcValueName,//sizeofvaluebuffer
  • LPDWORDlpReserved,//reserved
  • LPDWORDlpType,//typebuffer
  • LPBYTElpData,//databuffer
  • LPDWORDlpcbData//sizeofdatabuffer
  • );
  • 参数说明如下。

    hKey:指定被枚举的键句柄。

    dwIndex:指定需要返回信息的键值索引号。

    lpValueName:用户接收返回键值名称的缓冲区。

    lpcValueName:该参数在调用该函数前保存 lpValueName 指向缓冲区的长度;该参数保存缓冲区实际接收到的数据的长度。

    lpReserved:必须保留参数NULL 值。

    lpType:指向用于返回键值数据类型的双字变量。

    lpData:用户接收返回键值数据的缓冲区。

    lpcbData:该参数在调用该函数前保存 lpData 指向缓冲区的长度;该参数保存缓冲区实际收到的数据的长度。

    与注册表操作相关的函数就介绍到这里。以上是注册表操作的常用函数,这里无法将注册表操作相关的函数一一介绍,其他相关函数在具体使用时请参考 MSDN 学习。

       
    • 评论列表:
    •  嘻友胭话
       发布于 2022-06-06 11:42:56  回复该评论
    • eyLPCTSTRlpValueName//valuename);参数说明如下。hKey:用于指定删除的句柄。lpValueName:删除键值项的名称。4. 子键和键值的枚举枚举是一个接一个的获取。子键的枚举逐一获取指
    •  泪灼命轴
       发布于 2022-06-06 07:45:15  回复该评论
    • 保存回打开子键的句柄。打开注册表的本质是打开注册表的子键,然后操作。注册表操作完成后,需关闭打开的注册表句柄,以释放资源。关闭注册表句柄的函数定义如下:LONGRegCloseKey(HKEYhKey//handletokeytoclose);函数只有一个参数R
    •  世味涴歌
       发布于 2022-06-06 08:58:36  回复该评论
    • ILETIMElpftLastWriteTime//lastwritetime);参数说明如下。hKey:指定被枚举的键句柄。dwIndex:指定需要返回信息的子键索引号。lpName:用户接收回子键名称的缓冲区。lpcName:该参数在调用该函数前

    发表评论:

    Powered By

    Copyright Your WebSite.Some Rights Reserved.