Leaked source code of windows server 2003
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.
 
 
 
 
 
 

308 lines
7.8 KiB

/* File: D:\WACKER\tdll\telnetck.c (Created: 26-Nov-1996 by cab)
*
* Copyright 1996 by Hilgraeve Inc. -- Monroe, MI
* All rights reserved
*
* Description:
* Implements the functions used to implement "telnet checking".
* This is HyperTerminal's way of assuring that it is the
* default telnet app for Internet Explorer and Netscape Navigator.
*
* $Revision: 5 $
* $Date: 5/15/02 4:37p $
*/
#include <windows.h>
#pragma hdrstop
#include "features.h"
#ifdef INCL_DEFAULT_TELNET_APP
#include "assert.h"
#include "stdtyp.h"
#include "globals.h"
#include "htchar.h"
#include "registry.h"
#include "hlptable.h"
// Control IDs for the dialog:
//
#define IDC_PB_YES IDOK
#define IDC_PB_NO IDCANCEL
#define IDC_CK_STOP_ASKING 200
#define IDC_ST_QUESTION 201
#define IDC_IC_EXCLAMATION 202
// Registry key for HyperTerminal:
//
#ifndef NT_EDITION
static const TCHAR g_achHyperTerminalRegKey[] =
TEXT("SOFTWARE\\Hilgraeve Inc\\HyperTerminal PE\\3.0");
#else
static const TCHAR g_achHyperTerminalRegKey[] =
TEXT("SOFTWARE\\Microsoft\\HyperTerminal");
#endif
// Registry value for telnet checking:
//
static const TCHAR g_achTelnetCheck[] = TEXT("Telnet Check");
// Registry keys for the web browsers:
//
static const TCHAR g_achIERegKey[] =
TEXT("SOFTWARE\\Classes\\telnet\\shell\\open\\command");
static const TCHAR g_achNetscapeRegKey[] =
TEXT("SOFTWARE\\Netscape\\Netscape Navigator\\Viewers");
// Registry values for the browser telnet apps:
//
static const TCHAR g_achIERegValue[] = TEXT("");
static const TCHAR g_achNetscapeRegValue[] = TEXT("telnet");
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* IsHyperTerminalDefaultTelnetApp
*
* DESCRIPTION:
* Determines if HyperTerminal is the default telnet app for Internet
* Explorer and Netscape Navigator.
*
* PARAMETERS:
* None
*
* RETURNS:
* TRUE or FALSE
*
* AUTHOR: C. Baumgartner, 11/26/96
*/
BOOL IsHyperTerminalDefaultTelnetApp(void)
{
TCHAR acExePath[MAX_PATH];
TCHAR acRegistryData[MAX_PATH * 2];
long lRet = 0;
DWORD dwSize = sizeof(acRegistryData);
// Get the path name of HyperTerminal.
//
acExePath[0] = TEXT('\0');
GetModuleFileName(glblQueryHinst(), acExePath, MAX_PATH);
// Get IE's default telnet app.
//
acRegistryData[0] = TEXT('\0');
if ( htRegQueryValue(HKEY_LOCAL_MACHINE, g_achIERegKey,
g_achIERegValue, acRegistryData, &dwSize) == 0 )
{
if ( StrCharStrStr(acRegistryData, acExePath) == NULL )
{
return FALSE;
}
}
// Get Netscape's default telnet app.
//
acRegistryData[0] = TEXT('\0');
if ( htRegQueryValue(HKEY_CURRENT_USER, g_achNetscapeRegKey,
g_achNetscapeRegValue, acRegistryData, &dwSize) == 0 )
{
if ( StrCharStrStr(acRegistryData, acExePath) == NULL )
{
return FALSE;
}
}
return TRUE;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* QueryTelnetCheckFlag
*
* DESCRIPTION:
* Returns the value of the "telnet checking" flag. If this is TRUE,
* the app should check whether it is the default telnet app for IE
* and Netscape. If it isn't the default telnet app, then display
* the "Default Telnet App" dialog. The user can disable "telnet
* checking" by checking the "Stop asking me this question" box.
*
* PARAMETERS:
* None
*
* RETURNS:
* TRUE or FALSE
*
* AUTHOR: C. Baumgartner, 11/26/96
*/
BOOL QueryTelnetCheckFlag(void)
{
DWORD dwTelnetCheck = TRUE;
DWORD dwSize = sizeof(dwTelnetCheck);
if ( htRegQueryValue(HKEY_CURRENT_USER, g_achHyperTerminalRegKey,
g_achTelnetCheck, (LPBYTE) &dwTelnetCheck, &dwSize) == 0 )
{
return dwTelnetCheck;
}
return TRUE;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* SetTelnetCheckFlag
*
* DESCRIPTION:
* Sets the "telnet checking" flag which will either turn on or off
* this feature the next time HyperTerminal starts.
*
* PARAMETERS:
* fCheck - Check if HyperTerminal is the default telnet app?
*
* RETURNS:
* 0 if successful, -1 if error
*
* AUTHOR: C. Baumgartner, 11/27/96
*/
int SetTelnetCheckFlag(BOOL fCheck)
{
int iRet = 0;
if ( regSetDwordValue(HKEY_CURRENT_USER, g_achHyperTerminalRegKey,
g_achTelnetCheck, (DWORD)fCheck) != 0 )
{
iRet = -1;
}
return iRet;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* SetDefaultTelnetApp
*
* DESCRIPTION:
* Sets the default telnet application for IE and Netscape to HyperTerminal.
*
* PARAMETERS:
* None
*
* RETURNS:
* 0 if successful, -1 if error
*
* AUTHOR: C. Baumgartner, 11/27/96
*/
int SetDefaultTelnetApp(void)
{
int iRet = 0;
TCHAR acExePath[MAX_PATH];
TCHAR acRegistryData[MAX_PATH * 2];
// Get the path name of HyperTerminal.
//
acExePath[0] = TEXT('\0');
GetModuleFileName(glblQueryHinst(), acExePath, MAX_PATH);
// Create the Netscape telnet command string.
//
acRegistryData[0] = TEXT('\0');
wsprintf(acRegistryData, "%s /t", acExePath);
// Write it to the registry.
//
if ( regSetStringValue(HKEY_CURRENT_USER, g_achNetscapeRegKey,
g_achNetscapeRegValue, acRegistryData) != 0 )
{
// Just set the return flag to mark that we failed.
//
iRet = -1;
}
// Create the IE telnet command string.
//
acRegistryData[0] = TEXT('\0');
wsprintf(acRegistryData, "%s /t %%1", acExePath);
// Write it to the registry.
//
if ( regSetStringValue(HKEY_LOCAL_MACHINE, g_achIERegKey, g_achIERegValue,
acRegistryData) != 0 )
{
// Just set the return flag to mark that we failed.
//
iRet = -1;
}
return iRet;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* DefaultTelnetAppDlgProc
*
* DESCRIPTION:
* The dialog procedure for the "Default Telnet App" dialog.
* This dialog asks the user if he/she wants HyperTerminal
* to be the default telnet app for IE and NN. There also is
* a check box to disable this potentially annoying feature.
*
* PARAMETERS:
* hDlg - The dialog's window handle.
* wMsg - The message being sent to the window.
* wPar - The message's wParam.
* lPar - The message's lParam.
*
* RETURNS:
* TRUE or FALSE
*
* AUTHOR: C. Baumgartner, 11/26/96
*/
INT_PTR CALLBACK DefaultTelnetAppDlgProc(HWND hDlg, UINT wMsg,
WPARAM wPar, LPARAM lPar)
{
static DWORD aHlpTable[] = {IDC_CK_STOP_ASKING, IDH_TELNETCK_STOP_ASKING,
IDC_PB_YES, IDH_TELNETCK_YES,
IDC_PB_NO, IDH_TELNETCK_NO,
0, 0};
switch (wMsg)
{
case WM_DESTROY:
// Check the value of the "Stop asking me" checkbox.
//
SetTelnetCheckFlag(!(IsDlgButtonChecked(hDlg, IDC_CK_STOP_ASKING) == BST_CHECKED));
break;
case WM_HELP:
doContextHelp(aHlpTable, wPar, lPar, FALSE, FALSE);
break;
case WM_COMMAND:
switch (wPar)
{
case IDC_PB_YES:
SetDefaultTelnetApp();
EndDialog(hDlg, TRUE);
break;
case IDC_PB_NO:
EndDialog(hDlg, FALSE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
#endif