242 lines
7.6 KiB
C++
242 lines
7.6 KiB
C++
/*-----------------------------------------------**
|
|
** Copyright (c) 1999 Microsoft Corporation **
|
|
** All Rights reserved **
|
|
** **
|
|
** reg.cpp **
|
|
** **
|
|
** Functions for reading, writing, and deleting **
|
|
** registry keys **
|
|
** 07-01-99 a-clindh Created **
|
|
**-----------------------------------------------*/
|
|
|
|
/*
|
|
void SetRegKey (HKEY root, TCHAR *szKeyPath,
|
|
TCHAR *szKeyName, BYTE nKeyValue);
|
|
void DeleteRegKey (HKEY root, TCHAR *szKeyPath, TCHAR *szKeyName);
|
|
BOOL CheckForRegKey (HKEY root, TCHAR *szKeyPath, TCHAR *szKeyName);
|
|
int GetRegKeyValue (HKEY root, TCHAR *szKeyPath, TCHAR *szKeyName);
|
|
TCHAR * GetRegString (HKEY root, TCHAR *szKeyPath, TCHAR *szKeyName);
|
|
BOOL SetRegKeyString (HKEY root, TCHAR *szRegString,
|
|
TCHAR *szKeyPath, TCHAR *szKeyName);
|
|
|
|
registry keys used:
|
|
|
|
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\
|
|
Notify\tsver\Asynchronous REG_DWORD = 0
|
|
|
|
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\
|
|
Notify\tsver\DllName REG_SZ = tsver.dll
|
|
|
|
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\
|
|
Notify\tsver\Impersonate REG_DWORD = 0
|
|
|
|
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\
|
|
Notify\tsver\Startup REG_SZ = TsVerEventStartup
|
|
|
|
|
|
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows NT\CurrentVersion\TsVer\
|
|
Constraints
|
|
|
|
*/
|
|
|
|
#include "TsVsm.h"
|
|
|
|
TCHAR *KeyName[] = {"Constraints", "StartTsVer", "MsgEnabled", "Title", "Message"};
|
|
TCHAR sRegistryKeyReturnValue[MAX_LEN];
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Saves a numeric value in the registry
|
|
//
|
|
// SetRegKey(i, KeyValue);
|
|
// i is the index of the KeyName variable
|
|
// nKeyValue is the value we want to store.
|
|
//
|
|
// TCHAR *KeyName[] = {"Constraints"};
|
|
// const TCHAR szWinStaKey[] =
|
|
// {"Software\\Microsoft\\Windows NT\\CurrentVersion\\TsVer"};
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
void SetRegKey(HKEY root, TCHAR *szKeyPath, TCHAR *szKeyName, BYTE nKeyValue)
|
|
{
|
|
HKEY hKey;
|
|
DWORD dwDisposition;
|
|
|
|
if (RegCreateKeyEx(root, szKeyPath,
|
|
0, "REG_DWORD", REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS, 0, &hKey, &dwDisposition)
|
|
== ERROR_SUCCESS) {
|
|
//
|
|
// write the key value to the registry
|
|
//
|
|
RegSetValueEx(hKey, szKeyName, 0, REG_DWORD,
|
|
&nKeyValue,
|
|
sizeof(DWORD));
|
|
RegCloseKey(hKey);
|
|
}
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// Deletes the specified registry key.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
void DeleteRegKey(HKEY root, TCHAR *szKeyPath, TCHAR *szKeyName)
|
|
{
|
|
HKEY hKey;
|
|
|
|
if (RegOpenKeyEx(root, szKeyPath, 0,
|
|
KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
|
|
{
|
|
RegDeleteValue(hKey, szKeyName);
|
|
RegCloseKey(hKey);
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// returns TRUE if the registry key is there and FALSE if it isn't
|
|
//
|
|
// TCHAR *KeyName[] = {"Constraints"};
|
|
// TCHAR szWinStaKey[] =
|
|
// {"Software\\Microsoft\\Windows NT\\CurrentVersion\\TsVer"};
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CheckForRegKey(HKEY root, TCHAR *szKeyPath, TCHAR *szKeyName)
|
|
{
|
|
HKEY hKey;
|
|
DWORD dwType;
|
|
DWORD dwSize;
|
|
|
|
dwType = REG_SZ;
|
|
dwSize = sizeof(DWORD);
|
|
|
|
if (RegOpenKeyEx(root, szKeyPath, 0,
|
|
KEY_READ, &hKey) == ERROR_SUCCESS) {
|
|
|
|
if (RegQueryValueEx(hKey, szKeyName, 0,
|
|
&dwType, NULL,
|
|
&dwSize) == ERROR_SUCCESS) {
|
|
|
|
RegCloseKey(hKey);
|
|
return TRUE;
|
|
}
|
|
RegCloseKey(hKey);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// pass the index of the KeyName variable and the function
|
|
// returns the value stored in the registry
|
|
// TCHAR *KeyName[] = {"Constraints"};
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
int GetRegKeyValue(HKEY root, TCHAR *szKeyPath, TCHAR *szKeyName)
|
|
{
|
|
int nKeyValue;
|
|
HKEY hKey;
|
|
DWORD dwType;
|
|
DWORD dwSize;
|
|
|
|
dwType = REG_SZ;
|
|
dwSize = sizeof(DWORD);
|
|
|
|
if (RegOpenKeyEx(root, szKeyPath, 0,
|
|
KEY_READ, &hKey) == ERROR_SUCCESS) {
|
|
|
|
if (RegQueryValueEx(hKey, szKeyName, 0,
|
|
&dwType, (LPBYTE) &nKeyValue,
|
|
&dwSize) == ERROR_SUCCESS) {
|
|
|
|
RegCloseKey(hKey);
|
|
return nKeyValue;
|
|
}
|
|
RegCloseKey(hKey);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// returns a string if it succeeds or NULL if it fails
|
|
//
|
|
// TCHAR *KeyName[] = {"Constraints"};
|
|
// #define CONSTRAINTS 0
|
|
// #define MAX_LEN 1024
|
|
// TCHAR sRegistryKeyReturnValue[MAX_LEN];
|
|
// GetRegString(CONSTRAINTS);
|
|
// const TCHAR szWinStaKey[] =
|
|
// {"Software\\Microsoft\\Windows NT\\CurrentVersion\\TsVer"};
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
TCHAR * GetRegString(HKEY root, TCHAR *szKeyPath, TCHAR *szKeyName)
|
|
{
|
|
// sRegistryKeyReturnValue needs to ba a global variable otherwise
|
|
// it will go out of scope when the function returns
|
|
|
|
HKEY hKey = 0;
|
|
DWORD dwType = REG_SZ;
|
|
DWORD dwSize = sizeof(sRegistryKeyReturnValue);
|
|
|
|
if (RegOpenKeyEx(root, szKeyPath, 0,
|
|
KEY_READ, &hKey) == ERROR_SUCCESS)
|
|
{
|
|
if (RegQueryValueEx(hKey, szKeyName, 0, &dwType,
|
|
(LPBYTE) &sRegistryKeyReturnValue,
|
|
&dwSize) == ERROR_SUCCESS)
|
|
{
|
|
RegCloseKey(hKey);
|
|
return sRegistryKeyReturnValue;
|
|
}
|
|
}
|
|
return '\0';
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// returns TRUE if success, returns FAIL otherwise
|
|
//
|
|
// TCHAR szNewRegistryString[] = "the rain in spain falls, mainly";
|
|
// TCHAR *KeyName[] = {"Constraints", "StartTsVer"};
|
|
// #define CONSTRAINTS 0
|
|
// #define MAX_LEN 1024
|
|
// SetRegKeyString(szNewRegistryString,
|
|
// szWinStaKey, KeyName[CONSTRAINTS]);
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL SetRegKeyString(HKEY root, TCHAR *szRegString,
|
|
TCHAR *szKeyPath, TCHAR *szKeyName)
|
|
{
|
|
HKEY hKey;
|
|
DWORD dwDisposition;
|
|
TCHAR lpszKeyType[] = "REG_SZ";
|
|
|
|
|
|
if (RegCreateKeyEx(root, szKeyPath,
|
|
0, lpszKeyType, REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS, 0, &hKey, &dwDisposition)
|
|
== ERROR_SUCCESS) {
|
|
|
|
//
|
|
// write the key value to the registry
|
|
//
|
|
RegSetValueEx(hKey, szKeyName, 0, REG_SZ,
|
|
(BYTE*)szRegString,
|
|
_tcslen(szRegString));
|
|
|
|
RegCloseKey(hKey);
|
|
return TRUE;
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
int CDECL MB(TCHAR *szCaption, TCHAR *szFormat, ...)
|
|
{
|
|
TCHAR szBuffer[1024];
|
|
va_list pArgList;
|
|
|
|
va_start(pArgList, szFormat);
|
|
_vsntprintf(szBuffer, sizeof(szBuffer) / sizeof(TCHAR),
|
|
szFormat, pArgList);
|
|
|
|
va_end(pArgList);
|
|
return MessageBox(NULL, szBuffer, szCaption, MB_OK | MB_ICONSTOP);
|
|
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|