Author: ekohl
Date: Thu Feb 18 21:18:24 2010
New Revision: 45613
URL:
http://svn.reactos.org/svn/reactos?rev=45613&view=rev
Log:
[DEVMGR]
Display some more device properties.
Modified:
trunk/reactos/dll/win32/devmgr/advprop.c
trunk/reactos/dll/win32/devmgr/misc.c
Modified: trunk/reactos/dll/win32/devmgr/advprop.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/devmgr/advprop.c…
==============================================================================
--- trunk/reactos/dll/win32/devmgr/advprop.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/devmgr/advprop.c [iso-8859-1] Thu Feb 18 21:18:24 2010
@@ -30,6 +30,9 @@
#define NDEBUG
#include <debug.h>
+
+/* setupapi */
+DWORD WINAPI pSetupGuidFromString(PCWSTR pString, LPGUID lpGUID);
typedef INT_PTR (WINAPI *PPROPERTYSHEETW)(LPCPROPSHEETHEADERW);
typedef HPROPSHEETPAGE (WINAPI *PCREATEPROPERTYSHEETPAGEW)(LPCPROPSHEETPAGEW);
@@ -898,6 +901,176 @@
static VOID
+DisplayDeviceCoinstallers(IN PDEVADVPROP_INFO dap,
+ IN HWND hwndListView)
+{
+ HDEVINFO DeviceInfoSet;
+ PSP_DEVINFO_DATA DeviceInfoData;
+ HKEY hKey;
+ DWORD dwSize;
+ DWORD dwType;
+ LPBYTE lpBuffer;
+ LPWSTR lpStr;
+ INT index;
+ INT len;
+
+ if (dap->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE)
+ {
+ DeviceInfoSet = dap->CurrentDeviceInfoSet;
+ DeviceInfoData = &dap->CurrentDeviceInfoData;
+ }
+ else
+ {
+ DeviceInfoSet = dap->DeviceInfoSet;
+ DeviceInfoData = &dap->DeviceInfoData;
+ }
+
+ hKey = SetupDiOpenDevRegKey(DeviceInfoSet,
+ DeviceInfoData,
+ DICS_FLAG_GLOBAL,
+ 0,
+ DIREG_DRV,
+ KEY_QUERY_VALUE);
+ if (hKey != INVALID_HANDLE_VALUE)
+ {
+ dwSize = 0;
+ if (RegQueryValueEx(hKey,
+ L"CoInstallers32",
+ NULL,
+ &dwType,
+ NULL,
+ &dwSize) == ERROR_SUCCESS &&
+ dwSize > 0)
+ {
+
+ lpBuffer = HeapAlloc(GetProcessHeap(),
+ HEAP_ZERO_MEMORY,
+ dwSize);
+
+ RegQueryValueEx(hKey,
+ L"CoInstallers32",
+ NULL,
+ &dwType,
+ lpBuffer,
+ &dwSize);
+
+ lpStr = (LPWSTR)lpBuffer;
+ index = 0;
+ while (*lpStr != 0)
+ {
+ len = wcslen(lpStr) + 1;
+
+ SetListViewText(hwndListView, index, lpStr);
+
+ lpStr += len;
+ index++;
+ }
+
+ HeapFree(GetProcessHeap(),
+ 0,
+ lpBuffer);
+ }
+
+ RegCloseKey(hKey);
+ }
+}
+
+
+static VOID
+DisplayClassProperties(IN PDEVADVPROP_INFO dap,
+ IN HWND hwndListView,
+ IN LPWSTR lpProperty)
+{
+ HDEVINFO DeviceInfoSet;
+ PSP_DEVINFO_DATA DeviceInfoData;
+ WCHAR szClassGuid[45];
+ DWORD dwSize;
+ DWORD dwType;
+ HKEY hKey;
+ GUID ClassGuid;
+ LPBYTE lpBuffer;
+ LPWSTR lpStr;
+ INT index = 0;
+ INT len;
+
+ if (dap->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE)
+ {
+ DeviceInfoSet = dap->CurrentDeviceInfoSet;
+ DeviceInfoData = &dap->CurrentDeviceInfoData;
+ }
+ else
+ {
+ DeviceInfoSet = dap->DeviceInfoSet;
+ DeviceInfoData = &dap->DeviceInfoData;
+ }
+
+ dwSize = 45 * sizeof(WCHAR);
+ if (!SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
+ DeviceInfoData,
+ SPDRP_CLASSGUID,
+ &dwType,
+ (LPBYTE)szClassGuid,
+ dwSize,
+ &dwSize))
+ return;
+
+ pSetupGuidFromString(szClassGuid,
+ &ClassGuid);
+
+ hKey = SetupDiOpenClassRegKey(&ClassGuid,
+ KEY_QUERY_VALUE);
+ if (hKey != INVALID_HANDLE_VALUE)
+ {
+ dwSize = 0;
+ if (RegQueryValueEx(hKey,
+ lpProperty,
+ NULL,
+ &dwType,
+ NULL,
+ &dwSize) == ERROR_SUCCESS &&
+ dwSize > 0)
+ {
+ lpBuffer = HeapAlloc(GetProcessHeap(),
+ HEAP_ZERO_MEMORY,
+ dwSize);
+
+ RegQueryValueEx(hKey,
+ lpProperty,
+ NULL,
+ &dwType,
+ lpBuffer,
+ &dwSize);
+
+ if (dwType == REG_SZ)
+ {
+ SetListViewText(hwndListView, 0, (LPWSTR)lpBuffer);
+ }
+ else if (dwType == REG_MULTI_SZ)
+ {
+ lpStr = (LPWSTR)lpBuffer;
+ index = 0;
+ while (*lpStr != 0)
+ {
+ len = wcslen(lpStr) + 1;
+
+ SetListViewText(hwndListView, index, lpStr);
+
+ lpStr += len;
+ index++;
+ }
+ }
+
+ HeapFree(GetProcessHeap(),
+ 0,
+ lpBuffer);
+ }
+
+ RegCloseKey(hKey);
+ }
+}
+
+
+static VOID
DisplayDeviceProperties(IN PDEVADVPROP_INFO dap,
IN HWND hwndComboBox,
IN HWND hwndListView)
@@ -992,20 +1165,45 @@
SPDRP_LOWERFILTERS);
break;
+ case 15: /* Class Upper Filters */
+ DisplayClassProperties(dap,
+ hwndListView,
+ L"UpperFilters");
+ break;
+
+ case 16: /* Class Lower Filters */
+ DisplayClassProperties(dap,
+ hwndListView,
+ L"LowerFilters");
+ break;
+
+ case 17: /* Class Installer */
+ DisplayClassProperties(dap,
+ hwndListView,
+ L"Installer32");
+ break;
+
#if 0
- case 15: /* Class Upper Filters */
- break;
-
- case 16: /* Class Lower Filters */
- break;
-
- case 17: /* Class Installer */
- break;
-
case 18: /* Class Coinstaller */
break;
+#endif
case 19: /* Device Coinstaller */
+ DisplayDeviceCoinstallers(dap,
+ hwndListView);
+ break;
+
+#if 0
+ case 20: /* Firmware Revision */
+ break;
+
+ case 21: /* Current Power State */
+ break;
+
+ case 20: /* Power Capabilities */
+ break;
+
+ case 21: /* Power State Mappings */
break;
#endif
Modified: trunk/reactos/dll/win32/devmgr/misc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/devmgr/misc.c?re…
==============================================================================
--- trunk/reactos/dll/win32/devmgr/misc.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/devmgr/misc.c [iso-8859-1] Thu Feb 18 21:18:24 2010
@@ -1135,7 +1135,7 @@
WINAPI
DllMain(IN HINSTANCE hinstDLL,
IN DWORD dwReason,
- IN LPVOID lpvReserved)
+ IN LPVOID lpvReserved)
{
switch (dwReason)
{