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.
370 lines
8.2 KiB
370 lines
8.2 KiB
/*--------------------------------------------------------------
|
|
*
|
|
* FILE: SK_Reg.c
|
|
*
|
|
* PURPOSE: These functions process data to and from the registry
|
|
*
|
|
* CREATION: June 1994
|
|
*
|
|
* COPYRIGHT: Black Diamond Software (C) 1994
|
|
*
|
|
* AUTHOR: Ronald Moak
|
|
*
|
|
* $Header: %Z% %F% %H% %T% %I%
|
|
*
|
|
*--- Includes --------------------------------------------*/
|
|
#include <windows.h>
|
|
|
|
#include "w95trace.h"
|
|
#include "sk_defs.h"
|
|
#include "sk_comm.h"
|
|
#include "sk_reg.h"
|
|
|
|
// Private Functions -------------------------------------------
|
|
|
|
static DWORD OpenRegistry(int User);
|
|
static void CloseRegistry();
|
|
static void SetRegistryValues();
|
|
static void GetRegistryValues();
|
|
|
|
// Variables --------------------------------------------
|
|
|
|
HKEY hKeyApp;
|
|
|
|
/*---------------------------------------------------------------
|
|
*
|
|
* FUNCTION BOOL GetUserValues()
|
|
*
|
|
* TYPE Local
|
|
*
|
|
* PURPOSE Read the registery an collect the data for the current
|
|
* user. This Information is then setup in the comm routines.
|
|
* This is called when someone logs into NT.
|
|
*
|
|
* INPUTS User Type Default or Current User
|
|
*
|
|
* RETURNS TRUE - User wants Serial Keys Enabled
|
|
* FALSE- User wants Serial Keys Disabled
|
|
*
|
|
*---------------------------------------------------------------*/
|
|
BOOL GetUserValues(int User)
|
|
{
|
|
DWORD Status;
|
|
|
|
DBPRINTF(TEXT("GetUserValues()\r\n"));
|
|
|
|
if (!(Status = OpenRegistry(User))) // Did Open Registry Succed?
|
|
return(FALSE); // No - Fail
|
|
|
|
switch (Status) // What is status?
|
|
{
|
|
// This case should only be true the frist time
|
|
// the registry is opened for the current user.
|
|
case REG_CREATED_NEW_KEY: // Is this an empty Registry?
|
|
SetRegistryValues(); // Yes - Set Default Values
|
|
break;
|
|
|
|
case REG_OPENED_EXISTING_KEY: // Is this an existing Registry?
|
|
GetRegistryValues(); // Yes - Get Values
|
|
break;
|
|
}
|
|
|
|
CloseRegistry();
|
|
return(TRUE);
|
|
}
|
|
|
|
/*---------------------------------------------------------------
|
|
*
|
|
* FUNCTION void SetUserValues()
|
|
*
|
|
* TYPE Global
|
|
*
|
|
* PURPOSE This function writes out information to the
|
|
* registry.
|
|
*
|
|
* INPUTS None
|
|
*
|
|
* RETURNS TRUE - Write Successful
|
|
* FALSE- Write Failed
|
|
*
|
|
*---------------------------------------------------------------*/
|
|
BOOL SetUserValues()
|
|
{
|
|
DWORD Status;
|
|
|
|
DBPRINTF(TEXT("SetUserValues()\r\n"));
|
|
|
|
if (!(Status = OpenRegistry(REG_USER))) // Did Open Registry Succed?
|
|
return(FALSE); // No - Fail
|
|
|
|
SetRegistryValues(); // Set New Values
|
|
CloseRegistry(); // Close Registry
|
|
return(TRUE);
|
|
}
|
|
|
|
/*---------------------------------------------------------------
|
|
*
|
|
* Local Functions -
|
|
*
|
|
/*---------------------------------------------------------------
|
|
*
|
|
* FUNCTION DWORD OpenRegistry()
|
|
*
|
|
* TYPE Global
|
|
*
|
|
* PURPOSE Opens the Registry for reading or writing
|
|
*
|
|
* INPUTS User Type Default or Current User
|
|
*
|
|
* RETURNS 0 = Failed
|
|
* >0 = REG_CREATED_NEW_KEY or REG_OPENED_EXISTING_KEY
|
|
*
|
|
*---------------------------------------------------------------*/
|
|
static DWORD OpenRegistry(int User)
|
|
{
|
|
LONG ret;
|
|
DWORD Disposition = 0;
|
|
|
|
DBPRINTF(TEXT(" OpenRegistry()\r\n"));
|
|
|
|
switch (User)
|
|
{
|
|
case REG_USER: // Current User
|
|
ret =RegCreateKeyEx
|
|
(
|
|
HKEY_CURRENT_USER,
|
|
TEXT("Control Panel\\Accessibility\\SerialKeys"),
|
|
0,NULL,
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyApp,
|
|
&Disposition
|
|
);
|
|
break;
|
|
|
|
case REG_DEF: // Default
|
|
ret =RegCreateKeyEx
|
|
(
|
|
HKEY_USERS,
|
|
TEXT(".DEFAULT\\Control Panel\\Accessibility\\SerialKeys"),
|
|
0,NULL,
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKeyApp,
|
|
&Disposition
|
|
);
|
|
break;
|
|
|
|
default:
|
|
ret = FALSE;
|
|
break;
|
|
}
|
|
|
|
if (ret != ERROR_SUCCESS) // Did open succede?
|
|
return(FALSE); // No -
|
|
|
|
return (Disposition);
|
|
|
|
}
|
|
|
|
/*---------------------------------------------------------------
|
|
*
|
|
* FUNCTION void CloseRegistry()
|
|
*
|
|
* TYPE Global
|
|
*
|
|
* PURPOSE Closes the Registry for reading or writing
|
|
*
|
|
* INPUTS None
|
|
*
|
|
* RETURNS 0 = Failed
|
|
* >0 = REG_CREATED_NEW_KEY or REG_OPENED_EXISTING_KEY
|
|
*
|
|
*---------------------------------------------------------------*/
|
|
static void CloseRegistry()
|
|
{
|
|
DBPRINTF(TEXT(" CloseRegistry()\r\n"));
|
|
RegCloseKey(hKeyApp);
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------
|
|
*
|
|
* FUNCTION void SetRegistryValues()
|
|
*
|
|
* TYPE Global
|
|
*
|
|
* PURPOSE Writes the values in the SerialKeys structure to
|
|
* the Registry.
|
|
*
|
|
* INPUTS None
|
|
*
|
|
* RETURNS None
|
|
*
|
|
*---------------------------------------------------------------*/
|
|
static void SetRegistryValues()
|
|
{
|
|
long ret;
|
|
DWORD dwFlags;
|
|
|
|
DBPRINTF(TEXT(" SetRegistryValues()\r\n"));
|
|
|
|
dwFlags = skNewKey.dwFlags | SERKF_AVAILABLE;
|
|
ret = RegSetValueEx( // Write dwFlags
|
|
hKeyApp,
|
|
REG_FLAGS,
|
|
0,REG_DWORD,
|
|
(CONST LPBYTE) &dwFlags,
|
|
sizeof(DWORD));
|
|
|
|
if (ret != ERROR_SUCCESS) // Did open succede?
|
|
{
|
|
DBPRINTF(TEXT("Unable to Set Registry Value\r\n"));
|
|
return; // No -
|
|
}
|
|
|
|
|
|
if (NULL == skNewKey.lpszActivePort)
|
|
{
|
|
ret = RegSetValueEx( // Write Active Port
|
|
hKeyApp,
|
|
REG_ACTIVEPORT,
|
|
0,
|
|
REG_SZ,
|
|
(CONST LPBYTE) TEXT(""),
|
|
1 * sizeof(*skNewKey.lpszActivePort)); // size of one char, the term null
|
|
}
|
|
else
|
|
{
|
|
ret = RegSetValueEx( // Write Active Port
|
|
hKeyApp,
|
|
REG_ACTIVEPORT,
|
|
0,
|
|
REG_SZ,
|
|
(CONST LPBYTE) skNewKey.lpszActivePort,
|
|
(lstrlen(skNewKey.lpszActivePort) + 1) *
|
|
sizeof(*skNewKey.lpszActivePort));
|
|
}
|
|
if (ret != ERROR_SUCCESS) // Did open succede?
|
|
return; // No -
|
|
|
|
if (NULL == skNewKey.lpszPort)
|
|
{
|
|
ret = RegSetValueEx( // Write Active Port
|
|
hKeyApp,
|
|
REG_PORT,
|
|
0,
|
|
REG_SZ,
|
|
(CONST LPBYTE) TEXT(""),
|
|
1 * sizeof(*skNewKey.lpszPort)); // size of one char, the term null
|
|
}
|
|
else
|
|
{
|
|
ret = RegSetValueEx( // Write Active Port
|
|
hKeyApp,
|
|
REG_PORT,
|
|
0,
|
|
REG_SZ,
|
|
(CONST LPBYTE)skNewKey.lpszPort,
|
|
(lstrlen(skNewKey.lpszPort) + 1) * sizeof(*skNewKey.lpszPort));
|
|
}
|
|
|
|
if (ret != ERROR_SUCCESS) // Did open succede?
|
|
return; // No -
|
|
|
|
ret = RegSetValueEx // Write Active Port
|
|
(
|
|
hKeyApp,
|
|
REG_BAUD,
|
|
0,REG_DWORD,
|
|
(CONST LPBYTE) &skNewKey.iBaudRate,
|
|
sizeof(skNewKey.iBaudRate)
|
|
);
|
|
|
|
if (ret != ERROR_SUCCESS) // Did open succede?
|
|
return; // No -
|
|
}
|
|
|
|
/*---------------------------------------------------------------
|
|
*
|
|
* FUNCTION void GetRegistryValues()
|
|
*
|
|
* TYPE Global
|
|
*
|
|
* PURPOSE Reads the values in the SerialKeys structure to
|
|
* the Registry.
|
|
*
|
|
* INPUTS None
|
|
*
|
|
* RETURNS None
|
|
*
|
|
*---------------------------------------------------------------*/
|
|
static void GetRegistryValues()
|
|
{
|
|
long lRet;
|
|
DWORD dwType;
|
|
DWORD cbData;
|
|
|
|
DBPRINTF(TEXT(" GetRegistryValues()\r\n"));
|
|
|
|
skNewKey.dwFlags = 0;
|
|
cbData = sizeof(skNewKey.dwFlags);
|
|
lRet = RegQueryValueEx(
|
|
hKeyApp,
|
|
REG_FLAGS,
|
|
0,&dwType,
|
|
(LPBYTE)&skNewKey.dwFlags,
|
|
&cbData);
|
|
|
|
skNewKey.dwFlags |= SERKF_AVAILABLE;
|
|
|
|
if (NULL != skNewKey.lpszActivePort)
|
|
{
|
|
cbData = MAX_PATH * sizeof(*skNewKey.lpszActivePort);
|
|
lRet = RegQueryValueEx(
|
|
hKeyApp,
|
|
REG_ACTIVEPORT,
|
|
0,&dwType,
|
|
(LPBYTE)skNewKey.lpszActivePort,
|
|
&cbData);
|
|
|
|
skNewKey.lpszActivePort[ MAX_PATH - 1 ] = '\0';
|
|
if (lRet != ERROR_SUCCESS || dwType != REG_SZ)
|
|
{
|
|
lstrcpy(skNewKey.lpszActivePort, TEXT("COM1"));
|
|
}
|
|
}
|
|
|
|
if (NULL != skNewKey.lpszPort)
|
|
{
|
|
cbData = MAX_PATH * sizeof(*skNewKey.lpszPort);
|
|
lRet = RegQueryValueEx( // Write Active Port
|
|
hKeyApp,
|
|
REG_PORT,
|
|
0,&dwType,
|
|
(LPBYTE)skNewKey.lpszPort,
|
|
&cbData);
|
|
|
|
skNewKey.lpszActivePort[ MAX_PATH - 1 ] = '\0';
|
|
if (lRet != ERROR_SUCCESS || dwType != REG_SZ)
|
|
{
|
|
lstrcpy(skNewKey.lpszPort, TEXT("COM1"));
|
|
}
|
|
}
|
|
|
|
cbData = sizeof(skNewKey.iBaudRate);
|
|
lRet = RegQueryValueEx( // Write Active Port
|
|
hKeyApp,
|
|
REG_BAUD,
|
|
0,&dwType,
|
|
(LPBYTE)&skNewKey.iBaudRate,
|
|
&cbData);
|
|
|
|
if (ERROR_SUCCESS != lRet)
|
|
{
|
|
skNewKey.iBaudRate = 300;
|
|
}
|
|
|
|
}
|