Author: gedmurphy
Date: Wed Nov 26 19:46:26 2014
New Revision: 65495

URL: http://svn.reactos.org/svn/reactos?rev=65495&view=rev
Log:
[DEVICE_MANAGER]
- On refresh, recurse the tree and delete all the Device Ids attached to each 
node
- Fix SAL and a few missing comments

Modified:
    trunk/reactos/base/applications/mscutils/devmgmt_new/DeviceView.cpp
    trunk/reactos/base/applications/mscutils/devmgmt_new/DeviceView.h
    trunk/reactos/base/applications/mscutils/devmgmt_new/Devices.cpp
    trunk/reactos/base/applications/mscutils/devmgmt_new/Devices.h
    trunk/reactos/base/applications/mscutils/devmgmt_new/devmgmt_new.sln

Modified: trunk/reactos/base/applications/mscutils/devmgmt_new/DeviceView.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/devmgmt_new/DeviceView.cpp?rev=65495&r1=65494&r2=65495&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/devmgmt_new/DeviceView.cpp 
[iso-8859-1] (original)
+++ trunk/reactos/base/applications/mscutils/devmgmt_new/DeviceView.cpp 
[iso-8859-1] Wed Nov 26 19:46:26 2014
@@ -95,6 +95,8 @@
 BOOL
 CDeviceView::Uninitialize()
 {
+    EmptyDeviceView();
+
     (VOID)m_Devices->Uninitialize();
 
     return TRUE;
@@ -186,12 +188,8 @@
 {
     CDeviceView *This = (CDeviceView *)Param;
 
-    /* Check if there are any items in the tree */
-    if (TreeView_GetRoot(This->m_hTreeView) != NULL)
-    {
-        /* Delete all the items */
-        (VOID)TreeView_DeleteAllItems(This->m_hTreeView);
-    }
+    /* Clear any existing data */
+    This->EmptyDeviceView();
 
     /* Reset the tree root */
     This->m_hTreeRoot = NULL;
@@ -515,3 +513,66 @@
 
     return TreeView_InsertItem(m_hTreeView, &tvins);
 }
+
+VOID
+CDeviceView::RecurseDeviceView(
+    _In_ HTREEITEM hParentItem
+    )
+{
+    HTREEITEM hItem;
+    TVITEMW tvItem;
+
+    /* Check if this node has any children */
+    hItem = TreeView_GetChild(m_hTreeView, hParentItem);
+    if (hItem == NULL) return;
+
+    /* The lParam contains the device id */
+    tvItem.hItem = hItem;
+    tvItem.mask = TVIF_PARAM;
+
+    if (TreeView_GetItem(m_hTreeView, &tvItem) &&
+        tvItem.lParam != NULL)
+    {
+        /* Free the device id */
+        HeapFree(GetProcessHeap(), 0, (LPVOID)tvItem.lParam);
+    }
+
+    /* This node may have its own children */
+    RecurseDeviceView(hItem);
+
+    for (;;)
+    {
+        /* Get the next item at this level */
+        hItem = TreeView_GetNextSibling(m_hTreeView, hItem);
+        if (hItem == NULL) break;
+
+        tvItem.hItem = hItem;
+        tvItem.mask = TVIF_PARAM;
+
+        if (TreeView_GetItem(m_hTreeView, &tvItem))
+        {
+            if (tvItem.lParam != NULL)
+                HeapFree(GetProcessHeap(), 0, (LPVOID)tvItem.lParam);
+        }
+
+        /* This node may have its own children */
+        RecurseDeviceView(hItem);
+    }
+}
+
+
+VOID
+CDeviceView::EmptyDeviceView()
+{
+    HTREEITEM hItem;
+
+    /* Check if there are any items in the tree */
+    hItem = TreeView_GetRoot(m_hTreeView);
+    if (hItem == NULL) return;
+
+    /* Free all the Device Ids */
+    RecurseDeviceView(hItem);
+
+    /* Delete all the items */
+    (VOID)TreeView_DeleteAllItems(m_hTreeView);
+}

Modified: trunk/reactos/base/applications/mscutils/devmgmt_new/DeviceView.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/devmgmt_new/DeviceView.h?rev=65495&r1=65494&r2=65495&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/devmgmt_new/DeviceView.h   
[iso-8859-1] (original)
+++ trunk/reactos/base/applications/mscutils/devmgmt_new/DeviceView.h   
[iso-8859-1] Wed Nov 26 19:46:26 2014
@@ -81,5 +81,12 @@
         _In_ INT DevImage,
         _In_ UINT OverlayImage
         );
+
+    VOID RecurseDeviceView(
+        _In_ HTREEITEM hParentItem
+        );
+
+    VOID EmptyDeviceView(
+        );
 };
 

Modified: trunk/reactos/base/applications/mscutils/devmgmt_new/Devices.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/devmgmt_new/Devices.cpp?rev=65495&r1=65494&r2=65495&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/devmgmt_new/Devices.cpp    
[iso-8859-1] (original)
+++ trunk/reactos/base/applications/mscutils/devmgmt_new/Devices.cpp    
[iso-8859-1] Wed Nov 26 19:46:26 2014
@@ -11,6 +11,9 @@
 #include "devmgmt.h"
 #include "Devices.h"
 
+
+/* PUBLIC METHODS *****************************************/
+
 CDevices::CDevices(void) :
     m_bInitialized(FALSE),
     m_RootImageIndex(-1)
@@ -133,7 +136,7 @@
     _In_ DEVINST Device,
     _Out_writes_(DeviceNameSize) LPWSTR DeviceName,
     _In_ DWORD DeviceNameSize,
-    _Out_ LPWSTR *DeviceId,
+    _Outptr_ LPWSTR *DeviceId,
     _Out_ PINT ClassImage,
     _Out_ LPBOOL IsUnknown,
     _Out_ LPBOOL IsHidden
@@ -146,6 +149,7 @@
 
     *DeviceId = NULL;
 
+    /* Get the length of the device id string */
     cr = CM_Get_Device_ID_Size(&ulLength, Device, 0);
     if (cr == CR_SUCCESS)
     {
@@ -166,6 +170,7 @@
         }
     }
 
+    /* Make sure we got the string */
     if (*DeviceId == NULL)
         return FALSE;
 
@@ -180,8 +185,10 @@
                                            0);
     if (cr == CR_SUCCESS)
     {
+        /* Convert the string to a proper guid */
         CLSIDFromString(ClassGuidString, &ClassGuid);
 
+        /* Check if this is a hidden device */
         if ((IsEqualGUID(ClassGuid, GUID_DEVCLASS_LEGACYDRIVER) ||
             IsEqualGUID(ClassGuid, GUID_DEVCLASS_VOLUME)))
         {
@@ -195,13 +202,12 @@
         *IsUnknown = TRUE;
     }
 
-
+    /* Get the image for the class this device is in */
     SetupDiGetClassImageIndex(&m_ImageListData,
                               &ClassGuid,
                               ClassImage);
 
-    
-
+    /* Get the description for the device */
     ulLength = DeviceNameSize * sizeof(WCHAR);
     cr = CM_Get_DevNode_Registry_PropertyW(Device,
                                           CM_DRP_FRIENDLYNAME,
@@ -221,6 +227,7 @@
 
     }
 
+    /* Cleanup if something failed */
     if (cr != CR_SUCCESS)
     {
         HeapFree(GetProcessHeap(), 0, *DeviceId);
@@ -346,7 +353,7 @@
     _Out_ LPBOOL MoreItems,
     _Out_ LPTSTR DeviceName,
     _In_ DWORD DeviceNameSize,
-    _Out_ LPTSTR *DeviceId
+    _Outptr_ LPTSTR *DeviceId
     )
 {
     SP_DEVINFO_DATA DeviceInfoData;

Modified: trunk/reactos/base/applications/mscutils/devmgmt_new/Devices.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/devmgmt_new/Devices.h?rev=65495&r1=65494&r2=65495&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/devmgmt_new/Devices.h      
[iso-8859-1] (original)
+++ trunk/reactos/base/applications/mscutils/devmgmt_new/Devices.h      
[iso-8859-1] Wed Nov 26 19:46:26 2014
@@ -42,7 +42,7 @@
         _In_ DEVINST Device,
         _Out_writes_(DeviceNameSize) LPTSTR DeviceName,
         _In_ DWORD DeviceNameSize,
-        _Out_ LPTSTR *DeviceId,
+        _Outptr_ LPTSTR *DeviceId,
         _Out_ PINT ClassImage,
         _Out_ LPBOOL IsUnknown,
         _Out_ LPBOOL IsHidden
@@ -67,7 +67,7 @@
         _Out_ LPBOOL MoreItems,
         _Out_writes_(DeviceNameSize)  LPTSTR DeviceName,
         _In_ DWORD DeviceNameSize,
-        _Out_ LPTSTR *DeviceId
+        _Outptr_ LPTSTR *DeviceId
         );
 
     BOOL GetDeviceStatus(

Modified: trunk/reactos/base/applications/mscutils/devmgmt_new/devmgmt_new.sln
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/devmgmt_new/devmgmt_new.sln?rev=65495&r1=65494&r2=65495&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/devmgmt_new/devmgmt_new.sln        
[iso-8859-1] (original)
+++ trunk/reactos/base/applications/mscutils/devmgmt_new/devmgmt_new.sln        
[iso-8859-1] Wed Nov 26 19:46:26 2014
@@ -26,7 +26,4 @@
        GlobalSection(SolutionProperties) = preSolution
                HideSolutionNode = FALSE
        EndGlobalSection
-       GlobalSection(Performance) = preSolution
-               HasPerformanceSessions = true
-       EndGlobalSection
 EndGlobal


Reply via email to