summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
45b3697)
Store the PortName value in the registry.
Please note that SetupDiCreateDevRegKey and SetupDiOpenDevRegKey are broken because they do not open or create the 'Device Parameters' subkey of a device instance key but the device instance key itself.
svn path=/trunk/; revision=51916
WCHAR szPortName[5];
DWORD dwPortNumber;
HCOMDB hComDB = HCOMDB_INVALID_HANDLE_VALUE;
WCHAR szPortName[5];
DWORD dwPortNumber;
HCOMDB hComDB = HCOMDB_INVALID_HANDLE_VALUE;
TRACE("InstallSerialPort(%p, %p)\n",
DeviceInfoSet, DeviceInfoData);
TRACE("InstallSerialPort(%p, %p)\n",
DeviceInfoSet, DeviceInfoData);
/* Open the com port database */
ComDBOpen(&hComDB);
/* Open the com port database */
ComDBOpen(&hComDB);
+ /* Determine the port number from its resources ... */
dwPortNumber = GetSerialPortNumber(DeviceInfoSet,
DeviceInfoData);
if (dwPortNumber != 0)
{
dwPortNumber = GetSerialPortNumber(DeviceInfoSet,
DeviceInfoData);
if (dwPortNumber != 0)
{
+ /* ... and claim the port number in the database */
ComDBClaimPort(hComDB,
dwPortNumber,
FALSE,
ComDBClaimPort(hComDB,
dwPortNumber,
FALSE,
+ /* ... or claim the next free port number */
ComDBClaimNextFreePort(hComDB,
&dwPortNumber);
}
ComDBClaimNextFreePort(hComDB,
&dwPortNumber);
}
+ /* Build the name of the port device */
swprintf(szPortName, L"COM%u", dwPortNumber);
/* Close the com port database */
if (hComDB != HCOMDB_INVALID_HANDLE_VALUE)
ComDBClose(hComDB);
swprintf(szPortName, L"COM%u", dwPortNumber);
/* Close the com port database */
if (hComDB != HCOMDB_INVALID_HANDLE_VALUE)
ComDBClose(hComDB);
+ /* Set the 'PortName' value */
+ hKey = SetupDiCreateDevRegKeyW(DeviceInfoSet,
+ DeviceInfoData,
+ DICS_FLAG_GLOBAL,
+ 0,
+ DIREG_DEV,
+ NULL,
+ NULL);
+ if (hKey != INVALID_HANDLE_VALUE)
+ {
+ RegSetValueExW(hKey,
+ L"PortName",
+ 0,
+ REG_SZ,
+ (LPBYTE)szPortName,
+ (wcslen(szPortName) + 1) * sizeof(WCHAR));
+
+ RegCloseKey(hKey);
+ }
+
/* Install the device */
if (!SetupDiInstallDevice(DeviceInfoSet,
DeviceInfoData))
/* Install the device */
if (!SetupDiInstallDevice(DeviceInfoSet,
DeviceInfoData))
+ /* Get the device description... */
if (SetupDiGetDeviceRegistryPropertyW(DeviceInfoSet,
DeviceInfoData,
SPDRP_DEVICEDESC,
if (SetupDiGetDeviceRegistryPropertyW(DeviceInfoSet,
DeviceInfoData,
SPDRP_DEVICEDESC,
256 * sizeof(WCHAR),
NULL))
{
256 * sizeof(WCHAR),
NULL))
{
+ /* ... and use it to build a new friendly name */
swprintf(szFriendlyName,
L"%s (%s)",
szDeviceDescription,
swprintf(szFriendlyName,
L"%s (%s)",
szDeviceDescription,
+ /* ... or build a generic friendly name */
swprintf(szFriendlyName,
L"Serial Port (%s)",
szPortName);
swprintf(szFriendlyName,
L"Serial Port (%s)",
szPortName);