[ros-diffs] [weiden] 19800: handle device updates in the advanced property pages and refresh the information

weiden at svn.reactos.com weiden at svn.reactos.com
Thu Dec 1 18:23:37 CET 2005


handle device updates in the advanced property pages and refresh the
information
Modified: trunk/reactos/lib/devmgr/advprop.c
Modified: trunk/reactos/lib/devmgr/hwpage.c
Modified: trunk/reactos/lib/devmgr/precomp.h
  _____  

Modified: trunk/reactos/lib/devmgr/advprop.c
--- trunk/reactos/lib/devmgr/advprop.c	2005-12-01 17:08:52 UTC (rev
19799)
+++ trunk/reactos/lib/devmgr/advprop.c	2005-12-01 17:23:26 UTC (rev
19800)
@@ -51,6 +51,8 @@

     BOOL DeviceEnabled;
     WCHAR szDevName[255];
     WCHAR szTemp[255];
+    WCHAR szDeviceID[1];
+    /* struct may be dynamically expanded here! */
 } DEVADVPROP_INFO, *PDEVADVPROP_INFO;
 
 
@@ -188,11 +190,25 @@
 
 static VOID
 UpdateDevInfo(IN HWND hwndDlg,
-              IN PDEVADVPROP_INFO dap)
+              IN PDEVADVPROP_INFO dap,
+              IN BOOL ReOpenDevice)
 {
     HICON hIcon;
     HWND hDevUsage;
 
+    if (ReOpenDevice)
+    {
+        /* note, we ignore the fact that SetupDiOpenDeviceInfo could
fail here,
+           in case of failure we're still going to query information
from it even
+           though those calls are going to fail. But they return
readable strings
+           even in that case. */
+        SetupDiOpenDeviceInfo(dap->DeviceInfoSet,
+                              dap->szDeviceID,
+                              hwndDlg,
+                              0,
+                              dap->DeviceInfoData);
+    }
+
     /* get the device name */
     if (GetDeviceDescriptionString(dap->DeviceInfoSet,
                                    dap->DeviceInfoData,
@@ -367,7 +383,8 @@
                                      (DWORD_PTR)dap);
 
                     UpdateDevInfo(hwndDlg,
-                                  dap);
+                                  dap,
+                                  FALSE);
                 }
                 Ret = TRUE;
                 break;
@@ -377,7 +394,8 @@
             {
                 /* FIXME - don't call UpdateDevInfo in all events */
                 UpdateDevInfo(hwndDlg,
-                              dap);
+                              dap,
+                              TRUE);
                 break;
             }
 
@@ -406,6 +424,7 @@
 
 INT_PTR
 DisplayDeviceAdvancedProperties(IN HWND hWndParent,
+                                IN LPCWSTR lpDeviceID  OPTIONAL,
                                 IN HDEVINFO DeviceInfoSet,
                                 IN PSP_DEVINFO_DATA DeviceInfoData,
                                 IN HINSTANCE hComCtl32,
@@ -420,6 +439,7 @@
     PDEVADVPROP_INFO DevAdvPropInfo;
     DWORD PropertySheetType;
     HANDLE hMachine = NULL;
+    DWORD DevIdSize = 0;
     INT_PTR Ret = -1;
 
     /* we don't want to statically link against comctl32, so find the
@@ -440,6 +460,29 @@
         return -1;
     }
 
+    if (lpDeviceID == NULL)
+    {
+        /* find out how much size is needed for the device id */
+        if (SetupDiGetDeviceInstanceId(DeviceInfoSet,
+                                       DeviceInfoData,
+                                       NULL,
+                                       0,
+                                       &DevIdSize))
+        {
+            DPRINT1("SetupDiGetDeviceInterfaceDetail unexpectedly
returned TRUE!\n");
+            return -1;
+        }
+
+        if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
+        {
+            return -1;
+        }
+    }
+    else
+    {
+        DevIdSize = (DWORD)wcslen(lpDeviceID) + 1;
+    }
+
     if (lpMachineName != NULL)
     {
         CONFIGRET cr = CM_Connect_Machine(lpMachineName,
@@ -454,12 +497,27 @@
        "Driver", ... pages */
     DevAdvPropInfo = HeapAlloc(GetProcessHeap(),
                                0,
-                               sizeof(DEVADVPROP_INFO));
+                               FIELD_OFFSET(DEVADVPROP_INFO,
+                                            szDeviceID) +
+                                   (DevIdSize * sizeof(WCHAR)));
     if (DevAdvPropInfo == NULL)
     {
         goto Cleanup;
     }
 
+    if (lpDeviceID == NULL)
+    {
+        /* read the device instance id */
+        if (!SetupDiGetDeviceInstanceId(DeviceInfoSet,
+                                        DeviceInfoData,
+                                        DevAdvPropInfo->szDeviceID,
+                                        DevIdSize,
+                                        NULL))
+        {
+            goto Cleanup;
+        }
+    }
+
     DevAdvPropInfo->DeviceInfoSet = DeviceInfoSet;
     DevAdvPropInfo->DeviceInfoData = DeviceInfoData;
     DevAdvPropInfo->hComCtl32 = hComCtl32;
@@ -630,6 +688,7 @@
                                       &DevInfoData))
             {
                 Ret = DisplayDeviceAdvancedProperties(hWndParent,
+                                                      lpDeviceID,
                                                       hDevInfo,
                                                       &DevInfoData,
                                                       hComCtl32,
  _____  

Modified: trunk/reactos/lib/devmgr/hwpage.c
--- trunk/reactos/lib/devmgr/hwpage.c	2005-12-01 17:08:52 UTC (rev
19799)
+++ trunk/reactos/lib/devmgr/hwpage.c	2005-12-01 17:23:26 UTC (rev
19800)
@@ -135,6 +135,7 @@

     if (HwDevInfo != NULL)
     {
         Ret = DisplayDeviceAdvancedProperties(hpd->hWnd,
+                                              NULL,
 
HwDevInfo->ClassDevInfo->hDevInfo,
                                               &HwDevInfo->DevInfoData,
                                               hpd->hComCtl32,
  _____  

Modified: trunk/reactos/lib/devmgr/precomp.h
--- trunk/reactos/lib/devmgr/precomp.h	2005-12-01 17:08:52 UTC (rev
19799)
+++ trunk/reactos/lib/devmgr/precomp.h	2005-12-01 17:23:26 UTC (rev
19800)
@@ -184,6 +184,7 @@

 
 INT_PTR
 DisplayDeviceAdvancedProperties(IN HWND hWndParent,
+                                IN LPCWSTR lpDeviceID  OPTIONAL,
                                 IN HDEVINFO DeviceInfoSet,
                                 IN PSP_DEVINFO_DATA DeviceInfoData,
                                 IN HINSTANCE hComCtl32,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20051201/62420ddc/attachment.html


More information about the Ros-diffs mailing list