ReactOS 0.4.15-dev-8116-gf69e256
devprblm.cpp
Go to the documentation of this file.
1/*
2 * ReactOS Device Manager Applet
3 * Copyright (C) 2004 - 2005 ReactOS Team
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19/*
20 * PROJECT: ReactOS devmgr.dll
21 * FILE: lib/devmgr/devprblm.c
22 * PURPOSE: ReactOS Device Manager
23 * PROGRAMMER: Thomas Weidenmueller <w3seek@reactos.com>
24 * UPDATE HISTORY:
25 * 04-04-2004 Created
26 */
27
28#include "precomp.h"
29#include "properties.h"
30#include "resource.h"
31
32
33BOOL
35 IN HDEVINFO hDevInfo,
36 IN PSP_DEVINFO_DATA DevInfoData,
37 IN HMACHINE hMachine OPTIONAL)
38{
39 WCHAR szDeviceInstanceId[256];
40 CONFIGRET cr;
41 ULONG Status, ProblemNumber;
42 DWORD dwReboot;
43 BOOL Ret = FALSE;
44
45 /* Get the device instance id */
46 if (!SetupDiGetDeviceInstanceId(hDevInfo,
47 DevInfoData,
48 szDeviceInstanceId,
49 256,
50 NULL))
51 return FALSE;
52
54 &ProblemNumber,
55 DevInfoData->DevInst,
56 0,
57 hMachine);
58 if (cr == CR_SUCCESS && (Status & DN_HAS_PROBLEM))
59 {
60 switch (ProblemNumber)
61 {
63 {
64 /* FIXME - only if it's not a root bus devloader */
65 /* FIXME - display the update driver wizard */
66 break;
67 }
68
73 case CM_PROB_LIAR:
75 {
76 /* FIXME - display the update driver wizard */
77 InstallDevInst(hWndParent, szDeviceInstanceId, TRUE, &dwReboot);
78 break;
79 }
80
84 {
85 /* FIXME - display the conflict wizard */
86 break;
87 }
88
92 {
93 /* FIXME - display the driver (re)installation wizard */
94 InstallDevInst(hWndParent, szDeviceInstanceId, TRUE, &dwReboot);
95 break;
96 }
97
99 {
100 /* FIXME - 4 cases:
101 1) if it's a missing system devloader:
102 - fail
103 2) if it's not a system devloader but still missing:
104 - display the driver reinstallation wizard
105 3) if it's not a system devloader but the file can be found:
106 - display the update driver wizard
107 4) if it's a missing or empty software key
108 - display the update driver wizard
109 */
110 break;
111 }
112
120 case CM_PROB_PHANTOM:
121 /* FIXME - do nothing */
122 break;
123
126 /* FIXME - display search hardware wizard */
127 break;
128
131 case CM_PROB_MOVED:
134 /* FIXME - reboot computer */
135 break;
136
137 case CM_PROB_REGISTRY:
138 /* FIXME - check registry */
139 break;
140
141 case CM_PROB_DISABLED:
142 {
143 /* FIXME - if device was disabled by user display the "Enable Device" wizard,
144 otherwise Troubleshoot because the device was disabled by the system */
145 break;
146 }
147
149 {
150 /* FIXME - if it's a graphics adapter:
151 - if it's a a secondary adapter and the main adapter
152 couldn't be found
153 - do nothing or default action
154 - else
155 - display the Properties
156 - else
157 - Update driver
158 */
159 break;
160 }
161
163 {
164 /* FIXME - display the properties of the sub-device */
165 break;
166 }
167
177 case CM_PROB_HALTED:
181 default:
182 {
183 /* FIXME - troubleshoot the device */
184 break;
185 }
186 }
187 }
188
189 return Ret;
190}
191
192
193/***************************************************************************
194 * NAME EXPORTED
195 * DeviceProblemWizardA
196 *
197 * DESCRIPTION
198 * Calls the device problem wizard
199 *
200 * ARGUMENTS
201 * hWndParent: Handle to the parent window
202 * lpMachineName: Machine Name, NULL is the local machine
203 * lpDeviceID: Specifies the device, also see NOTEs
204 *
205 * RETURN VALUE
206 * TRUE: if no errors occured
207 * FALSE: if errors occured
208 *
209 * @implemented
210 */
211BOOL
212WINAPI
214 IN LPCSTR lpMachineName OPTIONAL,
215 IN LPCSTR lpDeviceID)
216{
217 LPWSTR lpMachineNameW = NULL;
218 LPWSTR lpDeviceIDW = NULL;
219 BOOL Ret = FALSE;
220
221 if (lpMachineName != NULL)
222 {
223 if (!(lpMachineNameW = ConvertMultiByteToUnicode(lpMachineName,
224 CP_ACP)))
225 {
226 goto Cleanup;
227 }
228 }
229 if (lpDeviceID != NULL)
230 {
231 if (!(lpDeviceIDW = ConvertMultiByteToUnicode(lpDeviceID,
232 CP_ACP)))
233 {
234 goto Cleanup;
235 }
236 }
237
239 lpMachineNameW,
240 lpDeviceIDW);
241
242Cleanup:
243 if (lpMachineNameW != NULL)
244 {
246 0,
247 lpMachineNameW);
248 }
249 if (lpDeviceIDW != NULL)
250 {
252 0,
253 lpDeviceIDW);
254 }
255
256 return Ret;
257}
258
259
260/***************************************************************************
261 * NAME EXPORTED
262 * DeviceProblemWizardW
263 *
264 * DESCRIPTION
265 * Calls the device problem wizard
266 *
267 * ARGUMENTS
268 * hWndParent: Handle to the parent window
269 * lpMachineName: Machine Name, NULL is the local machine
270 * lpDeviceID: Specifies the device, also see NOTEs
271 *
272 * RETURN VALUE
273 * TRUE: if no errors occured
274 * FALSE: if errors occured
275 *
276 * @unimplemented
277 */
278BOOL
279WINAPI
281 IN LPCWSTR lpMachineName OPTIONAL,
282 IN LPCWSTR lpDeviceID)
283{
284 HDEVINFO hDevInfo;
285 SP_DEVINFO_DATA DevInfoData;
286 HINSTANCE hComCtl32;
287 CONFIGRET cr;
288 HMACHINE hMachine;
289 BOOL Ret = FALSE;
290
291 if (lpDeviceID == NULL)
292 {
294 return FALSE;
295 }
296
297 /* dynamically load comctl32 */
298 hComCtl32 = LoadAndInitComctl32();
299 if (hComCtl32 != NULL)
300 {
303 lpMachineName,
304 NULL);
305 if (hDevInfo != INVALID_HANDLE_VALUE)
306 {
307 cr = CM_Connect_Machine(lpMachineName,
308 &hMachine);
309 if (cr == CR_SUCCESS)
310 {
311 DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
312 if (SetupDiOpenDeviceInfo(hDevInfo,
313 lpDeviceID,
315 0,
316 &DevInfoData))
317 {
319 hDevInfo,
320 &DevInfoData,
321 hMachine);
322 }
323
324 CM_Disconnect_Machine(hMachine);
325 }
326
328 }
329
330 FreeLibrary(hComCtl32);
331 }
332
333 return Ret;
334}
335
336
338{
359 IDS_UNKNOWN, /* CM_PROB_VXDLDR, not used on NT */
390};
391
392
393/***************************************************************************
394 * NAME EXPORTED
395 * DeviceProblemTextA
396 *
397 * DESCRIPTION
398 * Gets the problem text from a problem number displayed in the properties dialog
399 *
400 * ARGUMENTS
401 * hMachine: Machine handle or NULL for the local machine
402 * DevInst: Device instance handle
403 * uProblemId: Specifies the problem ID
404 * lpString: Pointer to a buffer where the string is to be copied to. If the buffer
405 * is too small, the return value is the required string length in characters,
406 * excluding the NULL-termination.
407 * uMaxString: Size of the buffer in characters
408 *
409 * RETURN VALUE
410 * The return value is the length of the string in characters.
411 * It returns 0 if an error occured.
412 *
413 * @implemented
414 */
415UINT
416WINAPI
418 IN DEVINST dnDevInst,
419 IN ULONG uProblemId,
420 OUT LPSTR lpString,
421 IN UINT uMaxString)
422{
424 UINT Ret = 0;
425
426 if (uMaxString != 0)
427 {
429 0,
430 (uMaxString + 1) * sizeof(WCHAR));
431 if (lpBuffer == NULL)
432 {
434 return 0;
435 }
436 }
437
438 Ret = DeviceProblemTextW(hMachine,
439 dnDevInst,
440 uProblemId,
441 lpBuffer,
442 uMaxString);
443
444 if (lpBuffer != NULL)
445 {
446 if (Ret)
447 {
449 0,
450 lpBuffer,
451 (int)Ret,
452 lpString,
453 (int)uMaxString,
454 NULL,
455 NULL);
456 }
457
459 0,
460 lpBuffer);
461 }
462
463 return Ret;
464}
465
466
467/***************************************************************************
468 * NAME EXPORTED
469 * DeviceProblemTextW
470 *
471 * DESCRIPTION
472 * Gets the problem text from a problem number displayed in the properties dialog
473 *
474 * ARGUMENTS
475 * hMachine: Machine handle or NULL for the local machine
476 * DevInst: Device instance handle
477 * uProblemId: Specifies the problem ID
478 * lpString: Pointer to a buffer where the string is to be copied to. If the buffer
479 * is too small, the return value is the required string length in characters,
480 * excluding the NULL-termination.
481 * uMaxString: Size of the buffer in characters
482 *
483 * RETURN VALUE
484 * The return value is the length of the string in characters.
485 * It returns 0 if an error occured.
486 *
487 * @implemented
488 */
489UINT
490WINAPI
492 IN DEVINST dnDevInst,
493 IN ULONG uProblemId,
494 OUT LPWSTR lpString,
495 IN UINT uMaxString)
496{
497 UINT MessageId = IDS_UNKNOWN;
498 UINT Ret = 0;
499
500 if (uProblemId < sizeof(ProblemStringId) / sizeof(ProblemStringId[0]))
501 MessageId = ProblemStringId[uProblemId];
502
503 if (uProblemId == 0)
504 {
505 if (uMaxString != 0)
506 {
508 MessageId,
509 lpString,
510 (int)uMaxString);
511 }
512 else
513 {
515 MessageId);
516 }
517 }
518 else
519 {
520 LPWSTR szProblem;
521 WCHAR szInfo[] = L"FIXME";
522 DWORD dwRet;
523 BOOL AdvFormat = FALSE;
524 UINT StringIDs[] =
525 {
526 MessageId,
528 };
529
530 switch (uProblemId)
531 {
533 {
534 /* FIXME - if not a root bus devloader then use IDS_DEV_DEVLOADER_FAILED2 */
535 /* FIXME - get the type string (ie. ISAPNP, PCI or BIOS for root bus devloaders,
536 or FLOP, ESDI, SCSI, etc for others */
537 AdvFormat = TRUE;
538 break;
539 }
540
542 {
543 /* FIXME - 4 cases:
544 1) if it's a missing system devloader:
545 - get the system devloader name
546 2) if it's not a system devloader but still missing:
547 - get the devloader name (file name?)
548 3) if it's not a system devloader but the file can be found:
549 - use IDS_DEV_DEVLOADER_NOT_FOUND2
550 4) if it's a missing or empty software key
551 - use IDS_DEV_DEVLOADER_NOT_FOUND3
552 - AdvFormat = FALSE!
553 */
554 AdvFormat = TRUE;
555 break;
556 }
557
559 /* FIXME - if the device isn't enumerated by the BIOS/ACPI use IDS_DEV_INVALID_DATA2 */
560 AdvFormat = FALSE;
561 break;
562
564 /* FIXME - get resource type (IRQ, DMA, Memory or I/O) */
565 AdvFormat = TRUE;
566 break;
567
569 /* FIXME - get the .inf file name */
570 AdvFormat = TRUE;
571 break;
572
573 case CM_PROB_DISABLED:
574 /* FIXME - if the device was disabled by the system use IDS_DEV_DISABLED2 */
575 break;
576 }
577
578 if (AdvFormat)
579 {
580 StringIDs[1] = IDS_DEVCODE2;
582 StringIDs,
583 sizeof(StringIDs) / sizeof(StringIDs[0]),
584 &szProblem,
585 szInfo,
586 uProblemId);
587 }
588 else
589 {
591 StringIDs,
592 sizeof(StringIDs) / sizeof(StringIDs[0]),
593 &szProblem,
594 uProblemId);
595 }
596
597 if (dwRet != 0)
598 {
599 if (uMaxString != 0 && uMaxString >= dwRet)
600 {
601 wcscpy(lpString,
602 szProblem);
603 }
604
605 LocalFree((HLOCAL)szProblem);
606
607 Ret = dwRet;
608 }
609 }
610
611 return Ret;
612}
INT LengthOfStrResource(IN HINSTANCE hInst, IN UINT uID)
Definition: misc.c:23
#define IDS_UNKNOWN
Definition: resource.h:7
#define CM_PROB_REGISTRY_TOO_LARGE
Definition: cfg.h:79
#define CM_PROB_REGISTRY
Definition: cfg.h:49
#define CM_PROB_REINSTALL
Definition: cfg.h:48
#define CM_PROB_BOOT_CONFIG_CONFLICT
Definition: cfg.h:36
#define CM_PROB_FAILED_ADD
Definition: cfg.h:61
#define CM_PROB_INVALID_DATA
Definition: cfg.h:39
#define CM_PROB_HELD_FOR_EJECT
Definition: cfg.h:77
#define CM_PROB_DRIVER_BLOCKED
Definition: cfg.h:78
#define CM_PROB_HARDWARE_DISABLED
Definition: cfg.h:59
#define CM_PROB_NO_SOFTCONFIG
Definition: cfg.h:64
#define CM_PROB_TRANSLATION_FAILED
Definition: cfg.h:63
#define CM_PROB_PARTIAL_LOG_CONF
Definition: cfg.h:46
#define CM_PROB_LIAR
Definition: cfg.h:41
#define CM_PROB_REENUMERATION
Definition: cfg.h:45
#define CM_PROB_NORMAL_CONFLICT
Definition: cfg.h:42
#define CM_PROB_NEED_RESTART
Definition: cfg.h:44
#define CM_PROB_UNKNOWN_RESOURCE
Definition: cfg.h:47
#define DN_HAS_PROBLEM
Definition: cfg.h:128
#define CM_PROB_DEVICE_NOT_THERE
Definition: cfg.h:54
#define CM_PROB_DRIVER_SERVICE_KEY_INVALID
Definition: cfg.h:70
#define CM_PROB_DISABLED
Definition: cfg.h:52
#define CM_PROB_FAILED_FILTER
Definition: cfg.h:37
#define CM_PROB_WILL_BE_REMOVED
Definition: cfg.h:51
#define CM_PROB_DEVLOADER_FAILED
Definition: cfg.h:32
#define CM_PROB_FAILED_START
Definition: cfg.h:40
#define CM_PROB_PHANTOM
Definition: cfg.h:75
#define CM_PROB_DRIVER_FAILED_LOAD
Definition: cfg.h:69
#define CM_PROB_FAILED_INSTALL
Definition: cfg.h:58
#define CM_PROB_OUT_OF_MEMORY
Definition: cfg.h:33
#define CM_PROB_HALTED
Definition: cfg.h:74
#define CM_PROB_NOT_VERIFIED
Definition: cfg.h:43
#define CM_PROB_FAILED_POST_START
Definition: cfg.h:73
#define CM_PROB_SYSTEM_SHUTDOWN
Definition: cfg.h:76
#define CM_PROB_NO_VALID_LOG_CONF
Definition: cfg.h:57
#define CM_PROB_IRQ_TRANSLATION_FAILED
Definition: cfg.h:66
#define CM_PROB_DRIVER_FAILED_PRIOR_UNLOAD
Definition: cfg.h:68
#define CM_PROB_LACKED_ARBITRATOR
Definition: cfg.h:35
#define CM_PROB_FAILED_DRIVER_ENTRY
Definition: cfg.h:67
#define CM_PROB_DEVLOADER_NOT_READY
Definition: cfg.h:53
#define CM_PROB_DISABLED_SERVICE
Definition: cfg.h:62
#define CM_PROB_DEVLOADER_NOT_FOUND
Definition: cfg.h:38
#define CM_PROB_TOO_EARLY
Definition: cfg.h:56
#define CM_PROB_MOVED
Definition: cfg.h:55
#define CM_PROB_DUPLICATE_DEVICE
Definition: cfg.h:72
#define CM_PROB_LEGACY_SERVICE_NO_DEVICES
Definition: cfg.h:71
#define NUM_CM_PROB
Definition: cfg.h:91
#define CM_PROB_ENTRY_IS_WRONG_TYPE
Definition: cfg.h:34
#define CM_PROB_CANT_SHARE_IRQ
Definition: cfg.h:60
DWORD DEVINST
Definition: cfgmgr32.h:76
#define CM_Connect_Machine
Definition: cfgmgr32.h:1074
RETURN_TYPE CONFIGRET
Definition: cfgmgr32.h:74
#define CR_SUCCESS
Definition: cfgmgr32.h:842
CONFIGRET WINAPI CM_Disconnect_Machine(_In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:1863
CONFIGRET WINAPI CM_Get_DevNode_Status_Ex(_Out_ PULONG pulStatus, _Out_ PULONG pulProblemNumber, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:3591
static HINSTANCE hDllInstance
Definition: clb.c:30
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:175
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
BOOL WINAPI DeviceProblemWizardA(IN HWND hWndParent OPTIONAL, IN LPCSTR lpMachineName OPTIONAL, IN LPCSTR lpDeviceID)
Definition: devprblm.cpp:213
static const UINT ProblemStringId[NUM_CM_PROB]
Definition: devprblm.cpp:337
BOOL WINAPI DeviceProblemWizardW(IN HWND hWndParent OPTIONAL, IN LPCWSTR lpMachineName OPTIONAL, IN LPCWSTR lpDeviceID)
Definition: devprblm.cpp:280
BOOL ShowDeviceProblemWizard(IN HWND hWndParent OPTIONAL, IN HDEVINFO hDevInfo, IN PSP_DEVINFO_DATA DevInfoData, IN HMACHINE hMachine OPTIONAL)
Definition: devprblm.cpp:34
UINT WINAPI DeviceProblemTextW(IN HMACHINE hMachine OPTIONAL, IN DEVINST dnDevInst, IN ULONG uProblemId, OUT LPWSTR lpString, IN UINT uMaxString)
Definition: devprblm.cpp:491
UINT WINAPI DeviceProblemTextA(IN HMACHINE hMachine OPTIONAL, IN DEVINST dnDevInst, IN ULONG uProblemId, OUT LPSTR lpString, IN UINT uMaxString)
Definition: devprblm.cpp:417
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define GetProcessHeap()
Definition: compat.h:736
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define CP_ACP
Definition: compat.h:109
#define SetLastError(x)
Definition: compat.h:752
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define HeapAlloc
Definition: compat.h:733
#define FreeLibrary(x)
Definition: compat.h:748
#define HeapFree(x, y, z)
Definition: compat.h:735
#define WideCharToMultiByte
Definition: compat.h:111
BOOL WINAPI InstallDevInst(IN HWND hWndParent, IN LPCWSTR InstanceId, IN BOOL bUpdate, OUT LPDWORD lpReboot)
Definition: stubs.cpp:24
LPWSTR ConvertMultiByteToUnicode(IN LPCSTR lpMultiByteStr, IN UINT uCodePage)
Definition: misc.cpp:239
DWORD LoadAndFormatStringsCat(IN HINSTANCE hInstance, IN UINT *uID, IN UINT nIDs, OUT LPWSTR *lpTarget,...)
Definition: misc.cpp:177
HINSTANCE LoadAndInitComctl32(VOID)
Definition: misc.cpp:1106
#define IDS_DEV_NO_VALID_LOG_CONF
Definition: resource.h:166
#define IDS_DEV_FAILED_POST_START
Definition: resource.h:182
#define IDS_DEV_NOT_VERIFIED
Definition: resource.h:150
#define IDS_DEV_FAILED_FILTER
Definition: resource.h:141
#define IDS_DEV_ENTRY_IS_WRONG_TYPE
Definition: resource.h:138
#define IDS_DEV_DEVLOADER_NOT_FOUND
Definition: resource.h:142
#define IDS_DEV_FAILED_INSTALL
Definition: resource.h:167
#define IDS_DEV_SETPROPERTIES_FAILED
Definition: resource.h:189
#define IDS_DEV_PHANTOM
Definition: resource.h:184
#define IDS_DEV_HELD_FOR_EJECT
Definition: resource.h:186
#define IDS_DEV_MOVED
Definition: resource.h:164
#define IDS_DEV_OUT_OF_MEMORY
Definition: resource.h:137
#define IDS_DEV_FAILED_DRIVER_ENTRY
Definition: resource.h:176
#define IDS_DEV_DRIVER_SERVICE_KEY_INVALID
Definition: resource.h:179
#define IDS_DEV_TOO_EARLY
Definition: resource.h:165
#define IDS_DEV_FAILED_START
Definition: resource.h:147
#define IDS_DEV_UNKNOWN_RESOURCE
Definition: resource.h:154
#define IDS_DEV_LACKED_ARBITRATOR
Definition: resource.h:139
#define IDS_DEV_SYSTEM_SHUTDOWN
Definition: resource.h:185
#define IDS_DEV_INVALID_DATA
Definition: resource.h:145
#define IDS_DEV_LIAR
Definition: resource.h:148
#define IDS_DEV_CANT_SHARE_IRQ
Definition: resource.h:169
#define IDS_DEV_FAILED_ADD
Definition: resource.h:170
#define IDS_DEV_NO_PROBLEM
Definition: resource.h:133
#define IDS_DEV_REGISTRY_TOO_LARGE
Definition: resource.h:188
#define IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD
Definition: resource.h:177
#define IDS_DEV_REENUMERATION
Definition: resource.h:152
#define IDS_DEV_DISABLED_SERVICE
Definition: resource.h:171
#define IDS_DEV_TRANSLATION_FAILED
Definition: resource.h:172
#define IDS_DEV_IRQ_TRANSLATION_FAILED
Definition: resource.h:175
#define IDS_DEV_DISABLED
Definition: resource.h:158
#define IDS_DEV_WILL_BE_REMOVED
Definition: resource.h:157
#define IDS_DEVCODE2
Definition: resource.h:110
#define IDS_DEV_HARDWARE_DISABLED
Definition: resource.h:168
#define IDS_DEV_HALTED
Definition: resource.h:183
#define IDS_DEV_NOT_CONFIGURED
Definition: resource.h:134
#define IDS_DEV_NORMAL_CONFLICT
Definition: resource.h:149
#define IDS_DEV_DEVLOADER_NOT_READY
Definition: resource.h:160
#define IDS_DEV_BOOT_CONFIG_CONFLICT
Definition: resource.h:140
#define IDS_DEV_BIOS_TABLE
Definition: resource.h:174
#define IDS_DEV_REINSTALL
Definition: resource.h:155
#define IDS_DEV_DEVLOADER_FAILED
Definition: resource.h:135
#define IDS_DEV_DRIVER_BLOCKED
Definition: resource.h:187
#define IDS_DEV_DRIVER_FAILED_LOAD
Definition: resource.h:178
#define IDS_DEV_PARTIAL_LOG_CONF
Definition: resource.h:153
#define IDS_DEV_REGISTRY
Definition: resource.h:156
#define IDS_DEV_NEED_RESTART
Definition: resource.h:151
#define IDS_DEV_DUPLICATE_DEVICE
Definition: resource.h:181
#define IDS_DEVCODE
Definition: resource.h:109
#define IDS_DEV_DEVICE_NOT_THERE
Definition: resource.h:163
#define IDS_DEV_NO_SOFTCONFIG
Definition: resource.h:173
#define IDS_DEV_LEGACY_SERVICE_NO_DEVICES
Definition: resource.h:180
BOOL WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO devinfo)
Definition: devinst.c:2893
static const WCHAR Cleanup[]
Definition: register.c:80
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
Status
Definition: gdiplustypes.h:25
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
unsigned int UINT
Definition: ndis.h:50
#define L(x)
Definition: ntvdm.h:50
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define SetupDiOpenDeviceInfo
Definition: setupapi.h:2614
#define SetupDiGetDeviceInstanceId
Definition: setupapi.h:2600
#define SetupDiCreateDeviceInfoListEx
Definition: setupapi.h:2580
struct _SP_DEVINFO_DATA SP_DEVINFO_DATA
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
#define WINAPI
Definition: msvc.h:6
#define LoadString
Definition: winuser.h:5819
const char * LPCSTR
Definition: xmlstorage.h:183
char * LPSTR
Definition: xmlstorage.h:182
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185