1.c语言,运行时有0x0040134b引用的0x00130003内存,该内存不能为written是什么原因

2.用C语言删除注册表项

3.c语言读取注册表健值怎么读取

4.C语言怎么判断注册表键值是否存在

c语言注册函数_c语言修改注册表键值

无论用哪种语言来读取注册表,都有很多句子;

读取注册表项的各个键值,然后写到文件中 void ExportRegistry( CString cstrKeyRootName, //注册表根值,如HKEY_CURRENT_USER CString cstrKeyName, //注册表子键 CString cstrFileName) //导出的文件名(包括路径) { FILE *fp; HKEY hKeyRootName; CString cstrFullPathStr(_T("")); if(cstrKeyRootName == _T("HKEY_CLASSES_ROOT")) hKeyRootName = HKEY_CLASSES_ROOT; else if(cstrKeyRootName == _T("HKEY_CURRENT_USER")) hKeyRootName = HKEY_CURRENT_USER; else if(cstrKeyRootName == _T("HKEY_LOCAL_MACHINE")) hKeyRootName = HKEY_LOCAL_MACHINE; else if(cstrKeyRootName == _T("HKEY_USERS")) hKeyRootName = HKEY_USERS; else if(cstrKeyRootName == _T("HKEY_PERFORMANCE_DATA")) hKeyRootName = HKEY_PERFORMANCE_DATA; else if(cstrKeyRootName == _T("HKEY_CURRENT_CONFIG")) hKeyRootName = HKEY_CURRENT_CONFIG; else if(cstrKeyRootName == _T("HKEY_DYN_DATA")) hKeyRootName = HKEY_DYN_DATA; fp = fopen(cstrFileName, "w+"); if(fp == NULL) { MessageBox(NULL, _T("Error while creating the file"), _T("Registry eXPort"), MB_OK); return; } if(cstrKeyName.IsEmpty()) cstrFullPathStr = cstrKeyRootName; else cstrFullPathStr = cstrKeyRootName + _T("\\") + cstrKeyName; //// First print the header ..... this may be different for some version of Windows... do manually change if required //Here need to add version check Dword dwVersion = GetVersion(); // Get build numbers for Windows NT or Win32s if (dwVersion < 0x80000000) // Windows NT { fprintf(fp, "%s\n", _T("Windows Registry Editor Version 5.00")); } else // Win32s { fprintf(fp, "%s\n", _T("REGEDIT4")); } EnumerateValues(hKeyRootName, cstrKeyName, fp, cstrFullPathStr); EnumerateKey(hKeyRootName, cstrKeyName , fp , cstrFullPathStr); fclose(fp); }这种方法比较原始,也比较复杂,是直接读取、枚举注册表的键值,然后一项一项的写到文件中。这种方法是我在参考Thanigai Murugan K.(具体的出处记不起来了)写的。他原来导出的函数中存在比较多的问题,一是不能导出所有的键值,二是导出的有些键值不符合规范,无法进行导入。我除了EnumerateValues函数没有修改外,其他的函数全都重新写了一遍。这个函数使用起来也非常方便,例如:CRegisterExport re; re.EXPortRegistry("HKEY_CURRENT_USER","Software\\VCKBASE","C:\\Test.reg");

c语言,运行时有0x0040134b引用的0x00130003内存,该内存不能为written是什么原因

调用注册表操作API,可以在

HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows\load

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\Setup

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

以上是自动运行程序注册的位置,都有自动运行程序的功能,也有不同之处,具体看msdn吧,下面是操作注册表的API:

1、RegCloseKey()

原型:RegCloseKey(HKEY hKey)

解释:关闭指定的主册表键,释放句柄。当对一个或多个键或值操作完成以后,需要关闭其键来进行保存操作结果,关闭一个键后,句柄变为非法,此时应释放句柄。

2、RegCreateKeyEx()

原型:LONG RegCreateKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved,

LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes,

PHKEY phkResult, LPDWORD lpdwDisposition );

解释:打开指定的键或子键。如果要打开的键不存在的话,本函数会试图建立它。提供该函数是为了向后兼容。所有的WIN32应用程序应使用函数RegCreateKeyEx()。各参数及返回值的含义如下:

各参数及返回值的含义如下:

·hKey为主键值,可以取下面的一些数值:HKEY_CLASSES_ROOT、HKEY_CURRENT_CONFIG、 HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USER、HKEY_PERFORMANCE_DATA(WINNT操作系统)、HKEY_DYN_DATA(WIN9X操作系统);

·参数lpSubKey为一个指向以零结尾的字符串的指针,其中包含将要创建或打开的子键的名称。子键不可以用反斜线(\)开始。该参数可以为NULL;

·参数Reserved为保留值,必须设置为0;

·参数lpClass为一个指向包含键类型的字符串。如果该键已经存在,则忽略该参数;

·参数dwOptions为新创建的键设置一定的属性。可以取下面的一些数值: REG_OPTION_NON_VOLATILE ,表示新创建的键为一个非短暂性的键(数据信息保存在文件中,当系统重新启动时,数据信息恢复);REG_OPTION_VOLATILE,表示新创建的键为一个短暂性的键(数据信息保存在内存中),Windows95忽略该数值;REG_OPTION_BACKUP_RESTORE 仅在WINNT中支持,可以提供优先级支持;

·参数samDesired用来设置对键访问的权限,可以取下面的一些数值:KEY_CREATE_LINK,表示准许生成符号键;KEY_CREATE_SUB_KEY 表示准许生成子键;KEY_ENUMERATE_SUB_KEYS 表示准许生成枚举子键;KEY_EXECUTE 表示准许进行读操作;KEY_NOTIFY表示准许更换通告; KEY_QUERY_VALUE 表示准许查询子键;KEY_ALL_ACCESS 提供完全访问,是上面数值的组合;

KEY_READ 是下面数值的组合:KEY_QUERY_VALUE、KEY_ENUMERATE_SUB_KEYS、KEY_NOTIFY; KEY_SET_VALUE 表示准许设置子键的数值;KEY_WRITE 是下面数值的组合:KEY_SET_VALUE、KEY_CREATE_SUB_KEY;

·参数lpSecurityAttributes为一个指向SECURITY_ATTRIBUTES结构的指针,确定返回的句柄是否被子处理过程继承。如果该参数为NULL,则句柄不可以被继承。在WINNT中,该参数可以为新创建的键增加安全的描述;

·参数phkResult为一个指向新创建或打开的键的句柄的指针;

·参数lpdwDispition指明键是被创建还是被打开的,可以是下面的一些数值: REG_CREATE_NEW_KEY 表示键先前不存在,现在被创建;REG_OPENED_EXISTING_KEY 表示键先前已存在,现在被打开。

如果该函数调用成功,则返回ERROR_SUCCESS。否则,返回值为文件WINERROR.h中定义的一个非零的错误代码,可以通过设置FORMAT_MESSE_FROM_SYSTEM标识调用FormatMessage()函数来获取一个对错误的总体描述。

3、RegOpenKeyEx()

原型:LONG RegOpenKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions,

REGSAM samDesired, PHKEY phkResult );

解释:打开一个指定的键,并返回打开键的句柄。

各参数及返回值的含义如下:

·参数hKey的含义同RegCreateKeyEx函数中的hKey参数;

·参数lpSubKey为一个指向以零结尾的字符串的指针,其中包含子键的名称,可以利用反斜线(\)分隔不同的子键名。如果字符串为空,则根据hKey参数创建一个新的句柄。在这种情况下,并不关闭先前打开的句柄;

·参数ulOption保留,通常必须设置为0;

·参数samDesired的含义同RegCreateKeyEx函数中的samDesired参数;

·参数phkResult为一个指针,用来指向打开的键的句柄。可以通过RegCloseKey函数关闭这个句柄;

·函数的返回值同RegCreateKeyEx函数的返回值。

4、 查询某一个键值:RegQueryValueEx()

原型:LONG RegQueryValueEx(HKEY hKey, LPCTSTR lpValueName, LPDWORD pReserved, LPDWORD lpType,

LPBYTE lpData, LPDWORD lpcbData );

解释:根据要查询的键的句柄,要返回的查询的数据。

各个参数及返回值的含义如下:

·参数hKey为当前的一个打开的键的句柄,具体数值同RegCreateKeyEx函数的hKey参数;

·参数lpVauleName为一个指向非空的包含查询值的名称的字符串指针;

·参数lpReserved保留,必须为NULL;

·参数lpType为一个指向数据类型的指针,数据类型为下列类型之一:REG_BINARY 二进制数据、REG_DWORD 32位整数、REG_DWORD_LITTLE_ENDIAN little-endian格式的数据,例如0X12345678以(0X78 0X56 0X34 0X12)方式保存、REG_DWORD_BIG_ENDIAN big-endian格式的数据,例如0X12345678以(0X12 0X34 0X56 0X78)方式保存、REG_EXPAND_SZ 一个包含未扩展环境变量的字符串、REG_LINK 一个Unicode类型的链接、REG_MULIT_SZ 以两个零结尾的字符串、REG_NONE 无类型数值、REG_RESOURCE_LIST 设备驱动列表、REG_SZ 一个以零结尾的字符串根据函数使用的字符集类型的不同而设置为Unicode或ANSI类型的字符串;

·参数lpData为一个指向保存返回值的变量的指针。如果不需要返回值,该参数可以为NULL;

·参数lpcbData为一个指向保存返回值长度的变量的指针。其中长度以字节为单位。如果数据类型为REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ,那么长度也包括结尾的零字符,只有在参数lpData为NULL时,参数lpcbData才可以为NULL;返回值同RegCreateKeyEx函数的返回值;

5、RegSetValueEx()

原型:LONG RegSetValueEx(HKEY hKey, LPCTSTR lpValueName, LPDWORD lpReserved, DWORD dwType,

const BYTE *lpData, DWORD cbData);

解释:设置注册表中的一个键值。

各个参数及返回值的含义如下:

·参数hKey的含义同RegCreateKeyEx函数中的hKey参数;

·参数lpValueName为一个指向包含值名的字符串指针;Reserved保留,通常必须设置为0;

·参数dwType确定了设置的值的类型同RegQueryValueKeyEx的lyType参数;

·参数lpData为一个指向包含数据的缓冲区的指针;

·参数cbData以字节为单位,指定数据的长度;

返回值同RegCreateKeyEx函数的返回值。

6、RegDeketeKey()

原型:LONG RegDeleteKey(HKEY hKey,LPCTSTR lpSubKEY);

解释:函数RegDeketeKey删除一个键及所有的子键。

各个参数及返回值的含义如下:

·参数hKey的含义同RegCreateKeyEx函数中的hKey参数;

·参数lpSubKey的含义同RegCreateKeyEx函数中的lpSubKey参数。

用C语言删除注册表项

出现0x 指令引用的0x内存。该内存不能为"read"或"written"。

只要对症下药问题才能解决。答案原创★严禁复制★

1盗版系统或GHOST版本系统可能会出现该问题,如果系统本身有问题,及时安装官方发行的补丁,{检查电脑年、月、日是否正确}。建议:使用正版或官方网站其它版本的系统

2对电脑没有影响或偶尔出现,不用管它,重启电脑后可能会自动消失。

3引起的:升级杀毒软件或下载专杀工具,对电脑全盘杀毒。

4硬件上的原因:是内存引起的,把内存条拆下重新安装。必要时更换内存条

5软件引起的:安装的软件与系统或其它软件发生冲突,(一般的解决办法就是卸载该软件重新安装或卸载有冲突的软件,问题才能解决。) 如果驱动不稳定,重新安装驱动或及时更新驱动。

6注意:如果您使用windows IE,最近一段时间很多网友反映IE变得不太稳定。用360安全卫士修复IE,如果没有效果{升级IE或降低IE版本试试}。如果还是不行,最简单的解决办法就是:下载更换其它浏览器。不用删除windows IE,直接使用其它浏览器即可。比如:360安全浏览器、世界之窗浏览器、傲游等。

对应以上的如果都没问题,可以试试下面的方法:

◆试用命令排除

开始-运行- 输入cmd-- 回车,在命令提示符下输入下面命令

for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1回车。

完成后,在输入下面的

for %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %i 回车。

如果怕输入错误,可以复制这两条指令,然后在命令提示符后击鼠标右键,打“粘贴”,回车,耐心等待,直到屏幕滚动停止为止。重启电脑

◆◆运行regedit进入注册表, 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks 下,应该只有一个正常的键值{AEB6717E-7E19-11d0-EE-00C04FD912}, 将其他的删除。如果还有一个(默认)不用管它,一般它为空。

c语言读取注册表健值怎么读取

请注意以下程序中的主函数中的调用语句:

bSuccess = RegDelnode(HKEY_CURRENT_USER, "Software\\TestDir"); /*删除HCU下的Software\TestDir*/

按照这样的格式,要想删除哪个项目,只需要将其做为参数传入RegDelnode()函数就可以了!比如:

RegDelnode(HKEY_CURRENT_USER, "Software");

RegDelnode(HKEY_CURRENT_CONFIG, "Software");

***********************************************

#include <windows.h>

#include <stdio.h>

BOOL RegDelnodeRecurse (HKEY hKeyRoot, LPTSTR lpSubKey)

{

LPTSTR lpEnd;

LONG lResult;

DWORD dwSize;

TCHAR szName[MAX_PATH];

HKEY hKey;

FILETIME ftWrite;

// First, see if we can delete the key without hing

// to recurse.

lResult = RegDeleteKey(hKeyRoot, lpSubKey);

if (lResult == ERROR_SUCCESS)

return TRUE;

lResult = RegOpenKeyEx (hKeyRoot, lpSubKey, 0, KEY_READ, &hKey);

if (lResult != ERROR_SUCCESS)

{

if (lResult == ERROR_FILE_NOT_FOUND) {

printf("Key not found.\n");

return TRUE;

}

else {

printf("Error opening key.\n");

return FALSE;

}

}

// Check for an ending slash and add one if it is missing.

lpEnd = lpSubKey + lstrlen(lpSubKey);

if (*(lpEnd - 1) != TEXT('\\'))

{

*lpEnd = TEXT('\\');

lpEnd++;

*lpEnd = TEXT('\0');

}

// Enumerate the keys

dwSize = MAX_PATH;

lResult = RegEnumKeyEx(hKey, 0, szName, &dwSize, NULL,

NULL, NULL, &ftWrite);

if (lResult == ERROR_SUCCESS)

{

do {

lstrcpy (lpEnd, szName);

if (!RegDelnodeRecurse(hKeyRoot, lpSubKey)) {

break;

}

dwSize = MAX_PATH;

lResult = RegEnumKeyEx(hKey, 0, szName, &dwSize, NULL,

NULL, NULL, &ftWrite);

} while (lResult == ERROR_SUCCESS);

}

lpEnd--;

*lpEnd = TEXT('\0');

RegCloseKey (hKey);

// Try again to delete the key.

lResult = RegDeleteKey(hKeyRoot, lpSubKey);

if (lResult == ERROR_SUCCESS)

return TRUE;

return FALSE;

}

BOOL RegDelnode (HKEY hKeyRoot, LPTSTR lpSubKey)

{

TCHAR szDelKey[2 * MAX_PATH];

lstrcpy (szDelKey, lpSubKey);

return RegDelnodeRecurse(hKeyRoot, szDelKey);

}

void main()

{

BOOL bSuccess;

bSuccess = RegDelnode(HKEY_CURRENT_USER, "Software\\TestDir"); /*删除HCU下的Software\TestDir*/

if(bSuccess)

printf("Success!\n");

else printf("Failure.\n");

}

C语言怎么判断注册表键值是否存在

c++读取windows注册表信息的方法为:

以下是示例代码:

GetStringRegKey(hKey, L"BinDir", strValueOfBinDir, L"bad");

GetStringRegKey(hKey, L"", strKeyDefaultValue, L"bad");

LONG GetDWORDRegKey(HKEY hKey, const std::wstring &strValueName, DWORD &nValue, DWORD nDefaultValue)

{

nValue = nDefaultValue;

DWORD dwBufferSize(sizeof(DWORD));

DWORD nResult(0);

LONG nError = ::RegQueryValueExW(hKey,

strValueName.c_str(),

0,

NULL,

reinterpret_cast<LPBYTE>(&nResult),

&dwBufferSize);

if (ERROR_SUCCESS == nError)

{

nValue = nResult;

}

return nError;

}

LONG GetBoolRegKey(HKEY hKey, const std::wstring &strValueName, bool &bValue, bool bDefaultValue)

{

DWORD nDefValue((bDefaultValue) ? 1 : 0);

DWORD nResult(nDefValue);

LONG nError = GetDWORDRegKey(hKey, strValueName.c_str(), nResult, nDefValue);

if (ERROR_SUCCESS == nError)

{

bValue = (nResult != 0) ? true : false;

}

return nError;

}

LONG GetStringRegKey(HKEY hKey, const std::wstring &strValueName, std::wstring &strValue, const std::wstring &strDefaultValue)

{

strValue = strDefaultValue;

WCHAR szBuffer[512];

DWORD dwBufferSize = sizeof(szBuffer);

ULONG nError;

nError = RegQueryValueExW(hKey, strValueName.c_str(), 0, NULL, (LPBYTE)szBuffer, &dwBufferSize);

if (ERROR_SUCCESS == nError)

{

strValue = szBuffer;

}

return nError;

}

//---------------------------------------------------------------------------

#include <stdio.h>

#include <windows.h>

int main(void)

{

char str[]="SOFTWARE\\call";

HKEY ck;

if (ERROR_SUCCESS==RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)str,0,KEY_ALL_ACCESS,&ck)) {

printf("YES\n");

RegCloseKey(&ck);

}

else printf("NO\n");

return 0;

}

//---------------------------------------------------------------------------