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.
 
 
 
 
 
 

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;
}
}