註冊表常用操作歸納總結

來源:互聯網
上載者:User

寫程式經常用到註冊表操作,特別麻煩.把一些常用的操作總結如下:

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"))

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.