Author: ekohl
Date: Wed May 25 22:14:40 2011
New Revision: 51916

URL: http://svn.reactos.org/svn/reactos?rev=51916&view=rev
Log:
[MSPORTS]
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.

Modified:
    trunk/reactos/dll/win32/msports/classinst.c

Modified: trunk/reactos/dll/win32/msports/classinst.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msports/classinst.c?rev=51916&r1=51915&r2=51916&view=diff
==============================================================================
--- trunk/reactos/dll/win32/msports/classinst.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msports/classinst.c [iso-8859-1] Wed May 25 
22:14:40 2011
@@ -246,6 +246,7 @@
     WCHAR szPortName[5];
     DWORD dwPortNumber;
     HCOMDB hComDB = HCOMDB_INVALID_HANDLE_VALUE;
+    HKEY hKey;
 
     TRACE("InstallSerialPort(%p, %p)\n",
           DeviceInfoSet, DeviceInfoData);
@@ -253,10 +254,12 @@
     /* Open the com port database */
     ComDBOpen(&hComDB);
 
+    /* Determine the port number from its resources ... */
     dwPortNumber = GetSerialPortNumber(DeviceInfoSet,
                                        DeviceInfoData);
     if (dwPortNumber != 0)
     {
+        /* ... and claim the port number in the database */
         ComDBClaimPort(hComDB,
                        dwPortNumber,
                        FALSE,
@@ -264,16 +267,38 @@
     }
     else
     {
+        /* ... or claim the next free port number */
         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);
 
+    /* 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))
@@ -281,6 +306,7 @@
         return GetLastError();
     }
 
+    /* Get the device description... */
     if (SetupDiGetDeviceRegistryPropertyW(DeviceInfoSet,
                                           DeviceInfoData,
                                           SPDRP_DEVICEDESC,
@@ -289,6 +315,7 @@
                                           256 * sizeof(WCHAR),
                                           NULL))
     {
+        /* ... and use it to build a new friendly name */
         swprintf(szFriendlyName,
                  L"%s (%s)",
                  szDeviceDescription,
@@ -296,6 +323,7 @@
     }
     else
     {
+        /* ... or build a generic friendly name */
         swprintf(szFriendlyName,
                  L"Serial Port (%s)",
                  szPortName);


Reply via email to