在 RegQueryInfoKey 函数中,它会将错误的结果放入 dwcValues , dwcMaxValueName 和 dwcMaxValueData 值。 dwcValues 是连接了多少个端口,但它还有一个连接数甚至没有连接。
例如,当没有任何关联时,它会显示 dwcValues = 1, dwcMaxValueName = 17, dwcMaxValueData = 10。
如果连接了一个端口,则显示 dwcValues = 2, dwcMaxValueName = 17, dwcMaxValueData = 10.
我想知道为什么会这样,并解决这个问题。
CString CSerialPort::GetPortName()
{
DWORD dwcSubKeys,dwcValues,dwcMaxSubKeyName,dwcMaxValueName,dwcMaxValueData;
dwcSubKeys=dwcValues=dwcMaxSubKeyName=dwcMaxValueName=dwcMaxValueData=0;
DWORD dwSubKeyIndex = 0;
DWORD dwValueIndex = 0;
HKEY hKey = 0;
LONG lStatus = ERROR_SUCCESS;
TCHAR szValueName[255] = {0};
TCHAR szValueData[255] = {0};
lStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\DEVICEMAP\\SERIALCOMM"),0,KEY_READ,&hKey);
if (lStatus == ERROR_SUCCESS) {
RegQueryInfoKey(hKey, NULL, NULL, 0,
&dwcSubKeys, &dwcMaxSubKeyName, NULL,
&dwcValues, &dwcMaxValueName, &dwcMaxValueData,
NULL, NULL);
if (dwcValues != 0) {
do {
DWORD dwcValueName = sizeof(szValueName);
DWORD dwcValueData = sizeof(szValueData);
lStatus = RegEnumValue(hKey, dwValueIndex,
szValueName, &dwcValueName,
NULL, NULL,
(BYTE*)szValueData,
&dwcValueData);
dwValueIndex++;
} while (lStatus == ERROR_SUCCESS);
}
RegCloseKey(hKey);
}
return szValueData;
}