From 4cfbdb6f639d06e372b3a079bf5ac751707daa02 Mon Sep 17 00:00:00 2001 From: Ged Murphy Date: Mon, 2 Oct 2006 18:14:58 +0000 Subject: [PATCH] - Only call SetupDiGetClassDevs once for each class, this makes load time 3 times faster although I'm still not happy with it. We may have to enumerate the drivers in the background. - use UINT for 1 bit flags, reduce the width a little and check the menu. svn path=/trunk/; revision=24364 --- reactos/base/applications/devmgmt/En.rc | 2 +- .../base/applications/devmgmt/enumdevices.c | 39 ++++++++++--------- reactos/base/applications/devmgmt/mainwnd.c | 2 +- reactos/base/applications/devmgmt/precomp.h | 2 +- reactos/base/applications/devmgmt/resource.h | 1 + 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/reactos/base/applications/devmgmt/En.rc b/reactos/base/applications/devmgmt/En.rc index abb911d0244..36913e20d75 100644 --- a/reactos/base/applications/devmgmt/En.rc +++ b/reactos/base/applications/devmgmt/En.rc @@ -14,7 +14,7 @@ BEGIN END POPUP "View" BEGIN - MENUITEM "Devices by type", IDC_STATIC + MENUITEM "Devices by type", IDC_DEVBYTYPE, CHECKED MENUITEM "Devices by connection", IDC_STATIC, GRAYED MENUITEM "Resources by type", IDC_STATIC, GRAYED MENUITEM "Resources by connection", IDC_STATIC, GRAYED diff --git a/reactos/base/applications/devmgmt/enumdevices.c b/reactos/base/applications/devmgmt/enumdevices.c index e56bcbf0f43..186befa879c 100644 --- a/reactos/base/applications/devmgmt/enumdevices.c +++ b/reactos/base/applications/devmgmt/enumdevices.c @@ -9,8 +9,9 @@ #include "precomp.h" -SP_CLASSIMAGELIST_DATA ImageListData; +static SP_CLASSIMAGELIST_DATA ImageListData; +static HDEVINFO hDevInfo; static HTREEITEM InsertIntoTreeView(HWND hTV, @@ -60,7 +61,10 @@ EnumDeviceClasses(INT ClassIndex, { /* all classes enumerated */ if(Ret == CR_NO_SUCH_VALUE) + { + hDevInfo = NULL; return -1; + } if (Ret == CR_INVALID_DATA) ; /*FIXME: what should we do here? */ @@ -84,18 +88,23 @@ EnumDeviceClasses(INT ClassIndex, &ClassGuid, ClassImage)) { - /* set the blank icon */ + /* FIXME: can we do this? + * Set the blank icon: IDI_SETUPAPI_BLANK = 41 + * it'll be image 24 in the imagelist */ *ClassImage = 41; } - /* FIXME: do we need this? + /* Get device info for all devices of a particular class */ hDevInfo = SetupDiGetClassDevs(&ClassGuid, 0, NULL, DIGCF_PRESENT); if (hDevInfo == INVALID_HANDLE_VALUE) + { + hDevInfo = NULL; return 0; - */ + } + KeyClass = SetupDiOpenClassRegKeyEx(&ClassGuid, MAXIMUM_ALLOWED, @@ -120,9 +129,6 @@ EnumDeviceClasses(INT ClassIndex, return -3; } - /* FIXME: see above? - SetupDiDestroyDeviceInfoList(hDevInfo); */ - *DevPresent = TRUE; RegCloseKey(KeyClass); @@ -136,7 +142,6 @@ EnumDevices(INT index, TCHAR* DeviceClassName, TCHAR* DeviceName) { - HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD RequiredSize = 0; GUID *guids = NULL; @@ -172,13 +177,6 @@ EnumDevices(INT index, } } -//TimerInfo(_T("IN")); - /* get device info set for our device class */ - hDevInfo = SetupDiGetClassDevs(guids, - 0, - NULL, - DIGCF_PRESENT); -//TimerInfo(_T("OUT")); HeapFree(GetProcessHeap(), 0, guids); if(hDevInfo == INVALID_HANDLE_VALUE) { @@ -198,8 +196,7 @@ EnumDevices(INT index, if (!bRet) { - //no such device: - SetupDiDestroyDeviceInfoList(hDevInfo); + /* no such device */ return -1; } @@ -223,7 +220,6 @@ EnumDevices(INT index, if (!bRet) { /* if the description fails, just give up! */ - SetupDiDestroyDeviceInfoList(hDevInfo); return -5; } } @@ -289,6 +285,13 @@ ListDevicesByType(PMAIN_WND_INFO Info, } while (Ret != -1); + /* kill InfoList initialized in EnumDeviceClasses */ + if (hDevInfo) + { + SetupDiDestroyDeviceInfoList(hDevInfo); + hDevInfo = NULL; + } + if (!TreeView_GetChild(Info->hTreeView, hDevItem)) { diff --git a/reactos/base/applications/devmgmt/mainwnd.c b/reactos/base/applications/devmgmt/mainwnd.c index 7c00e7a5189..91cff10668f 100644 --- a/reactos/base/applications/devmgmt/mainwnd.c +++ b/reactos/base/applications/devmgmt/mainwnd.c @@ -546,7 +546,7 @@ CreateMainWindow(LPCTSTR lpCaption, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, CW_USEDEFAULT, CW_USEDEFAULT, - 650, + 600, 450, NULL, NULL, diff --git a/reactos/base/applications/devmgmt/precomp.h b/reactos/base/applications/devmgmt/precomp.h index beb567afdc7..a23f1bf8f0d 100644 --- a/reactos/base/applications/devmgmt/precomp.h +++ b/reactos/base/applications/devmgmt/precomp.h @@ -28,7 +28,7 @@ typedef struct _MAIN_WND_INFO int nCmdShow; /* status flags */ - BOOL InMenuLoop : 1; + UINT InMenuLoop : 1; } MAIN_WND_INFO, *PMAIN_WND_INFO; diff --git a/reactos/base/applications/devmgmt/resource.h b/reactos/base/applications/devmgmt/resource.h index 283ee63cfa2..ad94561340e 100644 --- a/reactos/base/applications/devmgmt/resource.h +++ b/reactos/base/applications/devmgmt/resource.h @@ -19,6 +19,7 @@ /* menus */ #define IDR_MAINMENU 102 #define IDR_POPUP 103 +#define IDC_DEVBYTYPE 104 /* tooltips */ #define IDS_TOOLTIP_PROP 6000