276 lines
8.8 KiB
C++
276 lines
8.8 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 **
|
|
** 08-04-99 a-skuzin 'GetRegMultiString' **
|
|
** function added **
|
|
** 08-11-99 a-skuzin 'SetRegKey', **
|
|
** 'SetRegKeyString', **
|
|
** 'DeleteRegKey'now return **
|
|
** an error value if any, **
|
|
** and ERROR_SUCCESS if success.**
|
|
**-----------------------------------------------*/
|
|
|
|
/*
|
|
LONG SetRegKey (HKEY root, TCHAR *szKeyPath,
|
|
TCHAR *szKeyName, BYTE nKeyValue);
|
|
LONG 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);
|
|
LONG 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 "tsverui.h"
|
|
|
|
TCHAR *KeyName[] = {TEXT("Asynchronous"), TEXT("DllName"), TEXT("Impersonate"), TEXT("Startup"),
|
|
TEXT("Constraints"), TEXT("MsgEnabled"), TEXT("Title"), TEXT("Message"),
|
|
TEXT("ClientVersions"), TEXT("DoNotShowWelcome")};
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// 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"};
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
LONG SetRegKey(HKEY root, TCHAR *szKeyPath, TCHAR *szKeyName, BYTE nKeyValue)
|
|
{
|
|
HKEY hKey;
|
|
DWORD dwDisposition;
|
|
LONG lResult;
|
|
if ((lResult=RegCreateKeyEx(root, szKeyPath,
|
|
0, TEXT("REG_DWORD"), REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS, 0, &hKey, &dwDisposition))
|
|
== ERROR_SUCCESS) {
|
|
//
|
|
// write the key value to the registry
|
|
//
|
|
lResult=RegSetValueEx(hKey, szKeyName, 0, REG_DWORD,
|
|
&nKeyValue,
|
|
sizeof(DWORD));
|
|
RegCloseKey(hKey);
|
|
}
|
|
return lResult;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// Deletes the specified registry key.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LONG DeleteRegKey(HKEY root, TCHAR *szKeyPath, TCHAR *szKeyName)
|
|
{
|
|
HKEY hKey;
|
|
LONG lResult;
|
|
if ((lResult=RegOpenKeyEx(root, szKeyPath, 0,
|
|
KEY_ALL_ACCESS, &hKey)) == ERROR_SUCCESS)
|
|
{
|
|
lResult=RegDeleteValue(hKey, szKeyName);
|
|
RegCloseKey(hKey);
|
|
}
|
|
//if value not found it does not exist already.
|
|
if(lResult==ERROR_FILE_NOT_FOUND)
|
|
lResult=ERROR_SUCCESS;
|
|
return lResult;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// 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;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// Allocates and returns a string if it succeeds or NULL if it fails
|
|
//
|
|
// TCHAR *KeyName[] = {"Constraints"};
|
|
// #define CONSTRAINTS 0
|
|
// GetRegString(CONSTRAINTS);
|
|
// const TCHAR szWinStaKey[] =
|
|
// {"Software\\Microsoft\\Windows NT\\CurrentVersion\\TsVer"};
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
TCHAR * GetRegString(HKEY root, TCHAR *szKeyPath, TCHAR *szKeyName)
|
|
{
|
|
HKEY hKey = 0;
|
|
DWORD dwType = REG_SZ;
|
|
DWORD dwSize = 0;
|
|
TCHAR *szValue=NULL;
|
|
if (RegOpenKeyEx(root, szKeyPath, 0,
|
|
KEY_READ, &hKey) == ERROR_SUCCESS)
|
|
{
|
|
if(RegQueryValueEx(hKey, szKeyName, 0, &dwType,
|
|
NULL, &dwSize) == ERROR_SUCCESS){
|
|
|
|
szValue=new TCHAR[dwSize/sizeof(TCHAR)];
|
|
|
|
if (RegQueryValueEx(hKey, szKeyName, 0, &dwType,
|
|
(LPBYTE)szValue, &dwSize) == ERROR_SUCCESS){
|
|
|
|
RegCloseKey(hKey);
|
|
return szValue;
|
|
|
|
} else {
|
|
delete szValue;
|
|
szValue=NULL;
|
|
}
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// 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]);
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LONG SetRegKeyString(HKEY root, TCHAR *szRegString,
|
|
TCHAR *szKeyPath, TCHAR *szKeyName)
|
|
{
|
|
HKEY hKey;
|
|
DWORD dwDisposition;
|
|
TCHAR lpszKeyType[] = TEXT("REG_SZ");
|
|
LONG lResult;
|
|
|
|
if ((lResult=RegCreateKeyEx(root, szKeyPath,
|
|
0, lpszKeyType, REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS, 0, &hKey, &dwDisposition))
|
|
== ERROR_SUCCESS) {
|
|
|
|
//
|
|
// write the key value to the registry
|
|
//
|
|
lResult=RegSetValueEx(hKey, szKeyName, 0, REG_SZ,
|
|
(BYTE*)szRegString,
|
|
(_tcslen(szRegString)+1)*sizeof(TCHAR));
|
|
|
|
RegCloseKey(hKey);
|
|
|
|
}
|
|
|
|
return lResult;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*++
|
|
Routine Description:
|
|
Allocates buffer and fills it with data from registry.
|
|
Arguments:
|
|
|
|
Return Value:
|
|
none
|
|
--*/
|
|
void GetRegMultiString(HKEY root, TCHAR *szKeyPath, TCHAR *szKeyName, TCHAR **ppBuffer)
|
|
{
|
|
*ppBuffer=NULL;//if failed (i.e. value does not exist)
|
|
|
|
HKEY hKey = 0;
|
|
DWORD dwType = REG_MULTI_SZ;
|
|
DWORD dwSize = 0;
|
|
|
|
if (RegOpenKeyEx(root, szKeyPath, 0, KEY_READ, &hKey) == ERROR_SUCCESS){
|
|
if (RegQueryValueEx(hKey, szKeyName, 0, &dwType, NULL, &dwSize) == ERROR_SUCCESS){
|
|
|
|
*ppBuffer=new TCHAR[dwSize/sizeof(TCHAR)];
|
|
if(*ppBuffer != NULL)
|
|
{
|
|
ZeroMemory(*ppBuffer,dwSize);
|
|
RegQueryValueEx(hKey, szKeyName, 0, &dwType, (LPBYTE)*ppBuffer, &dwSize);
|
|
}
|
|
}
|
|
|
|
RegCloseKey(hKey);
|
|
|
|
}
|
|
} |