_Out_PHKEY phkResult

时间:2021-07-06 04:30:39

 操纵系统:Windows 10 x64

 编译器:VS2015

2、关键函数 LONG WINAPI RegCreateKeyEx( _In_ HKEY hKey, _In_ LPCTSTR lpSubKey, _Reserved_ DWORD Reserved, _In_opt_ LPTSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition );

字段说明

In HKEY hKey, 打开注册表项的句柄。

In LPCTSTR lpSubKey, 一子项,此成果打开或创建名称。

Reserved DWORD Reserved, 此参数已保存,必需为零。

In_opt LPTSTR lpClass, 此密钥的用户界说类类型。此参数可能被忽略。此参数可以为null。

In DWORD dwOptions,

 入参,该参数可以是以下值

REG_OPTION_BACKUP_RESTORE,0x00000004L

REG_OPTION_NON_VOLATILE,0x00000000L ,一般使用该值

REG_OPTION_VOLATILE,0x00000001L

In REGSAM samDesired, 界说访谒权限

In_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes, 指定要创建的密钥的访谒权限的掩码。可选

Out PHKEY phkResult, 指向接收到已打开或创建的密钥句柄的变量的指针。

Out_opt LPDWORD lpdwDisposition

 出参,可以是以下值。如果为空,则不返回。

REG_CREATED_NEW_KEY,0x00000001L 该键是新创建的键

REG_OPENED_EXISTING_KEY,0x00000002L 该键是已经存在的键

3、遇到问题 遇到问题1:

 按照写入的返回值确认告成,可是注册表无变革,因为在64位Windows上,部分注册表项分袂存储在32位应用措施和64位应用措施中,并使用注册表重定向器和注册表反射映射到单独的逻辑注册表视图,因为64位版本的应用措施可能会使用差别于32位版本的注册表项和值。

遇到问题2:

 写入数据为乱码,因为cbData不能太大,否则很可能把lpData指向的内容之外的其他字符也写入注册表中。

4、代码 // 20180218_注册表编程根本.cpp : 界说控制台应用措施的入口点。 // #include "stdafx.h" #include <stdio.h> #include <Windows.h> //用于改削字符串类型键值 void CreateStringReg(HKEY hRoot, wchar_t *szSubKey, wchar_t * ValueName, TCHAR *Data) { HKEY hKey; // 打开注册表键,,不存在则创建它 size_t lRet = RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); if (lRet != ERROR_SUCCESS) { printf("error no RegCreateKeyEx %ls\n", szSubKey); return; } // 改削注册表键值,没有则创建它 size_t iLen = wcslen(Data); // 设置键值 lRet = RegSetValueEx(hKey, ValueName, 0, REG_SZ, (CONST BYTE*)Data, sizeof(TCHAR)*iLen); if (lRet != ERROR_SUCCESS) { printf("error no RegSetValueEx %ls\n", ValueName); return; } RegCloseKey(hKey); } int main() { // 要改削成的网址 TCHAR StartPage[254]; // 垃圾数据置0 memset(StartPage, 0, sizeof(StartPage)); // 赋值字符串到数组中 wcsncpy_s(StartPage, TEXT("http://www.baidu.com"), 254); //挪用改削字符串类型键值的函数 CreateStringReg(HKEY_CURRENT_USER, L"Software\\Microsoft\\Internet Explorer\\Main", L"Start Page", StartPage); return 0; } 5、效果

_Out_PHKEY phkResult

6、参考:

How to use RegCreateKeyEx?

https://*.com/questions/29115493/how-to-use-regcreatekeyex

32-bit and 64-bit Application Data in the Registry

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724072(v=vs.85).aspx

使用RegSetValueEx改削注册表时遇到的问题(转)