windows-nt/Source/XPSP1/NT/enduser/troubleshoot/control/ocxglobals.cpp
2020-09-26 16:20:57 +08:00

83 lines
1.9 KiB
C++

//
// MODULE: OcxGlobals.cpp
//
// PURPOSE: Global functions that are handy to have.
//
// PROJECT: Local Troubleshooter Launcher for the Device Manager
//
// COMPANY: Saltmine Creative, Inc. (206)-633-4743 support@saltmine.com
//
// AUTHOR: Richard Meadows
//
// ORIGINAL DATE: 2-26-98
//
//
// Version Date By Comments
//--------------------------------------------------------------------
// V0.1 - RM Original
// V0.3 04/09/98 JM/OK+ Local Version for NT5
///////////////////////
#include "stdafx.h"
#include "..\launcher\server\ComGlobals.h"
bool BSTRToTCHAR(LPTSTR szChar, BSTR bstr, int CharBufSize)
{
int x = 0;
while(x < CharBufSize)
{
szChar[x] = (TCHAR) bstr[x];
if (NULL == szChar[x])
break;
x++;
}
return x < CharBufSize;
}
bool ReadRegSZ(HKEY hRootKey, LPCTSTR szKey, LPCTSTR szValue, LPTSTR szBuffer, DWORD *pdwBufSize)
{
HKEY hKey;
DWORD dwType = REG_SZ;
DWORD dwBufSize = *pdwBufSize;
LPTSTR szUnExpanded = new TCHAR[dwBufSize];
if (NULL == szUnExpanded)
return false;
__try
{
if(ERROR_SUCCESS != RegOpenKeyEx(hRootKey, szKey, NULL, KEY_READ, &hKey))
{
////Delete before you return.
if (NULL != szUnExpanded)
delete [] szUnExpanded;
return false;
}
if (ERROR_SUCCESS != RegQueryValueEx(hKey, szValue, NULL, &dwType,
(PBYTE) szUnExpanded, pdwBufSize))
{
RegCloseKey(hKey);
return false;
}
RegCloseKey(hKey);
if (REG_EXPAND_SZ == dwType || dwType == REG_SZ) // NT 5.0 beta bug requires all strings to be expanded.
{
DWORD dwBytesUsed;
dwBytesUsed = ExpandEnvironmentStrings(szUnExpanded, szBuffer, dwBufSize); // The value returned by ExpandEnviromentStrings is larger than the required size.
if (0 == dwBytesUsed)
return false;
*pdwBufSize = dwBytesUsed;
if (dwBytesUsed > dwBufSize)
return false;
}
else
{
_tcsncpy(szBuffer, szUnExpanded, dwBufSize);
}
}
__finally
{
if (NULL != szUnExpanded)
delete [] szUnExpanded;
}
return true;
}