问题:天啊,我的程序究竟有多大的漏洞,单单换了位置就改变了数值。我需要走多远才能可以写程序""?
void CDlgReportPreview::GetPrinterPara(TCHAR *szDevice,TCHAR szDriver,TCHAR *szOutput)
{
HKEY hOpenKey1,hOpenKey2;
long lResult = 0;
DWORD dwKeyValueType = 0;
DWORD dwKeyValueLength = 0;
LPCTSTR keyName2 = L "Printers\\Ports ";
//换了下面用到keyName2位置它的值不是Printers\Ports
CString str;
str.Format(_T( "Driver "));
LPCWSTR lpSubKey = TEXT( "Printers ");
LPCTSTR dwKeyName2 = TEXT( "Port5 ");
CString keyName1(L "Printers\\ ");
// LPTSTR keyName1 = L "Printers\\ ";如果是这样,第二次传入它的会添加了szDevice的值;
TCHAR strKeyValue[500];
CComboBox* pCmbReg = (CComboBox*)GetDlgItem(IDC_COMBO_PRINTER);
UpdateData(TRUE);
CString strText;
LPCTSTR lpctText;
pCmbReg-> GetWindowText(strText);
lpctText = (LPCTSTR)strText;
wsprintf(szDevice,lpctText);
keyName1 += lpctText;
// wcscat(keyName1,lpctText);
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,keyName1,0,0,&hOpenKey1);
ASSERT(lResult == ERROR_SUCCESS);
//read szDevice, szDriver and szOutput value
ZeroMemory(strKeyValue,sizeof(TCHAR)*50);
dwKeyValueLength = sizeof(TCHAR)*50;
lResult = RegQueryValueEx(hOpenKey1,str,0,&dwKeyValueType,
(BYTE*)strKeyValue,&dwKeyValueLength);
ASSERT(lResult == ERROR_SUCCESS);
wsprintf(szDriver,strKeyValue);
RegCloseKey(hOpenKey1);
//LPCTSTR keyName2 = L "Printers\\Ports "; 它返回的值不是我想要的。
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,keyName2,0,0,&hOpenKey2);
ASSERT(lResult == ERROR_SUCCESS);
ZeroMemory(strKeyValue,sizeof(TCHAR)*500);
lResult = RegQueryValueEx(hOpenKey2,dwKeyName2,0,&dwKeyValueType,
(BYTE*)strKeyValue,&dwKeyValueLength);
ASSERT(lResult == ERROR_SUCCESS);
wsprintf(szOutput,strKeyValue);
RegCloseKey(hOpenKey2);
}
提问时间:
2007-1-2 10:47:47 回答次数:
(1) 提问人:
软界网友 我来回答