Beispiel #1
0
STDMETHODIMP CMELCommand::put_PortName(BSTR newVal)
{
	CAtlString strPortName(newVal);
	if (m_strPortName != strPortName)
	{
		Disconnect();
		m_strPortName = strPortName;
	}
	return S_OK;
}
Beispiel #2
0
void CEnumSerial::SearchPnpKeyW9x(HKEY hkPnp, BOOL bUsbDevice, CArray<SSerInfo,SSerInfo&> &asi)
{
    // Enumerate the subkeys of the given PNP key, looking for values with
    // the name "PORTNAME"
    // First, open HKLM\Enum
    HKEY hkSubPnp = NULL;

    try
    {
        // Enumerate the subkeys of HKLM\Enum\*\PNP050[01]
        TCHAR acSubPnp[256];
        DWORD dwSubPnpIndex = 0;
        DWORD dwSize = sizeof(acSubPnp)/sizeof(TCHAR);
        while (RegEnumKeyEx(hkPnp, dwSubPnpIndex++, acSubPnp, &dwSize,
                            NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
        {
            HKEY hkSubPnp = NULL;
            if (RegOpenKeyEx(hkPnp, acSubPnp, 0, KEY_READ,
                             &hkSubPnp) != ERROR_SUCCESS)
                throw CString(_T("Could not read from HKLM\\Enum\\...\\"))
                + acSubPnp;

            // Look for the PORTNAME value
            char acValue[128];
            dwSize = sizeof(acValue);
            if (RegQueryValueEx(hkSubPnp, _T("PORTNAME"), NULL, NULL, (BYTE*)acValue,
                                &dwSize) == ERROR_SUCCESS)
            {
                CString strPortName(acValue);

                // Got the portname value. Look for a friendly name.
                CString strFriendlyName;
                dwSize = sizeof(acValue);
                if (RegQueryValueEx(hkSubPnp, _T("FRIENDLYNAME"), NULL, NULL, (BYTE*)acValue,
                                    &dwSize) == ERROR_SUCCESS)
                    strFriendlyName = acValue;

                // Prepare an entry for the output array.
                SSerInfo si;
                si.strDevPath = CString(_T("\\\\.\\")) + strPortName;
                si.strPortName = strPortName;
                si.strFriendlyName = strFriendlyName;
                si.bUsbDevice = bUsbDevice;

                // Overwrite duplicates.
                BOOL bDup = FALSE;
                for (int ii=0; ii<asi.GetSize() && !bDup; ii++)
                {
                    if (asi[ii].strPortName == strPortName)
                    {
                        bDup = TRUE;
                        asi[ii] = si;
                    }
                }
                if (!bDup)
                {
                    // Add an entry to the array
                    asi.Add(si);
                }
            }

            RegCloseKey(hkSubPnp);
            hkSubPnp = NULL;
            dwSize = sizeof(acSubPnp)/sizeof(TCHAR);  // restore the buffer size
        }
    }
    catch (CString strError)
    {
        if (hkSubPnp != NULL)
            RegCloseKey(hkSubPnp);
        throw strError;
    }
}