您的位置:首页 > 其它

注册表常用操作归纳总结

2013-03-24 22:02 357 查看
写程序经常用到注册表操作,特别麻烦.把一些常用的操作总结如下:

RING3:

1.枚举键下的keyvalue值:

BOOL RegKeyValueEnum(WCHAR *szKey)

{

HKEY hkey;

WCHAR RegBufferLocal[100];

DWORD dwSize=100;

DWORD dwVSize = 0;

DWORD dIndex=0;

DWORD type=REG_SZ;

if (szKey == NULL)

{

printf("szKey == NULL\n");

return FALSE;

}

if (RegOpenKeyExW(HKEY_LOCAL_MACHINE,szKey,0,KEY_ALL_ACCESS,&hkey) != ERROR_SUCCESS)

{

printf("Open Failed\n");

return FALSE;

}

while(RegEnumValueW(hkey,dIndex,RegBufferLocal,&dwSize,NULL,NULL,NULL,NULL)==ERROR_SUCCESS)

{

dIndex++;

dwSize = 100;

printf("%ws\n", RegBufferLocal);

WCHAR szKeyValue[MAX_PATH] = {0};

dwVSize = MAX_PATH*sizeof(WCHAR);

if (RegQueryValueExW(hkey, RegBufferLocal, NULL, &type, (LPBYTE)szKeyValue, &dwVSize) != ERROR_SUCCESS)

{

continue;

}

printf("%ws\n", szKeyValue);

}

RegCloseKey( hkey);

return TRUE;

}

2.查询某键下的默认值:

BOOL GetKeyDefaultValue(WCHAR *extName, WCHAR *buf)

{

HKEY hKEY = NULL;

DWORD dwSize = 0;

DWORD type=REG_SZ;

if (extName == NULL)

{

return FALSE;

}

if (RegOpenKeyExW(HKEY_CLASSES_ROOT,extName, 0, KEY_READ, &hKEY) != ERROR_SUCCESS)

{

return FALSE;

}

if (RegQueryValueExW(hKEY, L"", NULL, &type, NULL, &dwSize) != ERROR_SUCCESS)

{

return FALSE;

}

if (RegQueryValueExW(hKEY, L"", NULL, &type, (LPBYTE)buf, &dwSize) != ERROR_SUCCESS)

{

return FALSE;

}

RegCloseKey(hKEY);

return TRUE;

}

3。枚举子键:

void RegEnumKey()

{

HKEY hKey;

WCHAR *lpSubKey= L"HARDWARE\\";

long ret = RegOpenKeyExW(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_READ, &hKey);



if (ERROR_SUCCESS != ret)

return;



WCHAR achKey[MAX_PATH];

DWORD cbMaxSubKey = MAX_PATH;

DWORD i = 0;



while (RegEnumKeyExW(hKey, i, achKey, &cbMaxSubKey, NULL, NULL, NULL, NULL) ==

ERROR_SUCCESS)



{

printf("%ws\n", achKey); //显示子项名称

cbMaxSubKey = MAX_PATH;



ZeroMemory(achKey,MAX_PATH);

i++;



}

RegCloseKey(hKey);

}

BOOL GetKeyValue(HKEY key, DWORD option, WCHAR *szKey, WCHAR *szSubKey, WCHAR *buf)

{

HKEY hKEY = NULL;

DWORD dwSize = 0;

DWORD type=REG_SZ;

if (szKey == NULL || szSubKey == NULL)

{

return FALSE;

}

if (RegOpenKeyExW(key,szKey, 0, option, &hKEY) != ERROR_SUCCESS)

{

return FALSE;

}

if (RegQueryValueExW(hKEY, szSubKey, NULL, &type, NULL, &dwSize) != ERROR_SUCCESS)

{

RegCloseKey(hKEY);

return FALSE;

}

if (dwSize > (MAX_PATH -1)*sizeof(WCHAR))

{

RegCloseKey(hKEY);

return FALSE;

}

if (RegQueryValueExW(hKEY, szSubKey, NULL, &type, (LPBYTE)buf, &dwSize) != ERROR_SUCCESS)

{

RegCloseKey(hKEY);

return FALSE;

}

RegCloseKey(hKEY);

return TRUE;

}

4.创建一个value-key

#include <tchar.h>

//HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

BOOL CreateValKey(HKEY key, TCHAR *szKey, TCHAR *valkey, TCHAR *value)

{

HKEY hKEY = NULL;

if (szKey == NULL ||

valkey == NULL ||

value == NULL)

{

return FALSE;

}

if (RegOpenKeyEx(key,szKey, 0, KEY_WRITE, &hKEY) != ERROR_SUCCESS)

{

return FALSE;

}

if (RegSetValueEx(hKEY, valkey, 0, REG_SZ, (unsigned char *)value, _tcslen(value)) != ERROR_SUCCESS)

{

RegCloseKey(hKEY);

return FALSE;

}

RegCloseKey(hKEY);

return TRUE;



}

CreateValKey(HKEY_LOCAL_MACHINE, _TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"),_TEXT("TEST"), _TEXT("c:\\1.exe"))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: