- support remote device property sheets
- display the device status
Modified: trunk/reactos/lib/devmgr/En.rc
Modified: trunk/reactos/lib/devmgr/advprop.c
Modified: trunk/reactos/lib/devmgr/devmgr.xml
Modified: trunk/reactos/lib/devmgr/hwpage.c
Modified: trunk/reactos/lib/devmgr/misc.c
Modified: trunk/reactos/lib/devmgr/precomp.h
Modified: trunk/reactos/lib/devmgr/resource.h
_____
Modified: trunk/reactos/lib/devmgr/En.rc
--- trunk/reactos/lib/devmgr/En.rc 2005-11-30 14:02:55 UTC (rev
19776)
+++ trunk/reactos/lib/devmgr/En.rc 2005-11-30 16:33:05 UTC (rev
19777)
@@ -11,8 +11,62 @@
IDS_STATUS "Device Status: %1"
IDS_UNKNOWN "Unknown"
IDS_LOCATIONSTR "Location %1!u! (%2)"
+ IDS_DEVCODE " (Code %1!u!)"
END
+STRINGTABLE
+BEGIN
+ IDS_DEV_NO_PROBLEM "This device is working properly."
+ IDS_DEV_NOT_CONFIGURED "CM_PROB_NOT_CONFIGURED"
+ IDS_DEV_OUT_OF_MEMORY "CM_PROB_DEVLOADER_FAILED"
+ IDS_DEV_ENTRY_IS_WRONG_TYPE "CM_PROB_ENTRY_IS_WRONG_TYPE"
+ IDS_DEV_LACKED_ARBITRATOR "CM_PROB_LACKED_ARBITRATOR"
+ IDS_DEV_BOOT_CONFIG_CONFLICT "CM_PROB_BOOT_CONFIG_CONFLICT"
+ IDS_DEV_FAILED_FILTER "CM_PROB_FAILED_FILTER"
+ IDS_DEV_DEVLOADER_NOT_FOUND "CM_PROB_DEVLOADER_NOT_FOUND"
+ IDS_DEV_INVALID_DATA "CM_PROB_INVALID_DATA"
+ IDS_DEV_FAILED_START "CM_PROB_FAILED_START"
+ IDS_DEV_LIAR "CM_PROB_LIAR"
+ IDS_DEV_NORMAL_CONFLICT "CM_PROB_NORMAL_CONFLICT"
+ IDS_DEV_NOT_VERIFIED "CM_PROB_NOT_VERIFIED"
+ IDS_DEV_NEED_RESTART "CM_PROB_NEED_RESTART"
+ IDS_DEV_REENUMERATION "CM_PROB_REENUMERATION"
+ IDS_DEV_PARTIAL_LOG_CONF "CM_PROB_PARTIAL_LOG_CONF"
+ IDS_DEV_UNKNOWN_RESOURCE "CM_PROB_UNKNOWN_RESOURCE"
+ IDS_DEV_REINSTALL "CM_PROB_REINSTALL"
+ IDS_DEV_REGISTRY "CM_PROB_REGISTRY"
+ IDS_DEV_WILL_BE_REMOVED "CM_PROB_WILL_BE_REMOVED"
+ IDS_DEV_DISABLED "CM_PROB_DISABLED"
+ IDS_DEV_DEVLOADER_NOT_READY "CM_PROB_DEVLOADER_NOT_READY"
+ IDS_DEV_DEVICE_NOT_THERE "CM_PROB_DEVICE_NOT_THERE"
+ IDS_DEV_MOVED "CM_PROB_MOVED"
+ IDS_DEV_TOO_EARLY "CM_PROB_TOO_EARLY"
+ IDS_DEV_NO_VALID_LOG_CONF "CM_PROB_NO_VALID_LOG_CONF"
+ IDS_DEV_FAILED_INSTALL "CM_PROB_FAILED_INSTALL"
+ IDS_DEV_HARDWARE_DISABLED "CM_PROB_HARDWARE_DISABLED"
+ IDS_DEV_CANT_SHARE_IRQ "CM_PROB_CANT_SHARE_IRQ"
+ IDS_DEV_FAILED_ADD "CM_PROB_FAILED_ADD"
+ IDS_DEV_DISABLED_SERVICE "CM_PROB_DISABLED_SERVICE"
+ IDS_DEV_TRANSLATION_FAILED "CM_PROB_TRANSLATION_FAILED"
+ IDS_DEV_NO_SOFTCONFIG "CM_PROB_NO_SOFTCONFIG"
+ IDS_DEV_BIOS_TABLE "CM_PROB_BIOS_TABLE"
+ IDS_DEV_IRQ_TRANSLATION_FAILED "CM_PROB_IRQ_TRANSLATION_FAILED"
+ IDS_DEV_FAILED_DRIVER_ENTRY "CM_PROB_FAILED_DRIVER_ENTRY"
+ IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD
"CM_PROB_DRIVER_FAILED_PRIOR_UNLOAD"
+ IDS_DEV_DRIVER_FAILED_LOAD "CM_PROB_DRIVER_FAILED_LOAD"
+ IDS_DEV_DRIVER_SERVICE_KEY_INVALID
"CM_PROB_DRIVER_SERVICE_KEY_INVALID"
+ IDS_DEV_LEGACY_SERVICE_NO_DEVICES
"CM_PROB_LEGACY_SERVICE_NO_DEVICES"
+ IDS_DEV_DUPLICATE_DEVICE "CM_PROB_DUPLICATE_DEVICE"
+ IDS_DEV_FAILED_POST_START "CM_PROB_FAILED_POST_START"
+ IDS_DEV_HALTED "CM_PROB_HALTED"
+ IDS_DEV_PHANTOM "CM_PROB_PHANTOM"
+ IDS_DEV_SYSTEM_SHUTDOWN "CM_PROB_SYSTEM_SHUTDOWN"
+ IDS_DEV_HELD_FOR_EJECT "CM_PROB_HELD_FOR_EJECT"
+ IDS_DEV_DRIVER_BLOCKED "CM_PROB_DRIVER_BLOCKED"
+ IDS_DEV_REGISTRY_TOO_LARGE "CM_PROB_REGISTRY_TOO_LARGE"
+ IDS_DEV_SETPROPERTIES_FAILED "CM_PROB_SETPROPERTIES_FAILED"
+END
+
IDD_HARDWARE DIALOG DISCARDABLE 0, 0, 300, 400
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION |
DS_SHELLFONT
FONT 8, "MS Shell Dlg"
_____
Modified: trunk/reactos/lib/devmgr/advprop.c
--- trunk/reactos/lib/devmgr/advprop.c 2005-11-30 14:02:55 UTC (rev
19776)
+++ trunk/reactos/lib/devmgr/advprop.c 2005-11-30 16:33:05 UTC (rev
19777)
@@ -39,6 +39,7 @@
HDEVINFO DeviceInfoSet;
PSP_DEVINFO_DATA DeviceInfoData;
HINSTANCE hComCtl32;
+ HANDLE hMachine;
WCHAR szDevName[255];
WCHAR szTemp[255];
} DEVADVPROP_INFO, *PDEVADVPROP_INFO;
@@ -52,6 +53,7 @@
IN LPARAM lParam)
{
PDEVADVPROP_INFO dap;
+ INT_PTR Ret = FALSE;
dap = (PDEVADVPROP_INFO)GetWindowLongPtr(hwndDlg,
DWL_USER);
@@ -120,8 +122,8 @@
}
/* set the device status edit control text */
- if (GetDeviceStatusString(dap->DeviceInfoSet,
- dap->DeviceInfoData,
+ if
(GetDeviceStatusString(dap->DeviceInfoData->DevInst,
+ dap->hMachine,
dap->szTemp,
sizeof(dap->szTemp) /
sizeof(dap->szTemp[0])))
{
@@ -130,6 +132,7 @@
dap->szTemp);
}
}
+ Ret = TRUE;
break;
}
@@ -152,7 +155,7 @@
}
}
- return FALSE;
+ return Ret;
}
@@ -160,9 +163,9 @@
DisplayDeviceAdvancedProperties(IN HWND hWndParent,
IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData,
- IN HINSTANCE hComCtl32)
+ IN HINSTANCE hComCtl32,
+ IN LPCWSTR lpMachineName)
{
- DWORD RegDataType;
PROPSHEETHEADER psh = {0};
PROPSHEETPAGE pspGeneral = {0};
DWORD nPropSheets = 0;
@@ -171,6 +174,8 @@
PCREATEPROPERTYSHEETPAGEW pCreatePropertySheetPageW;
PDESTROYPROPERTYSHEETPAGE pDestroyPropertySheetPage;
PDEVADVPROP_INFO DevAdvPropInfo;
+ DWORD PropertySheetType;
+ HANDLE hMachine = NULL;
UINT nPages = 0;
union
{
@@ -201,6 +206,16 @@
return -1;
}
+ if (lpMachineName != NULL)
+ {
+ CONFIGRET cr = CM_Connect_Machine(lpMachineName,
+ &hMachine);
+ if (cr != CR_SUCCESS)
+ {
+ return -1;
+ }
+ }
+
/* create the internal structure associated with the "General",
"Driver", ... pages */
DevAdvPropInfo = HeapAlloc(GetProcessHeap(),
@@ -208,45 +223,37 @@
sizeof(DEVADVPROP_INFO));
if (DevAdvPropInfo == NULL)
{
- return -1;
+ goto Cleanup;
}
DevAdvPropInfo->DeviceInfoSet = DeviceInfoSet;
DevAdvPropInfo->DeviceInfoData = DeviceInfoData;
DevAdvPropInfo->hComCtl32 = hComCtl32;
+ DevAdvPropInfo->hMachine = hMachine;
DevAdvPropInfo->szDevName[0] = L'\0';
/* get the device name */
- if ((SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
- DeviceInfoData,
- SPDRP_FRIENDLYNAME,
- &RegDataType,
-
(PBYTE)DevAdvPropInfo->szDevName,
-
sizeof(DevAdvPropInfo->szDevName),
- NULL) ||
- SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
- DeviceInfoData,
- SPDRP_DEVICEDESC,
- &RegDataType,
-
(PBYTE)DevAdvPropInfo->szDevName,
-
sizeof(DevAdvPropInfo->szDevName),
- NULL)) &&
- RegDataType == REG_SZ)
+ if (GetDeviceDescriptionString(DeviceInfoSet,
+ DeviceInfoData,
+ DevAdvPropInfo->szDevName,
+ sizeof(DevAdvPropInfo->szDevName) /
sizeof(DevAdvPropInfo->szDevName[0])))
{
- /* FIXME - check string for NULL termination! */
-
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_PROPTITLE;
psh.hwndParent = hWndParent;
psh.pszCaption = DevAdvPropInfo->szDevName;
+ PropertySheetType = lpMachineName != NULL ?
+ DIGCDP_FLAG_REMOTE_ADVANCED :
+ DIGCDP_FLAG_ADVANCED;
+
/* find out how many property sheets we need */
if (SetupDiGetClassDevPropertySheets(DeviceInfoSet,
DeviceInfoData,
&psh,
0,
&nPropSheets,
- DIGCDP_FLAG_ADVANCED) &&
+ PropertySheetType) &&
nPropSheets != 0)
{
DPRINT1("SetupDiGetClassDevPropertySheets unexpectedly
returned TRUE!\n");
@@ -291,7 +298,7 @@
&psh,
nPropSheets,
NULL,
-
DIGCDP_FLAG_ADVANCED))
+ PropertySheetType))
{
goto Cleanup;
}
@@ -343,6 +350,11 @@
0,
DevAdvPropInfo);
+ if (hMachine != NULL)
+ {
+ CM_Disconnect_Machine(hMachine);
+ }
+
return Ret;
}
@@ -380,16 +392,23 @@
HINSTANCE hComCtl32;
INT_PTR Ret = -1;
- /* FIXME - handle remote device properties */
-
- UNREFERENCED_PARAMETER(lpMachineName);
-
/* dynamically load comctl32 */
hComCtl32 = LoadAndInitComctl32();
if (hComCtl32 != NULL)
{
- hDevInfo = SetupDiCreateDeviceInfoList(NULL,
- hWndParent);
+ if (lpMachineName != NULL)
+ {
+ hDevInfo = SetupDiCreateDeviceInfoListEx(NULL,
+ hWndParent,
+ lpMachineName,
+ NULL);
+ }
+ else
+ {
+ hDevInfo = SetupDiCreateDeviceInfoList(NULL,
+ hWndParent);
+ }
+
if (hDevInfo != INVALID_HANDLE_VALUE)
{
DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
@@ -402,7 +421,8 @@
Ret = DisplayDeviceAdvancedProperties(hWndParent,
hDevInfo,
&DevInfoData,
- hComCtl32);
+ hComCtl32,
+ lpMachineName);
}
SetupDiDestroyDeviceInfoList(hDevInfo);
@@ -469,12 +489,18 @@
lpDeviceIDW);
Cleanup:
- HeapFree(GetProcessHeap(),
- 0,
- lpMachineNameW);
- HeapFree(GetProcessHeap(),
- 0,
- lpDeviceIDW);
+ if (lpMachineNameW != NULL)
+ {
+ HeapFree(GetProcessHeap(),
+ 0,
+ lpMachineNameW);
+ }
+ if (lpDeviceIDW != NULL)
+ {
+ HeapFree(GetProcessHeap(),
+ 0,
+ lpDeviceIDW);
+ }
return Ret;
}
_____
Modified: trunk/reactos/lib/devmgr/devmgr.xml
--- trunk/reactos/lib/devmgr/devmgr.xml 2005-11-30 14:02:55 UTC (rev
19776)
+++ trunk/reactos/lib/devmgr/devmgr.xml 2005-11-30 16:33:05 UTC (rev
19777)
@@ -8,6 +8,7 @@
<define name="_WIN32_IE">0x600</define>
<define name="_WIN32_WINNT">0x501</define>
<define name="WINVER">0x501</define>
+ <define name="_SETUPAPI_VER">0x501</define>
<library>kernel32</library>
<library>ntdll</library>
<library>setupapi</library>
_____
Modified: trunk/reactos/lib/devmgr/hwpage.c
--- trunk/reactos/lib/devmgr/hwpage.c 2005-11-30 14:02:55 UTC (rev
19776)
+++ trunk/reactos/lib/devmgr/hwpage.c 2005-11-30 16:33:05 UTC (rev
19777)
@@ -136,7 +136,8 @@
Ret = DisplayDeviceAdvancedProperties(hpd->hWnd,
HwDevInfo->ClassDevInfo->hDevInfo,
&HwDevInfo->DevInfoData,
- hpd->hComCtl32) != -1;
+ hpd->hComCtl32,
+ NULL) != -1;
}
return Ret;
@@ -192,8 +193,8 @@
LocalFree((HLOCAL)szFormatted);
}
- if (GetDeviceStatusString(HwDevInfo->ClassDevInfo->hDevInfo,
- &HwDevInfo->DevInfoData,
+ if (GetDeviceStatusString(HwDevInfo->DevInfoData.DevInst,
+ NULL,
szBuffer,
sizeof(szBuffer) /
sizeof(szBuffer[0])) &&
LoadAndFormatString(hDllInstance,
@@ -357,29 +358,15 @@
while (HwDevInfo != LastHwDevInfo)
{
- DWORD RegDataType;
INT iItem;
LVITEM li;
/* get the device name */
- if
((SetupDiGetDeviceRegistryProperty(ClassDevInfo->hDevInfo,
-
&HwDevInfo->DevInfoData,
-
SPDRP_FRIENDLYNAME,
- &RegDataType,
- (PBYTE)szBuffer,
- sizeof(szBuffer),
- NULL) ||
-
SetupDiGetDeviceRegistryProperty(ClassDevInfo->hDevInfo,
-
&HwDevInfo->DevInfoData,
- SPDRP_DEVICEDESC,
- &RegDataType,
- (PBYTE)szBuffer,
- sizeof(szBuffer),
- NULL)) &&
- RegDataType == REG_SZ)
+ if (GetDeviceDescriptionString(ClassDevInfo->hDevInfo,
+ &HwDevInfo->DevInfoData,
+ szBuffer,
+ sizeof(szBuffer) /
sizeof(szBuffer[0])))
{
- /* FIXME - check string for NULL termination! */
-
li.mask = LVIF_PARAM | LVIF_STATE | LVIF_TEXT |
LVIF_IMAGE;
li.iItem = ItemCount;
li.iSubItem = 0;
@@ -405,7 +392,7 @@
li.iSubItem = 1;
ListView_SetItem(hpd->hWndDevList,
- &li);
+ &li);
}
}
}
@@ -674,6 +661,7 @@
IN LPARAM lParam)
{
PHARDWARE_PAGE_DATA hpd;
+ INT_PTR Ret = FALSE;
hpd = (PHARDWARE_PAGE_DATA)GetWindowLongPtr(hwndDlg,
DWL_USER);
@@ -820,6 +808,7 @@
EnableTroubleShoot(hpd,
GetWindowTextLength(hwndDlg) !=
0);
}
+ Ret = TRUE;
break;
}
@@ -854,7 +843,7 @@
}
}
- return FALSE;
+ return Ret;
}
_____
Modified: trunk/reactos/lib/devmgr/misc.c
--- trunk/reactos/lib/devmgr/misc.c 2005-11-30 14:02:55 UTC (rev
19776)
+++ trunk/reactos/lib/devmgr/misc.c 2005-11-30 16:33:05 UTC (rev
19777)
@@ -94,6 +94,41 @@
}
+static INT
+AllocAndLoadStringsCat(OUT LPWSTR *lpTarget,
+ IN HINSTANCE hInst,
+ IN UINT uID1,
+ IN UINT uID2)
+{
+ INT ln;
+
+ ln = LengthOfStrResource(hInst,
+ uID1);
+ ln += LengthOfStrResource(hInst,
+ uID2);
+ if (ln++ > 0)
+ {
+ (*lpTarget) = (LPWSTR)LocalAlloc(LMEM_FIXED,
+ ln * sizeof(WCHAR));
+ if ((*lpTarget) != NULL)
+ {
+ INT Ret, Ret2 = 0;
+ if (!(Ret = LoadStringW(hInst, uID1, *lpTarget, ln)))
+ {
+ LocalFree((HLOCAL)(*lpTarget));
+ }
+ else if (!(Ret2 = LoadStringW(hInst, uID2, *lpTarget + Ret,
ln - Ret)))
+ {
+ LocalFree((HLOCAL)(*lpTarget));
+ Ret = 0;
+ }
+ return Ret + Ret2;
+ }
+ }
+ return 0;
+}
+
+
DWORD
LoadAndFormatString(IN HINSTANCE hInstance,
IN UINT uID,
@@ -127,6 +162,41 @@
}
+DWORD
+LoadAndFormatStringsCat(IN HINSTANCE hInstance,
+ IN UINT uID1,
+ IN UINT uID2,
+ OUT LPWSTR *lpTarget,
+ ...)
+{
+ DWORD Ret = 0;
+ LPWSTR lpFormat;
+ va_list lArgs;
+
+ if (AllocAndLoadStringsCat(&lpFormat,
+ hInstance,
+ uID1,
+ uID2) > 0)
+ {
+ va_start(lArgs, lpTarget);
+ /* let's use FormatMessage to format it because it has the
ability to allocate
+ memory automatically */
+ Ret = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_STRING,
+ lpFormat,
+ 0,
+ 0,
+ (LPWSTR)lpTarget,
+ 0,
+ &lArgs);
+ va_end(lArgs);
+
+ LocalFree((HLOCAL)lpFormat);
+ }
+
+ return Ret;
+}
+
+
LPARAM
ListViewGetSelectedItemData(IN HWND hwnd)
{
@@ -293,16 +363,130 @@
}
+static const UINT ProblemStringId[] =
+{
+ IDS_DEV_NO_PROBLEM,
+ IDS_DEV_NOT_CONFIGURED,
+ IDS_DEV_OUT_OF_MEMORY,
+ IDS_DEV_ENTRY_IS_WRONG_TYPE,
+ IDS_DEV_LACKED_ARBITRATOR,
+ IDS_DEV_BOOT_CONFIG_CONFLICT,
+ IDS_DEV_FAILED_FILTER,
+ IDS_DEV_DEVLOADER_NOT_FOUND,
+ IDS_DEV_INVALID_DATA,
+ IDS_DEV_FAILED_START,
+ IDS_DEV_LIAR,
+ IDS_DEV_NORMAL_CONFLICT,
+ IDS_DEV_NOT_VERIFIED,
+ IDS_DEV_NEED_RESTART,
+ IDS_DEV_REENUMERATION,
+ IDS_DEV_PARTIAL_LOG_CONF,
+ IDS_DEV_UNKNOWN_RESOURCE,
+ IDS_DEV_REINSTALL,
+ IDS_DEV_REGISTRY,
+ IDS_UNKNOWN, /* CM_PROB_VXDLDR, not used on NT */
+ IDS_DEV_WILL_BE_REMOVED,
+ IDS_DEV_DISABLED,
+ IDS_DEV_DEVLOADER_NOT_READY,
+ IDS_DEV_DEVICE_NOT_THERE,
+ IDS_DEV_MOVED,
+ IDS_DEV_TOO_EARLY,
+ IDS_DEV_NO_VALID_LOG_CONF,
+ IDS_DEV_FAILED_INSTALL,
+ IDS_DEV_HARDWARE_DISABLED,
+ IDS_DEV_CANT_SHARE_IRQ,
+ IDS_DEV_FAILED_ADD,
+ IDS_DEV_DISABLED_SERVICE,
+ IDS_DEV_TRANSLATION_FAILED,
+ IDS_DEV_NO_SOFTCONFIG,
+ IDS_DEV_BIOS_TABLE,
+ IDS_DEV_IRQ_TRANSLATION_FAILED,
+ IDS_DEV_FAILED_DRIVER_ENTRY,
+ IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD,
+ IDS_DEV_DRIVER_FAILED_LOAD,
+ IDS_DEV_DRIVER_SERVICE_KEY_INVALID,
+ IDS_DEV_LEGACY_SERVICE_NO_DEVICES,
+ IDS_DEV_DUPLICATE_DEVICE,
+ IDS_DEV_FAILED_POST_START,
+ IDS_DEV_HALTED,
+ IDS_DEV_PHANTOM,
+ IDS_DEV_SYSTEM_SHUTDOWN,
+ IDS_DEV_HELD_FOR_EJECT,
+ IDS_DEV_DRIVER_BLOCKED,
+ IDS_DEV_REGISTRY_TOO_LARGE,
+ IDS_DEV_SETPROPERTIES_FAILED,
+};
+
+
BOOL
-GetDeviceStatusString(IN HDEVINFO DeviceInfoSet,
- IN PSP_DEVINFO_DATA DeviceInfoData,
+GetDeviceStatusString(IN DEVINST DevInst,
+ IN HANDLE hMachine,
OUT LPWSTR szBuffer,
IN DWORD BufferSize)
{
- return LoadString(hDllInstance,
- IDS_UNKNOWN,
- szBuffer,
- BufferSize) != 0;
+ CONFIGRET cr;
+ ULONG Status, ProblemNumber;
+ BOOL Ret = FALSE;
+
+ if (hMachine != NULL)
+ {
+ cr = CM_Get_DevNode_Status_Ex(&Status,
+ &ProblemNumber,
+ DevInst,
+ 0,
+ hMachine);
+ }
+ else
+ {
+ cr = CM_Get_DevNode_Status(&Status,
+ &ProblemNumber,
+ DevInst,
+ 0);
+ }
+
+ if (cr == CR_SUCCESS)
+ {
+ UINT MessageId;
+
+ if (ProblemNumber < sizeof(ProblemStringId) /
sizeof(ProblemStringId[0]))
+ MessageId = ProblemStringId[ProblemNumber];
+ else
+ MessageId = IDS_UNKNOWN;
+
+ szBuffer[0] = L'\0';
+ if (ProblemNumber == 0)
+ {
+ if (LoadString(hDllInstance,
+ MessageId,
+ szBuffer,
+ BufferSize))
+ {
+ Ret = TRUE;
+ }
+ }
+ else
+ {
+ LPWSTR szProblem;
+
+ if (LoadAndFormatStringsCat(hDllInstance,
+ MessageId,
+ IDS_DEVCODE,
+ &szProblem,
+ ProblemNumber))
+ {
+ wcsncpy(szBuffer,
+ szProblem,
+ BufferSize - 1);
+ szBuffer[BufferSize - 1] = L'\0';
+
+ LocalFree((HLOCAL)szProblem);
+
+ Ret = TRUE;
+ }
+ }
+ }
+
+ return Ret;
}
@@ -337,6 +521,50 @@
}
+BOOL
+GetDeviceDescriptionString(IN HDEVINFO DeviceInfoSet,
+ IN PSP_DEVINFO_DATA DeviceInfoData,
+ OUT LPWSTR szBuffer,
+ IN DWORD BufferSize)
+{
+ DWORD RegDataType;
+ BOOL Ret = FALSE;
+
+ if ((SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
+ DeviceInfoData,
+ SPDRP_FRIENDLYNAME,
+ &RegDataType,
+ (PBYTE)szBuffer,
+ BufferSize * sizeof(WCHAR),
+ NULL) ||
+ SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
+ DeviceInfoData,
+ SPDRP_DEVICEDESC,
+ &RegDataType,
+ (PBYTE)szBuffer,
+ BufferSize * sizeof(WCHAR),
+ NULL)) &&
+ RegDataType == REG_SZ)
+ {
+ /* FIXME - check string for NULL termination! */
+ Ret = TRUE;
+ }
+ else
+ {
+ szBuffer[0] = L'\0';
+ if (LoadString(hDllInstance,
+ IDS_UNKNOWN,
+ szBuffer,
+ BufferSize))
+ {
+ Ret = TRUE;
+ }
+ }
+
+ return Ret;
+}
+
+
HINSTANCE
LoadAndInitComctl32(VOID)
{
_____
Modified: trunk/reactos/lib/devmgr/precomp.h
--- trunk/reactos/lib/devmgr/precomp.h 2005-11-30 14:02:55 UTC (rev
19776)
+++ trunk/reactos/lib/devmgr/precomp.h 2005-11-30 16:33:05 UTC (rev
19777)
@@ -186,7 +186,8 @@
DisplayDeviceAdvancedProperties(IN HWND hWndParent,
IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData,
- IN HINSTANCE hComCtl32);
+ IN HINSTANCE hComCtl32,
+ IN LPCWSTR lpMachineName);
/* MISC.C */
@@ -196,6 +197,13 @@
OUT LPWSTR *lpTarget,
...);
+DWORD
+LoadAndFormatStringsCat(IN HINSTANCE hInstance,
+ IN UINT uID1,
+ IN UINT uID2,
+ OUT LPWSTR *lpTarget,
+ ...);
+
LPARAM
ListViewGetSelectedItemData(IN HWND hwnd);
@@ -218,8 +226,8 @@
IN DWORD BufferSize);
BOOL
-GetDeviceStatusString(IN HDEVINFO DeviceInfoSet,
- IN PSP_DEVINFO_DATA DeviceInfoData,
+GetDeviceStatusString(IN DEVINST DevInst,
+ IN HANDLE hMachine,
OUT LPWSTR szBuffer,
IN DWORD BufferSize);
@@ -228,6 +236,12 @@
OUT LPWSTR szBuffer,
IN DWORD BufferSize);
+BOOL
+GetDeviceDescriptionString(IN HDEVINFO DeviceInfoSet,
+ IN PSP_DEVINFO_DATA DeviceInfoData,
+ OUT LPWSTR szBuffer,
+ IN DWORD BufferSize);
+
#endif /* __DEVMGR_H */
/* EOF */
_____
Modified: trunk/reactos/lib/devmgr/resource.h
--- trunk/reactos/lib/devmgr/resource.h 2005-11-30 14:02:55 UTC (rev
19776)
+++ trunk/reactos/lib/devmgr/resource.h 2005-11-30 16:33:05 UTC (rev
19777)
@@ -31,7 +31,59 @@
#define IDS_STATUS 0x104
#define IDS_UNKNOWN 0x105
#define IDS_LOCATIONSTR 0x106
+#define IDS_DEVCODE 0x107
+#define IDS_DEV_NO_PROBLEM 0x200
+#define IDS_DEV_NOT_CONFIGURED 0x201
+#define IDS_DEV_DEVLOADER_FAILED 0x202
+#define IDS_DEV_OUT_OF_MEMORY 0x203
+#define IDS_DEV_ENTRY_IS_WRONG_TYPE 0x204
+#define IDS_DEV_LACKED_ARBITRATOR 0x205
+#define IDS_DEV_BOOT_CONFIG_CONFLICT 0x206
+#define IDS_DEV_FAILED_FILTER 0x207
+#define IDS_DEV_DEVLOADER_NOT_FOUND 0x208
+#define IDS_DEV_INVALID_DATA 0x209
+#define IDS_DEV_FAILED_START 0x20A
+#define IDS_DEV_LIAR 0x20B
+#define IDS_DEV_NORMAL_CONFLICT 0x20C
+#define IDS_DEV_NOT_VERIFIED 0x20D
+#define IDS_DEV_NEED_RESTART 0x20E
+#define IDS_DEV_REENUMERATION 0x20F
+#define IDS_DEV_PARTIAL_LOG_CONF 0x210
+#define IDS_DEV_UNKNOWN_RESOURCE 0x211
+#define IDS_DEV_REINSTALL 0x212
+#define IDS_DEV_REGISTRY 0x213
+#define IDS_DEV_WILL_BE_REMOVED 0x214
+#define IDS_DEV_DISABLED 0x215
+#define IDS_DEV_DEVLOADER_NOT_READY 0x216
+#define IDS_DEV_DEVICE_NOT_THERE 0x217
+#define IDS_DEV_MOVED 0x218
+#define IDS_DEV_TOO_EARLY 0x219
+#define IDS_DEV_NO_VALID_LOG_CONF 0x21A
+#define IDS_DEV_FAILED_INSTALL 0x21B
+#define IDS_DEV_HARDWARE_DISABLED 0x21C
+#define IDS_DEV_CANT_SHARE_IRQ 0x21D
+#define IDS_DEV_FAILED_ADD 0x21E
+#define IDS_DEV_DISABLED_SERVICE 0x21F
+#define IDS_DEV_TRANSLATION_FAILED 0x220
+#define IDS_DEV_NO_SOFTCONFIG 0x221
+#define IDS_DEV_BIOS_TABLE 0x222
+#define IDS_DEV_IRQ_TRANSLATION_FAILED 0x223
+#define IDS_DEV_FAILED_DRIVER_ENTRY 0x224
+#define IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD 0x225
+#define IDS_DEV_DRIVER_FAILED_LOAD 0x226
+#define IDS_DEV_DRIVER_SERVICE_KEY_INVALID 0x227
+#define IDS_DEV_LEGACY_SERVICE_NO_DEVICES 0x228
+#define IDS_DEV_DUPLICATE_DEVICE 0x229
+#define IDS_DEV_FAILED_POST_START 0x22A
+#define IDS_DEV_HALTED 0x22B
+#define IDS_DEV_PHANTOM 0x22C
+#define IDS_DEV_SYSTEM_SHUTDOWN 0x22D
+#define IDS_DEV_HELD_FOR_EJECT 0x22E
+#define IDS_DEV_DRIVER_BLOCKED 0x22F
+#define IDS_DEV_REGISTRY_TOO_LARGE 0x230
+#define IDS_DEV_SETPROPERTIES_FAILED 0x231
+
#endif /* __DEVMGR_RESOURCE_H */
/* EOF */