Windows应用程序C++设置注册表信息存储读取
// 开启或关闭【更新或重启后,使用我的登录信息自动完成设备设置】 __inline static BOOL SetCurrentUseARSOOptOut(bool bEnabled) { BOOL bRet = FALSE; HKEY hOpenKey = NULL; WCHAR wzValueData[512] = { 0 }; WCHAR wzUseARSOOptOutPath[512] = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\UserARSO\\"; WCHAR userName[512] = L""; WCHAR sid[512] = L""; WCHAR userSID[512] = L""; int subAuthorities = 0; WCHAR userDomain[512] = L""; SID_NAME_USE snu = SidTypeUser; PSID_IDENTIFIER_AUTHORITY psia = NULL; DWORD nameSize = sizeof(userName) / sizeof(*userName); DWORD sidSize = sizeof(userSID) / sizeof(*userSID); DWORD domainSize = sizeof(userDomain) / sizeof(*userDomain); ::GetUserNameW((LPWSTR)userName, &nameSize); ::LookupAccountNameW(NULL, (LPWSTR)userName, (PSID)userSID, &sidSize, (LPWSTR)userDomain, &domainSize, &snu); psia = ::GetSidIdentifierAuthority(userSID); sidSize = _swprintf(sid, L"S-%lu-", SID_REVISION); sidSize += _swprintf(sid + wcslen(sid), L"%-lu", psia->Value[5]); subAuthorities = (*(int*)::GetSidSubAuthorityCount(userSID)); for (int i = 0; i < subAuthorities; i++) { sidSize += _swprintf(sid + sidSize, L"-%lu", *GetSidSubAuthority(userSID, i)); } lstrcatW(wzUseARSOOptOutPath, sid); printf("%ws\r\n", wzUseARSOOptOutPath); if (RegCreateKeyExW(HKEY_LOCAL_MACHINE, wzUseARSOOptOutPath, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hOpenKey, NULL) == ERROR_SUCCESS) { DWORD dwValue = (bEnabled == true) ? 0L : 1L; ::RegSetValueExW(hOpenKey, L"OptOut", 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(dwValue)); ::RegCloseKey(hOpenKey); bRet = TRUE; } return bRet; } // 获取当前登录用户的SID __inline static std::wstring GetSid() { WCHAR userName[4096] = L""; WCHAR sid[4096] = L""; WCHAR userSID[4096] = L""; int subAuthorities = 0; WCHAR userDomain[4096] = L""; SID_NAME_USE snu = SidTypeUser; PSID_IDENTIFIER_AUTHORITY psia = NULL; DWORD nameSize = sizeof(userName) / sizeof(*userName); DWORD sidSize = sizeof(userSID) / sizeof(*userSID); DWORD domainSize = sizeof(userDomain) / sizeof(*userDomain); ::GetUserNameW((LPWSTR)userName, &nameSize); ::LookupAccountNameW(NULL, (LPWSTR)userName, (PSID)userSID, &sidSize, (LPWSTR)userDomain, &domainSize, &snu); psia = ::GetSidIdentifierAuthority(userSID); sidSize = _swprintf(sid, L"S-%lu-", SID_REVISION); sidSize += _swprintf(sid + wcslen(sid), L"%-lu", psia->Value[5]); subAuthorities = (*(int*)::GetSidSubAuthorityCount(userSID)); for (int i = 0; i < subAuthorities; i++) { sidSize += _swprintf(sid + sidSize, L"-%lu", *GetSidSubAuthority(userSID, i)); } printf("%ws\r\n", sid); return sid; } // 程序开机自动启动 __inline static BOOL SetCurrentUserAutoBootWithRegistry(LPCSTR lpName, LPCSTR lpParamLine = NULL) { BOOL bRet = FALSE; HKEY hOpenKey = NULL; CHAR szValueData[MAX_SYM_NAME] = { 0 }; CHAR szModuleFileName[MAX_PATH] = { 0 }; LPCSTR szAutoBootPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; if (RegOpenKey(HKEY_CURRENT_USER, szAutoBootPath, &hOpenKey) == ERROR_SUCCESS) { GetModuleFileName(NULL, szModuleFileName, sizeof(szModuleFileName) / sizeof(*szModuleFileName)); wsprintfA(szValueData, ("\"%s\"%s"), szModuleFileName, (!lpParamLine) ? "" : lpParamLine); RegSetValueExA(hOpenKey, lpValueName, 0, REG_SZ, (LPBYTE)szValueData, (lstrlenA(szValueData) + 1) * sizeof(CHAR)); RegCloseKey(hOpenKey); bRet = TRUE; } return bRet; } __inline static BOOL SetCurrentUserAutoBootWithRegistry(LPCWSTR lpName, LPCWSTR lpParamLine = NULL) { BOOL bRet = FALSE; HKEY hOpenKey = NULL; WCHAR szValueData[MAX_SYM_NAME] = { 0 }; WCHAR szModuleFileName[MAX_PATH] = { 0 }; LPCWSTR szAutoBootPath = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; if (RegOpenKeyW(HKEY_CURRENT_USER, szAutoBootPath, &hOpenKey) == ERROR_SUCCESS) { GetModuleFileNameW(NULL, szModuleFileName, sizeof(szModuleFileName) / sizeof(*szModuleFileName)); wsprintfW(szValueData, (L"\"%s\"%s"), szModuleFileName, (!lpParamLine) ? L"" : lpParamLine); RegSetValueExW(hOpenKey, lpValueName, 0, REG_SZ, (LPBYTE)szValueData, (lstrlenW(szValueData) + 1) * sizeof(WCHAR)); RegCloseKey(hOpenKey); bRet = TRUE; } return bRet; } __inline static BOOL SetAutoBootWithRegistry(LPCSTR lpValueName, LPCSTR lpParamLine = NULL) { BOOL bRet = FALSE; HKEY hOpenKey = NULL; CHAR szValueData[MAX_SYM_NAME] = { 0 }; CHAR szModuleFileName[MAX_PATH + MAX_PATH] = { 0 }; LPCSTR szAutoBootPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; if (RegOpenKeyA(HKEY_LOCAL_MACHINE, szAutoBootPath, &hOpenKey) == ERROR_SUCCESS) { GetModuleFileNameA(NULL, szModuleFileName, sizeof(szModuleFileName) / sizeof(*szModuleFileName)); wsprintfA(szValueData, ("\"%s\"%s"), szModuleFileName, (!lpParamLine) ? "" : lpParamLine); RegSetValueExA(hOpenKey, lpValueName, 0, REG_SZ, (LPBYTE)szValueData, (lstrlenA(szValueData) + 1) * sizeof(CHAR)); RegCloseKey(hOpenKey); bRet = TRUE; } return bRet; } __inline static BOOL SetAutoBootWithRegistry(LPCWSTR lpValueName, LPCWSTR lpParamLine = NULL) { BOOL bRet = FALSE; HKEY hOpenKey = NULL; CHAR szValueData[MAX_SYM_NAME] = { 0 }; WCHAR szModuleFileName[MAX_PATH] = { 0 }; LPCWSTR szAutoBootPath = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; if (RegOpenKeyW(HKEY_LOCAL_MACHINE, szAutoBootPath, &hOpenKey) == ERROR_SUCCESS) { GetModuleFileNameW(NULL, szModuleFileName, sizeof(szModuleFileName) / sizeof(*szModuleFileName)); wsprintfW(szValueData, (L"%s%s"), szModuleFileName, (!lpParamLine) ? L"" : lpParamLine); RegSetValueExW(hOpenKey, lpValueName, 0, REG_SZ, (LPBYTE)szValueData, (lstrlenW(szValueData) + 1) * sizeof(WCHAR)); RegCloseKey(hOpenKey); bRet = TRUE; } return bRet; } __inline static BOOL SetAutoBootWithTask(LPCSTR lpTaskName, LPCSTR lpParamLine = NULL) { CHAR szModuleFileName[MAX_PATH] = { 0 }; CHAR szAutoRunCmd[MAX_PATH + MAX_PATH + MAX_PATH + MAX_PATH] = { 0 }; GetModuleFileNameA(NULL, szModuleFileName, sizeof(szModuleFileName) / sizeof(*szModuleFileName)); if (lpParamLine != NULL) { wsprintfA(szModuleFileName, ("%s %s"), szModuleFileName, (!lpParamLine) ? "" : lpParamLine); } wsprintfA(szAutoRunCmd, ("schtasks /create /tn \"%s\" /tr %s /sc onstart /rl highest /f"), lpTaskName, szModuleFileName); return ExecuteCommand(szAutoRunCmd); } __inline static BOOL SetAutoBootWithTask(LPCWSTR lpTaskName, LPCWSTR lpParamLine = NULL) { WCHAR szModuleFileName[MAX_PATH] = { 0 }; WCHAR szAutoRunCmd[MAX_PATH + MAX_PATH + MAX_PATH + MAX_PATH] = { 0 }; GetModuleFileNameW(NULL, szModuleFileName, sizeof(szModuleFileName) / sizeof(*szModuleFileName)); if (lpParamLine != NULL) { wsprintfW(szModuleFileName, (L"%s %s"), szModuleFileName, (!lpParamLine) ? L"" : lpParamLine); } wsprintfW(szAutoRunCmd, (L"schtasks /create /tn \"%s\" /tr %s /sc onstart /rl highest /f"), lpTaskName, szModuleFileName); return ExecuteCommand(szAutoRunCmd); } // 配置应用程序参数设置 __inline static BOOL SetAppSettingWithRegistry(LPCSTR lpAppName, LPCSTR lpKey, LPCSTR lpValue) { BOOL bRet = FALSE; HKEY hOpenKey = NULL; CHAR szSubKey[MAX_PATH + MAX_PATH] = { 0 }; wsprintfA(szSubKey, "SOFTWARE\\%s", lpAppName); if (RegOpenKeyA(HKEY_CURRENT_USER, szSubKey, &hOpenKey) == ERROR_SUCCESS || RegCreateKeyA(HKEY_CURRENT_USER, szSubKey, &hOpenKey)) { RegSetValueExA(hOpenKey, lpKey, 0, REG_SZ, (LPBYTE)lpValue, (lstrlenA(lpValue) + 1) * sizeof(CHAR)); RegCloseKey(hOpenKey); bRet = TRUE; } return bRet; } __inline static BOOL SetAppSettingWithRegistry(LPCWSTR lpAppName, LPCWSTR lpKey, LPCWSTR lpValue) { BOOL bRet = FALSE; HKEY hOpenKey = NULL; WCHAR szSubKey[MAX_PATH + MAX_PATH] = { 0 }; wsprintfW(szSubKey, L"SOFTWARE\\%s", lpAppName); if (RegOpenKeyW(HKEY_CURRENT_USER, szSubKey, &hOpenKey) == ERROR_SUCCESS || RegCreateKeyW(HKEY_CURRENT_USER, szSubKey, &hOpenKey)) { RegSetValueExW(hOpenKey, lpKey, 0, REG_SZ, (LPBYTE)lpValue, (lstrlenW(lpValue) + 1) * sizeof(WCHAR)); RegCloseKey(hOpenKey); bRet = TRUE; } return bRet; } __inline static BOOL GetAppSettingWithRegistry(CHAR(&tValue)[MAX_PATH], const LPCSTR lpAppName, LPCSTR lpKey) { BOOL bRet = FALSE; HKEY hOpenKey = NULL; DWORD dwValueSize = MAX_PATH; CHAR szSubKey[MAX_PATH] = { 0 }; wsprintfA(szSubKey, "SOFTWARE\\%s", lpAppName); if (RegOpenKeyA(HKEY_CURRENT_USER, szSubKey, &hOpenKey) == ERROR_SUCCESS || RegCreateKeyA(HKEY_CURRENT_USER, szSubKey, &hOpenKey)) { RegQueryValueExA(hOpenKey, lpKey, NULL, NULL, (LPBYTE)tValue, &dwValueSize); RegCloseKey(hOpenKey); bRet = TRUE; } return bRet; } __inline static BOOL GetAppSettingWithRegistry(WCHAR(&tValue)[MAX_PATH], LPCWSTR lpAppName, LPCWSTR lpKey) { BOOL bRet = FALSE; HKEY hOpenKey = NULL; DWORD dwValueSize = MAX_PATH; WCHAR szSubKey[MAX_PATH] = { 0 }; wsprintfW(szSubKey, L"SOFTWARE\\%s", lpAppName); if (RegOpenKeyW(HKEY_CURRENT_USER, szSubKey, &hOpenKey) == ERROR_SUCCESS || RegCreateKeyW(HKEY_CURRENT_USER, szSubKey, &hOpenKey)) { RegQueryValueExW(hOpenKey, lpKey, NULL, NULL, (LPBYTE)tValue, &dwValueSize); RegCloseKey(hOpenKey); bRet = TRUE; } return bRet; } __inline static BOOL GetRegistryString(WCHAR(&wValue)[MAX_PATH], LPCWSTR lpcwValueName, LPCWSTR lpcwSubKey, HKEY hKey = HKEY_CURRENT_USER) { BOOL bRet = FALSE; HKEY hOpenKey = NULL; DWORD dwValueSize = MAX_PATH; if (::RegOpenKeyW(hKey, lpcwSubKey, &hOpenKey) == ERROR_SUCCESS || ::RegCreateKeyW(hKey, lpcwSubKey, &hOpenKey) == ERROR_SUCCESS) { ::RegQueryValueExW(hOpenKey, lpcwValueName, NULL, NULL, (LPBYTE)wValue, &dwValueSize); ::RegCloseKey(hOpenKey); bRet = TRUE; } return bRet; } __inline static BOOL SetRegistryString(LPCWSTR lpcwValue, LPCWSTR lpcwValueName, LPCWSTR lpcwSubKey, HKEY hKey = HKEY_CURRENT_USER) { BOOL bRet = FALSE; HKEY hOpenKey = NULL; if (::RegOpenKeyW(hKey, lpcwSubKey, &hOpenKey) == ERROR_SUCCESS || ::RegCreateKeyW(hKey, lpcwSubKey, &hOpenKey)) { ::RegSetValueExW(hOpenKey, lpcwValueName, 0, REG_SZ, (LPBYTE)lpcwValue, (lstrlenW(lpcwValue) + 1) * sizeof(WCHAR)); ::RegCloseKey(hOpenKey); bRet = TRUE; } return bRet; }
收藏的用户(0)
X
正在加载信息~
2
最新回复 (0)