From d9a14b3064ea15f37b60169a2437f411d260d7f9 Mon Sep 17 00:00:00 2001 From: Ged Murphy Date: Wed, 17 Jun 2015 08:38:34 +0000 Subject: [PATCH 1/1] [DEVMGR] - Make sure the device nodes use the latest device status' svn path=/trunk/; revision=68169 --- .../dll/win32/devmgr/devmgmt/DeviceView.cpp | 2 +- reactos/dll/win32/devmgr/devmgmt/Node.cpp | 67 +++++++++++++++++-- 2 files changed, 62 insertions(+), 7 deletions(-) diff --git a/reactos/dll/win32/devmgr/devmgmt/DeviceView.cpp b/reactos/dll/win32/devmgr/devmgmt/DeviceView.cpp index 258055be1c8..f0c3c2d07d0 100644 --- a/reactos/dll/win32/devmgr/devmgmt/DeviceView.cpp +++ b/reactos/dll/win32/devmgr/devmgmt/DeviceView.cpp @@ -34,7 +34,7 @@ struct RefreshThreadData { CDeviceView *This; BOOL ScanForChanges; -BOOL UpdateView; + BOOL UpdateView; }; diff --git a/reactos/dll/win32/devmgr/devmgmt/Node.cpp b/reactos/dll/win32/devmgr/devmgmt/Node.cpp index 2167f83e8ec..94f7732f22e 100644 --- a/reactos/dll/win32/devmgr/devmgmt/Node.cpp +++ b/reactos/dll/win32/devmgr/devmgmt/Node.cpp @@ -75,32 +75,87 @@ CNode::HasProperties() bool CNode::IsHidden() { - return ((m_Status & DN_NO_SHOW_IN_DM) != 0); + CONFIGRET cr; + cr = CM_Get_DevNode_Status_Ex(&m_Status, + &m_ProblemNumber, + m_DevInst, + 0, + NULL); + if (cr == CR_SUCCESS) + { + return ((m_Status & DN_NO_SHOW_IN_DM) != 0); + } + + return false; } bool CNode::CanDisable() { - return (m_NodeType == NodeDevice && ((m_Status & DN_DISABLEABLE) != 0)); + CONFIGRET cr; + cr = CM_Get_DevNode_Status_Ex(&m_Status, + &m_ProblemNumber, + m_DevInst, + 0, + NULL); + if (cr == CR_SUCCESS) + { + return (m_NodeType == NodeDevice && ((m_Status & DN_DISABLEABLE) != 0)); + } + + return false; } bool CNode::IsDisabled() { - return ((m_ProblemNumber & (CM_PROB_DISABLED | CM_PROB_HARDWARE_DISABLED)) != 0); + CONFIGRET cr; + cr = CM_Get_DevNode_Status_Ex(&m_Status, + &m_ProblemNumber, + m_DevInst, + 0, + NULL); + if (cr == CR_SUCCESS) + { + return ((m_ProblemNumber & (CM_PROB_DISABLED | CM_PROB_HARDWARE_DISABLED)) != 0); + } + + return false; } bool CNode::IsStarted() { - return ((m_Status & DN_STARTED) != 0); + CONFIGRET cr; + cr = CM_Get_DevNode_Status_Ex(&m_Status, + &m_ProblemNumber, + m_DevInst, + 0, + NULL); + if (cr == CR_SUCCESS) + { + return ((m_Status & DN_STARTED) != 0); + } + + return false; } bool CNode::IsInstalled() { - return ((m_Status & DN_HAS_PROBLEM) != 0 || - (m_Status & (DN_DRIVER_LOADED | DN_STARTED)) != 0); + CONFIGRET cr; + cr = CM_Get_DevNode_Status_Ex(&m_Status, + &m_ProblemNumber, + m_DevInst, + 0, + NULL); + if (cr == CR_SUCCESS) + { + return ((m_Status & DN_HAS_PROBLEM) != 0 || + (m_Status & (DN_DRIVER_LOADED | DN_STARTED)) != 0); + } + + return false; } -- 2.17.1