您现在的位置: 软界网软界问答软件开发VC/VC.NET/MFC > 问题显示
我要提问    
提示:提问和回答别人的问题均可赢得积分
加入收藏我要投诉 我来回答
此问题已经被浏览73次,收藏:0次. 所属类别:[VC/VC.NET/MFC]
问题:天啊,我的程序究竟有多大的漏洞,单单换了位置就改变了数值。我需要走多远才能可以写程序""?
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) 提问人:软界网友 我来回答
相关问题
关键字: strKeyValue,Printers,amp,lpctText,keyName1,dwKeyValueLength,ERROR_SUCCESS,hOpenKey2,hOpenKey1,szDevice, lResult, ASSERT, wc,dwKeyValueType, wsprintf,szOutput
我来回答
验证码