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.
 
 
 
 
 
 

256 lines
5.7 KiB

/*
* profile.c
*
* win32/win16 utility functions to read and write profile items
* for multimedia tools
*/
#include <windows.h>
#include <windowsx.h>
#include <profile.key>
/*
* read a UINT from the profile, or return default if
* not found.
*/
#ifdef _WIN32
UINT mmGetProfileIntA(LPCSTR appname, LPCSTR valuename, INT uDefault)
{
CHAR achName[MAX_PATH];
HKEY hkey;
DWORD dwType;
INT value = uDefault;
DWORD dwData;
int cbData;
lstrcpyA(achName, KEYNAMEA);
lstrcatA(achName, appname);
if (RegOpenKeyA(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
cbData = sizeof(dwData);
if (RegQueryValueExA(
hkey,
(LPSTR)valuename,
NULL,
&dwType,
(PBYTE) &dwData,
&cbData) == ERROR_SUCCESS) {
if (dwType == REG_DWORD) {
value = (INT)dwData;
}
}
RegCloseKey(hkey);
}
return((UINT)value);
}
UINT
mmGetProfileInt(LPCTSTR appname, LPCTSTR valuename, INT uDefault)
{
TCHAR achName[MAX_PATH];
HKEY hkey;
DWORD dwType;
INT value = uDefault;
DWORD dwData;
int cbData;
lstrcpy(achName, KEYNAME);
lstrcat(achName, appname);
if (RegOpenKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
cbData = sizeof(dwData);
if (RegQueryValueEx(
hkey,
(LPTSTR)valuename,
NULL,
&dwType,
(PBYTE) &dwData,
&cbData) == ERROR_SUCCESS) {
if (dwType == REG_DWORD) {
value = (INT)dwData;
}
}
RegCloseKey(hkey);
}
return((UINT)value);
}
#endif
/*
* write a UINT to the profile, if it is not the
* same as the default or the value already there
*/
#ifdef _WIN32
VOID
mmWriteProfileInt(LPCTSTR appname, LPCTSTR valuename, INT Value)
{
// If we would write the same as already there... return.
if (mmGetProfileInt(appname, valuename, !Value) == (UINT)Value) {
return;
}
{
TCHAR achName[MAX_PATH];
HKEY hkey;
lstrcpy(achName, KEYNAME);
lstrcat(achName, appname);
if (RegCreateKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
RegSetValueEx(
hkey,
valuename,
0,
REG_DWORD,
(PBYTE) &Value,
sizeof(Value)
);
RegCloseKey(hkey);
}
}
}
#else
// For Win16 we use a macro and assume we have been passed a string value
// char ach[12];
//
// wsprintf(ach, "%d", Value);
//
// WriteProfileString(
// appname,
// valuename,
// ach);
}
#endif
/*
* read a string from the profile into pResult.
* result is number of bytes written into pResult
*/
#ifdef _WIN32
DWORD
mmGetProfileStringA(
LPCSTR appname,
LPCSTR valuename,
LPCSTR pDefault,
LPSTR pResult,
int cbResult
)
{
CHAR achName[MAX_PATH];
HKEY hkey;
DWORD dwType;
lstrcpyA(achName, KEYNAMEA);
lstrcatA(achName, appname);
if (RegOpenKeyA(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
cbResult = cbResult * sizeof(TCHAR);
if (RegQueryValueExA(
hkey,
(LPSTR)valuename,
NULL,
&dwType,
(LPBYTE)pResult,
&cbResult) == ERROR_SUCCESS) {
if (dwType == REG_SZ) {
// cbResult is set to the size including null
RegCloseKey(hkey);
return(cbResult - 1);
}
}
RegCloseKey(hkey);
}
// if we got here, we didn't find it, or it was the wrong type - return
// the default string
lstrcpyA(pResult, pDefault);
return(lstrlenA(pDefault));
}
DWORD
mmGetProfileString(
LPCTSTR appname,
LPCTSTR valuename,
LPCTSTR pDefault,
LPTSTR pResult,
int cbResult
)
{
TCHAR achName[MAX_PATH];
HKEY hkey;
DWORD dwType;
lstrcpy(achName, KEYNAME);
lstrcat(achName, appname);
if (RegOpenKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
cbResult = cbResult * sizeof(TCHAR);
if (RegQueryValueEx(
hkey,
(LPTSTR)valuename,
NULL,
&dwType,
(LPBYTE)pResult,
&cbResult) == ERROR_SUCCESS) {
if (dwType == REG_SZ) {
// cbResult is set to the size including null
RegCloseKey(hkey);
return(cbResult/sizeof(TCHAR) - 1);
}
}
RegCloseKey(hkey);
}
// if we got here, we didn't find it, or it was the wrong type - return
// the default string
lstrcpy(pResult, pDefault);
return(lstrlen(pDefault));
}
#endif
/*
* write a string to the profile
*/
#ifdef _WIN32
VOID
mmWriteProfileString(LPCTSTR appname, LPCTSTR valuename, LPCTSTR pData)
{
TCHAR achName[MAX_PATH];
HKEY hkey;
lstrcpy(achName, KEYNAME);
lstrcat(achName, appname);
if (RegCreateKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
if (pData) {
RegSetValueEx(
hkey,
valuename,
0,
REG_SZ,
(LPBYTE)pData,
(lstrlen(pData) + 1) * sizeof(TCHAR)
);
} else {
RegDeleteValue(
hkey,
(LPTSTR)valuename
);
}
RegCloseKey(hkey);
}
}
#endif