/*++ Copyright (c) 1999-2000 Microsoft Corporation Module Name: RACPLSettings.cpp Abstract: Author: Rajesh Soy 10/00 Revision History: Rajesh Soy - created 10/26/2000 --*/ #include "stdafx.h" #include "RACPLSettings.h" CRACPLSettings *g_pcRASettings = NULL; BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } /*++ Function Name: CRACPLSettings::OnInitDialog Routine Description: Invoked on WM_INITDIALOG Arguments: none Return Value: always returns TRUE --*/ BOOL CRACPLSettingsDialog::OnInitDialog() { // // Call CDialog::OnInitDialog(); // CDialog::OnInitDialog(); // // Open the RA Settings // if(S_OK != OpenRACPLSettings()) { // // Error condition // goto ExitOnInitDialog; } // // Get the settings // if( S_OK != GetRACPLSettings( &m_RACPLSettings ) ) { // // Error condition // goto ExitOnInitDialog; } // // TODO: Set current values in UI // ExitOnInitDialog: return TRUE; } /*++ Function Name: CRACPLSettings::CRACPLSettings Routine Description: Constructor for the CRACPLSettings class Arguments: none Return Value: S_OK on success. Otherwise, an error code is returned. --*/ CRACPLSettings::CRACPLSettings() { // // Initialize member variables // m_RACPLSettings.dwMode = REG_DWORD_RA_DEFAULTMODE; // Remote Assistance Mode m_RACPLSettings.dwUnsolicited = REG_DWORD_RA_UNSOLICITED_DEFAULT; // Allow Unsolicited Remote Assistance m_RACPLSettings.dwMaxTimeout = REG_DWORD_RA_DEFAULT_TIMEOUT; // Maximum Ticket Timeout m_pcRegKey = NULL; return; } /*++ Function Name: CRACPLSettings::OpenRACPLSettings Routine Description: Member function of the CRACPLSettings class that initializes the RACPLSettings API Arguments: none Return Value: S_OK on success. Otherwise, an error code is returned. --*/ DWORD CRACPLSettings::OpenRACPLSettings() { DWORD dwRetVal = S_OK; // // Instantiate the registry access class // if( NULL == m_pcRegKey ) { m_pcRegKey = new CRegKey; if( NULL == m_pcRegKey ) { // // Error // dwRetVal = GetLastError(); goto ExitOpenRACPLSettings; } } else { m_pcRegKey->Close(); } // // Create the Remote Assistance Settings registry key. Open it if existing // if(ERROR_SUCCESS != m_pcRegKey->Create(HKEY_LOCAL_MACHINE, REG_KEY_REMOTEASSISTANCE)) { // // Error condition, exit // dwRetVal = GetLastError(); goto ExitOpenRACPLSettings; } // // Initialize member variables // dwRetVal = GetRACPLSettings( NULL ); ExitOpenRACPLSettings: return dwRetVal; } /*++ Function Name: CRACPLSettings::CloseRACPLSettings Routine Description: Member function of the CRACPLSettings class that closes the RACPLSettings API Arguments: none Return Value: S_OK on success. Otherwise, an error code is returned. --*/ DWORD CRACPLSettings::CloseRACPLSettings() { DWORD dwRetVal = S_OK; if( NULL != m_pcRegKey ) { m_pcRegKey->Close(); m_pcRegKey = NULL; } return dwRetVal; } /*++ Function Name: CRACPLSettings::GetRACPLSettings Routine Description: Member function of the CRACPLSettings class that reads the Remote Assistance settings from registry and returns it in the buffer passed Arguments: pRACPLSettings - pointer to RACPLSETTINGS structure Return Value: S_OK on success. Otherwise, an error code is returned. --*/ DWORD CRACPLSettings::GetRACPLSettings( PRACPLSETTINGS pRACPLSettings ) { DWORD dwRetVal = S_OK; if(NULL != m_pcRegKey) { // // Remote Assistance Mode // if(ERROR_SUCCESS != m_pcRegKey->QueryValue( m_RACPLSettings.dwMode, REG_VALUE_MODE )) { m_RACPLSettings.dwMode = REG_DWORD_RA_DEFAULTMODE; } // // Allow Unsolicited Remote Assistance // if(ERROR_SUCCESS != m_pcRegKey->QueryValue( m_RACPLSettings.dwUnsolicited, REG_VALUE_UNSOLICITED )) { m_RACPLSettings.dwUnsolicited = REG_DWORD_RA_UNSOLICITED_DEFAULT; } // // Maximum Ticket Timeout // if(ERROR_SUCCESS != m_pcRegKey->QueryValue( m_RACPLSettings.dwMaxTimeout, REG_VALUE_MAX_TICKET )) { m_RACPLSettings.dwMaxTimeout = REG_DWORD_RA_DEFAULT_TIMEOUT; } // // Copy the settings to the buffer passed if necessary // if(NULL != pRACPLSettings) { memcpy((void *)pRACPLSettings, (void *)&m_RACPLSettings, sizeof(RACPLSETTINGS)); } } else { // // RACPLSettings API has not been initialized // dwRetVal = ERROR_BADKEY; goto ExitGetRACPLSettings; } ExitGetRACPLSettings: return dwRetVal; } /*++ Function Name: CRACPLSettings::SetRACPLSettings Routine Description: Member function of the CRACPLSettings class that sets the Remote Assistance settings in registry from the values passed in the input buffer Arguments: pRACPLSettings - pointer to RACPLSETTINGS structure containing the values to be set Return Value: S_OK on success. Otherwise, an error code is returned. --*/ DWORD CRACPLSettings::SetRACPLSettings(PRACPLSETTINGS pRACPLSettings) { DWORD dwRetVal = S_OK; // // Sanity Check // if(NULL == pRACPLSettings) { dwRetVal = ERROR_INVALID_BLOCK; goto ExitSetRACPLSettings; } if(NULL != m_pcRegKey) { // // Remote Assistance Mode // switch( pRACPLSettings->dwMode ) { case REG_DWORD_RA_ENABLED: case REG_DWORD_RA_DISABLED: case REG_DWORD_RA_SHADOWONLY: // // These are the only valid values // if(ERROR_SUCCESS != m_pcRegKey->SetValue( pRACPLSettings->dwMode, REG_VALUE_MODE )) { dwRetVal = GetLastError(); goto ExitSetRACPLSettings; } m_RACPLSettings.dwMode = pRACPLSettings->dwMode; break; default: // // Invalid value. Ignore // break; } // // Allow Unsolicited Remote Assistance // switch( pRACPLSettings->dwUnsolicited ) { case REG_DWORD_RA_ALLOW: case REG_DWORD_RA_DISALLOW: // // These are the only valid values // if(ERROR_SUCCESS != m_pcRegKey->SetValue( pRACPLSettings->dwUnsolicited, REG_VALUE_UNSOLICITED )) { dwRetVal = GetLastError(); goto ExitSetRACPLSettings; } m_RACPLSettings.dwUnsolicited = pRACPLSettings->dwUnsolicited; break; default: // // Invalid value. Ignore // break; } // // Maximum Ticket Timeout // if( (REG_DWORD_RA_TIMEOUT_MIN <= pRACPLSettings->dwMaxTimeout) && (REG_DWORD_RA_TIMEOUT_MAX >= pRACPLSettings->dwMaxTimeout)) { if(ERROR_SUCCESS != m_pcRegKey->SetValue( pRACPLSettings->dwMaxTimeout, REG_VALUE_MAX_TICKET )) { dwRetVal = GetLastError(); goto ExitSetRACPLSettings; } m_RACPLSettings.dwMaxTimeout = pRACPLSettings->dwMaxTimeout; } } else { // // RACPLSettings API has not been initialized // dwRetVal = ERROR_BADKEY; goto ExitSetRACPLSettings; } ExitSetRACPLSettings: return dwRetVal; } /*++ *********************** RACPLSettings API *************************** --*/ /*++ Function Name: OpenRACPLSettings Routine Description: Initializes the RACPLSettings API Arguments: none Return Value: S_OK on success. Otherwise, an error code is returned. --*/ RACPLSETTINGS_API DWORD OpenRACPLSettings(void) { DWORD dwRetVal = S_OK; // // Allocate the global variable // if(NULL == g_pcRASettings) { g_pcRASettings = new CRACPLSettings; if(NULL == g_pcRASettings) { // // Fatal Error // dwRetVal = GetLastError(); goto ExitOpenRACPLSettings; } } // // Call the initialization routine // dwRetVal = g_pcRASettings->OpenRACPLSettings(); ExitOpenRACPLSettings: return dwRetVal; } /*++ Function Name: CloseRACPLSettings Routine Description: Closes the RACPLSettings API Arguments: none Return Value: S_OK on success. Otherwise, an error code is returned. --*/ RACPLSETTINGS_API DWORD CloseRACPLSettings(void) { DWORD dwRetVal = S_OK; if(NULL != g_pcRASettings) { dwRetVal = g_pcRASettings->CloseRACPLSettings(); } else { // // The registry key for RACPLSettings is not open // dwRetVal = ERROR_BADKEY; } return dwRetVal; } /*++ Function Name: GetRACPLSettings Routine Description: Function that reads the Remote Assistance Settings from the system registry and returns it in the buffer passed Arguments: pRACPLSettings - void pointer that gets the RACPLSETTINGS structure Return Value: S_OK on success. Otherwise, an error code is returned. --*/ RACPLSETTINGS_API DWORD GetRACPLSettings( PRACPLSETTINGS pRACPLSettings ) { DWORD dwRetVal = S_OK; // // Sanity check // if(NULL == pRACPLSettings) { dwRetVal = ERROR_INVALID_BLOCK; goto ExitGetRACPLSettings; } if(NULL != g_pcRASettings) { dwRetVal = g_pcRASettings->GetRACPLSettings( pRACPLSettings ); } else { // // The registry key for RACPLSettings is not open // dwRetVal = ERROR_BADKEY; } ExitGetRACPLSettings: return dwRetVal; } /*++ Function Name: SetRACPLSettings Routine Description: Function that reads the Remote Assistance Settings from the buffer passed and writes them to the system registry Arguments: pRACPLSettings - pointer to RACPLSETTINGS structure containing the values to be set Return Value: S_OK on success. Otherwise, an error code is returned. --*/ RACPLSETTINGS_API DWORD SetRACPLSettings( PRACPLSETTINGS pRACPLSettings ) { DWORD dwRetVal = S_OK; // // Sanity check // if(NULL == pRACPLSettings) { dwRetVal = ERROR_INVALID_BLOCK; goto ExitSetRACPLSettings; } if(NULL != g_pcRASettings) { dwRetVal = g_pcRASettings->SetRACPLSettings( pRACPLSettings ); } else { // // The registry key for RACPLSettings is not open // dwRetVal = ERROR_BADKEY; } ExitSetRACPLSettings: return dwRetVal; }