You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.4 KiB
101 lines
2.4 KiB
// regutil.cpp : This file contains the
|
|
// Created: Mar '98
|
|
// History:
|
|
// Copyright (C) 1998 Microsoft Corporation
|
|
// All rights reserved.
|
|
// Microsoft Confidential
|
|
|
|
#include "cmnhdr.h"
|
|
#include "debug.h"
|
|
|
|
using namespace _Utils;
|
|
using CDebugLevel::TRACE_DEBUGGING;
|
|
using CDebugLevel::TRACE_HANDLE;
|
|
using CDebugLevel::TRACE_SOCKET;
|
|
|
|
bool
|
|
GetRegistryDWORD
|
|
(
|
|
HKEY hk,
|
|
LPTSTR lpszTag,
|
|
LPDWORD lpdwValue,
|
|
DWORD dwDefault,
|
|
BOOL fOverwrite
|
|
)
|
|
{
|
|
DWORD dwType;
|
|
DWORD dwSize = sizeof( DWORD );
|
|
|
|
if( !fOverwrite && RegQueryValueEx( hk, lpszTag, NULL, &dwType, ( LPBYTE )lpdwValue,
|
|
&dwSize ) == ERROR_SUCCESS )
|
|
{
|
|
if( ( dwType != REG_DWORD ) || ( dwSize != sizeof( DWORD ) ) )
|
|
return ( false );
|
|
}
|
|
else
|
|
{
|
|
*lpdwValue = dwDefault;
|
|
dwSize = sizeof( DWORD );
|
|
RegSetValueEx( hk, lpszTag, 0, REG_DWORD, (LPBYTE) lpdwValue, dwSize );
|
|
}
|
|
return ( true );
|
|
}
|
|
|
|
|
|
bool
|
|
GetRegistrySZ
|
|
(
|
|
HKEY hk,
|
|
LPTSTR tag,
|
|
LPTSTR* lpszValue,
|
|
LPTSTR def,
|
|
BOOL fOverwrite
|
|
)
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwType;
|
|
DWORD dwStatus;
|
|
|
|
dwSize = 0;
|
|
dwStatus = RegQueryValueEx(hk, tag, NULL, &dwType, (LPBYTE) NULL, &dwSize);
|
|
if( !fOverwrite && (( dwStatus == ERROR_MORE_DATA ) || ( dwStatus == ERROR_SUCCESS )) )
|
|
{
|
|
if( ( dwType != REG_EXPAND_SZ ) && ( dwType != REG_SZ ) )
|
|
return ( false );
|
|
|
|
if( dwSize == 0 )
|
|
dwSize++;
|
|
|
|
*lpszValue = ( LPTSTR ) new TCHAR[ dwSize ];
|
|
|
|
if (*lpszValue)
|
|
{
|
|
if( RegQueryValueEx( hk, tag, NULL, &dwType, ( LPBYTE ) *lpszValue,
|
|
&dwSize ) != ERROR_SUCCESS )
|
|
{
|
|
return ( false );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return (false);
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
*lpszValue = ( LPTSTR ) new
|
|
TCHAR[( wcslen( def )) + 1 ];
|
|
if (*lpszValue)
|
|
{
|
|
wcscpy( *lpszValue, def ); //Attack ? size not known.
|
|
dwSize = ( wcslen( *lpszValue ) + 1 ) * sizeof( TCHAR );
|
|
RegSetValueEx(hk, tag, 0, REG_EXPAND_SZ, (LPBYTE) *lpszValue, dwSize);
|
|
}
|
|
else
|
|
{
|
|
return (false);
|
|
}
|
|
}
|
|
return ( true );
|
|
}
|