|
|
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000 Microsoft Corporation
//
// Module: setupkey.cpp
//
// Author: Dan Elliott
//
// Abstract: Definition of the CSetupKey object. This object provides methods
// for accessing values under HKLM\System\Setup.
//
// Environment:
// Neptune
//
// Revision History:
// 00/08/08 dane Created.
//
//////////////////////////////////////////////////////////////////////////////
#pragma comment(user, "Compiled on " __DATE__ " at " __TIME__)
#pragma comment(compiler)
//////////////////////////////////////////////////////////////////////////////
//
// Include files
//
#include "precomp.h"
#include "msobmain.h"
#include "setupkey.h"
//////////////////////////////////////////////////////////////////////////////
//
// Static initialization
//
CSetupKey::CSetupKey() : m_hkey(NULL) { LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGSTR_PATH_SYSTEMSETUPKEY, 0, KEY_ALL_ACCESS, &m_hkey ); MYASSERT(ERROR_SUCCESS == lRet); MYASSERT(NULL != m_hkey);
} // CSetupKey::CSetupKey
CSetupKey::~CSetupKey() { if (NULL != m_hkey) { RegCloseKey(m_hkey); }
} // CSetupKey::~CSetupKey
LRESULT CSetupKey::set_CommandLine( LPCWSTR szCmdLine ) { MYASSERT(IsValid()); MYASSERT(NULL != szCmdLine);
return RegSetValueEx(m_hkey, REGSTR_VALUE_CMDLINE, 0, REG_SZ, (BYTE*)szCmdLine, BYTES_REQUIRED_BY_SZ(szCmdLine) );
} // CSetupKey::set_CommandLine
LRESULT CSetupKey::get_CommandLine( LPWSTR szCommandLine, DWORD cchCommandLine ) { MYASSERT(IsValid()); MYASSERT(NULL != szCommandLine); MYASSERT(0 < cchCommandLine);
if (NULL == szCommandLine || 0 == cchCommandLine) { return ERROR_INVALID_PARAMETER; }
WCHAR rgchCommandLine[MAX_PATH + 1]; DWORD dwSize = sizeof(rgchCommandLine); LRESULT lResult = RegQueryValueEx( m_hkey, REGSTR_VALUE_CMDLINE, 0, NULL, (LPBYTE)rgchCommandLine, &dwSize ); if (ERROR_SUCCESS == lResult) { if (cchCommandLine >= (DWORD)(lstrlen(rgchCommandLine) + 1)) { lstrcpy(szCommandLine, rgchCommandLine); } else { lResult = ERROR_INSUFFICIENT_BUFFER; *szCommandLine = '\0'; } }
return lResult; } // CSetupKey::get_CommandLine
LRESULT CSetupKey::set_SetupType( DWORD dwSetupType) { MYASSERT(IsValid()); MYASSERT( dwSetupType == SETUPTYPE_NONE || dwSetupType == SETUPTYPE_FULL || dwSetupType == SETUPTYPE_NOREBOOT || dwSetupType == SETUPTYPE_UPGRADE );
return RegSetValueEx(m_hkey, REGSTR_VALUE_SETUPTYPE, 0, REG_DWORD, (BYTE*)&dwSetupType, sizeof(DWORD) );
} // CSetupKey::set_SetupType
LRESULT CSetupKey::get_SetupType( DWORD* pdwSetupType ) { MYASSERT(IsValid()); MYASSERT(NULL != pdwSetupType);
if (NULL == pdwSetupType) { return ERROR_INVALID_PARAMETER; }
DWORD dwSetupType; DWORD dwSize = sizeof(DWORD); LRESULT lResult = RegQueryValueEx( m_hkey, REGSTR_VALUE_SETUPTYPE, 0, NULL, (LPBYTE)&dwSetupType, &dwSize );
*pdwSetupType = (ERROR_SUCCESS == lResult) ? dwSetupType : SETUPTYPE_NONE;
// Since FALSE is returned in cases where we fail to read a value,
// ERROR_SUCCESS can always be returned.
//
return ERROR_SUCCESS; } // CSetupKey::get_SetupType
LRESULT CSetupKey::set_MiniSetupInProgress( BOOL fInProgress) { MYASSERT(IsValid());
if (fInProgress) { DWORD dwData = (DWORD)fInProgress; return RegSetValueEx(m_hkey, REGSTR_VALUE_MINISETUPINPROGRESS, 0, REG_DWORD, (BYTE*)&dwData, sizeof(DWORD) ); } else { return RegDeleteValue(m_hkey, REGSTR_VALUE_MINISETUPINPROGRESS); }
} // CSetupKey::set_MiniSetupInProgress
LRESULT CSetupKey::get_MiniSetupInProgress( BOOL* pfInProgress ) { MYASSERT(IsValid()); MYASSERT(NULL != pfInProgress);
if (NULL == pfInProgress) { return ERROR_INVALID_PARAMETER; }
BOOL fInProgress; DWORD dwSize = sizeof(DWORD); LRESULT lResult = RegQueryValueEx( m_hkey, REGSTR_VALUE_MINISETUPINPROGRESS, 0, NULL, (LPBYTE)&fInProgress, &dwSize );
*pfInProgress = (ERROR_SUCCESS == lResult) ? fInProgress : FALSE;
// Since FALSE is returned in cases where we fail to read a value,
// ERROR_SUCCESS can always be returned.
//
return ERROR_SUCCESS; } // CSetupKey::get_MiniSetupInProgress
LRESULT CSetupKey::set_OobeInProgress( BOOL fInProgress) { MYASSERT(IsValid());
if (fInProgress) { DWORD dwData = (DWORD)fInProgress; return RegSetValueEx(m_hkey, REGSTR_VALUE_OOBEINPROGRESS, 0, REG_DWORD, (BYTE*)&dwData, sizeof(DWORD)); } else { return RegDeleteValue(m_hkey, REGSTR_VALUE_OOBEINPROGRESS); }
} // CSetupKey::set_OobeInProgress
LRESULT CSetupKey::get_OobeInProgress( BOOL* pfInProgress ) { MYASSERT(IsValid()); MYASSERT(NULL != pfInProgress);
if (NULL == pfInProgress) { return ERROR_INVALID_PARAMETER; }
BOOL fInProgress; DWORD dwSize = sizeof(DWORD); LRESULT lResult = RegQueryValueEx( m_hkey, REGSTR_VALUE_OOBEINPROGRESS, 0, NULL, (LPBYTE)&fInProgress, &dwSize );
*pfInProgress = (ERROR_SUCCESS == lResult) ? fInProgress : FALSE;
// Since FALSE is returned in cases where we fail to read a value,
// ERROR_SUCCESS can always be returned.
//
return ERROR_SUCCESS; } // CSetupKey::get_OobeInProgress
LRESULT CSetupKey::set_ShutdownAction( OOBE_SHUTDOWN_ACTION OobeShutdownAction ) { MYASSERT(IsValid()); MYASSERT(SHUTDOWN_MAX > OobeShutdownAction);
DWORD dwData;
switch (OobeShutdownAction) { case SHUTDOWN_NOACTION: // fall through
case SHUTDOWN_LOGON: return RegDeleteValue(m_hkey, REGSTR_VALUE_SHUTDOWNREQUIRED);
case SHUTDOWN_REBOOT: dwData = ShutdownReboot; return RegSetValueEx(m_hkey, REGSTR_VALUE_SHUTDOWNREQUIRED, 0, REG_DWORD, (BYTE*)&dwData, sizeof(DWORD) );
case SHUTDOWN_POWERDOWN: dwData = ShutdownNoReboot; return RegSetValueEx(m_hkey, REGSTR_VALUE_SHUTDOWNREQUIRED, 0, REG_DWORD, (BYTE*)&dwData, sizeof(DWORD) );
default: return ERROR_INVALID_DATA; }
} // CSetupKey::set_ShutdownAction
LRESULT CSetupKey::get_ShutdownAction( OOBE_SHUTDOWN_ACTION* pOobeShutdownAction ) { MYASSERT(IsValid()); MYASSERT(NULL != pOobeShutdownAction);
if (NULL == pOobeShutdownAction) { return ERROR_INVALID_PARAMETER; }
DWORD ShutdownAction; DWORD dwSize = sizeof(DWORD); LRESULT lResult = RegQueryValueEx( m_hkey, REGSTR_VALUE_SHUTDOWNREQUIRED, 0, NULL, (LPBYTE)&ShutdownAction, &dwSize ); if (ERROR_SUCCESS == lResult) { switch ((SHUTDOWN_ACTION)ShutdownAction) { case ShutdownReboot: *pOobeShutdownAction = SHUTDOWN_REBOOT; break; case ShutdownNoReboot: // fall through
case ShutdownPowerOff: *pOobeShutdownAction = SHUTDOWN_POWERDOWN; break; }
} else { // if the key doesn't exist, assume no action is required.
//
*pOobeShutdownAction = SHUTDOWN_NOACTION; }
// Since FALSE is returned in cases where we fail to read a value,
// ERROR_SUCCESS can always be returned.
//
return ERROR_SUCCESS;
} // CSetupKey::get_ShutdownAction
//
///// End of file: setupkey.cpp ////////////////////////////////////////////
|