ReactOS 0.4.15-dev-7961-gdcf9eb0
cfgmgr.c
Go to the documentation of this file.
1/*
2 * Configuration manager functions
3 *
4 * Copyright 2000 James Hatheway
5 * Copyright 2005, 2006 Eric Kohl
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22#include "setupapi_private.h"
23
24#include <dbt.h>
25#include <pnp_c.h>
26#include <winsvc.h>
27
28#include <pseh/pseh2.h>
29
30#include "rpc_private.h"
31
35 OUT LPWSTR lpServiceName,
36 IN DWORD cchServiceName);
37
38
39/* Registry key and value names */
40static const WCHAR BackslashOpenBrace[] = {'\\', '{', 0};
41static const WCHAR CloseBrace[] = {'}', 0};
42static const WCHAR Class[] = {'C','l','a','s','s',0};
43
44static const WCHAR ControlClass[] = {'S','y','s','t','e','m','\\',
45 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
46 'C','o','n','t','r','o','l','\\',
47 'C','l','a','s','s',0};
48
49static const WCHAR DeviceClasses[] = {'S','y','s','t','e','m','\\',
50 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
51 'C','o','n','t','r','o','l','\\',
52 'D','e','v','i','c','e','C','l','a','s','s','e','s',0};
53
54typedef struct _MACHINE_INFO
55{
61
62
63typedef struct _LOG_CONF_INFO
64{
70
71#define LOG_CONF_MAGIC 0x464E434C /* "LCNF" */
72
73
74typedef struct _NOTIFY_DATA
75{
79
80#define NOTIFY_MAGIC 0x44556677
81
82
83typedef struct _INTERNAL_RANGE
84{
90
92{
97
98#define RANGE_LIST_MAGIC 0x33445566
99
100typedef struct _CONFLICT_DATA
101{
105
106#define CONFLICT_MAGIC 0x11225588
107
108
109/* FUNCTIONS ****************************************************************/
110
111static
112BOOL
116{
117 LPWSTR lpString;
118
119 if (UuidToStringW(Guid, &lpString) != RPC_S_OK)
120 return FALSE;
121
122 lstrcpyW(&String[1], lpString);
123
124 String[0] = '{';
125 String[MAX_GUID_STRING_LEN - 2] = '}';
127
128 RpcStringFreeW(&lpString);
129
130 return TRUE;
131}
132
133
134static
138{
139 return CR_FAILURE;
140}
141
142
143static
144ULONG
146 _In_ ULONG ulProperty)
147{
148 switch (ulProperty)
149 {
151 case CM_DRP_SERVICE:
152 case CM_DRP_CLASS:
153 case CM_DRP_CLASSGUID:
154 case CM_DRP_DRIVER:
155 case CM_DRP_MFG:
162 return REG_SZ;
163
168 return REG_MULTI_SZ;
169
172 case CM_DRP_UI_NUMBER:
174 case CM_DRP_BUSNUMBER:
175 case CM_DRP_DEVTYPE:
176 case CM_DRP_EXCLUSIVE:
178 case CM_DRP_ADDRESS:
183 return REG_DWORD;
184
186 case CM_DRP_SECURITY:
188 default:
189 return REG_BINARY;
190 }
191
192 return REG_NONE;
193}
194
195
196static
197VOID
199 _In_ PWSTR pszDeviceInstanceId,
200 _Out_ PWSTR pszDeviceId,
201 _Out_ PWSTR pszInstanceId)
202{
203 PWCHAR ptr;
204
205 wcscpy(pszDeviceId, pszDeviceInstanceId);
206
207 ptr = wcschr(pszDeviceId, L'\\');
208 if (ptr != NULL)
209 {
210 *ptr = UNICODE_NULL;
211 ptr++;
212
213 wcscpy(pszInstanceId, ptr);
214 }
215 else
216 {
217 *pszInstanceId = UNICODE_NULL;
218 }
219}
220
221
222static
226 _In_ PWSTR pszDeviceInst,
227 _Out_ PWSTR pszKeyPath,
228 _Out_ PWSTR pszInstancePath,
229 _In_ ULONG ulHardwareProfile,
230 _In_ ULONG ulFlags)
231{
232 PWSTR pszBuffer = NULL;
233 ULONG ulType = 0;
234 ULONG ulTransferLength, ulLength;
236
237 TRACE("GetDeviceInstanceKeyPath()\n");
238
239 /* Allocate a buffer for the device id */
240 pszBuffer = MyMalloc(300 * sizeof(WCHAR));
241 if (pszBuffer == NULL)
242 {
243 ERR("MyMalloc() failed\n");
244 return CR_OUT_OF_MEMORY;
245 }
246
247 if (ulFlags & CM_REGISTRY_SOFTWARE)
248 {
249 /* Software Key Path */
250
251 ulTransferLength = 300 * sizeof(WCHAR);
252 ulLength = 300 * sizeof(WCHAR);
253
255 {
257 pszDeviceInst,
259 &ulType,
260 (PVOID)pszBuffer,
261 &ulTransferLength,
262 &ulLength,
263 0);
264 }
266 {
268 }
270
271 if (ret != CR_SUCCESS)
272 {
274 {
276 pszDeviceInst,
277 (PVOID)pszBuffer,
278 300);
279 }
281 {
283 }
285
286 if (ret != CR_SUCCESS)
287 {
288 goto done;
289 }
290 }
291
292 TRACE("szBuffer: %S\n", pszBuffer);
293
294 SplitDeviceInstanceId(pszBuffer,
295 pszBuffer,
296 pszInstancePath);
297
298 TRACE("szBuffer: %S\n", pszBuffer);
299
300 if (ulFlags & CM_REGISTRY_CONFIG)
301 {
302 if (ulHardwareProfile == 0)
303 {
304 wsprintfW(pszKeyPath,
305 L"%s\\%s\\%s\\%s",
306 L"System\\CurrentControlSet\\Hardware Profiles",
307 L"Current",
308 L"System\\CurrentControlSet\\Control\\Class",
309 pszBuffer);
310 }
311 else
312 {
313 wsprintfW(pszKeyPath,
314 L"%s\\%04lu\\%s\\%s",
315 L"System\\CurrentControlSet\\Hardware Profiles",
316 ulHardwareProfile,
317 L"System\\CurrentControlSet\\Control\\Class",
318 pszBuffer);
319 }
320 }
321 else
322 {
323 wsprintfW(pszKeyPath,
324 L"%s\\%s",
325 L"System\\CurrentControlSet\\Control\\Class",
326 pszBuffer);
327 }
328 }
329 else
330 {
331 /* Hardware Key Path */
332
333 if (ulFlags & CM_REGISTRY_CONFIG)
334 {
335 SplitDeviceInstanceId(pszDeviceInst,
336 pszBuffer,
337 pszInstancePath);
338
339 if (ulHardwareProfile == 0)
340 {
341 wsprintfW(pszKeyPath,
342 L"%s\\%s\\%s\\%s",
343 L"System\\CurrentControlSet\\Hardware Profiles",
344 L"Current",
345 L"System\\CurrentControlSet\\Enum",
346 pszBuffer);
347 }
348 else
349 {
350 wsprintfW(pszKeyPath,
351 L"%s\\%04lu\\%s\\%s",
352 L"System\\CurrentControlSet\\Hardware Profiles",
353 ulHardwareProfile,
354 L"System\\CurrentControlSet\\Enum",
355 pszBuffer);
356 }
357 }
358 else if (ulFlags & CM_REGISTRY_USER)
359 {
360 wsprintfW(pszKeyPath,
361 L"%s\\%s",
362 L"System\\CurrentControlSet\\Enum",
363 pszDeviceInst);
364
365 wcscpy(pszInstancePath,
366 L"Device Parameters");
367 }
368 else
369 {
370 SplitDeviceInstanceId(pszDeviceInst,
371 pszBuffer,
372 pszInstancePath);
373
374 wsprintfW(pszKeyPath,
375 L"%s\\%s",
376 L"System\\CurrentControlSet\\Enum",
377 pszBuffer);
378 }
379 }
380
381done:
382 if (pszBuffer != NULL)
383 MyFree(pszBuffer);
384
385 return ret;
386}
387
388
389BOOL
392{
393 BOOL bValid = TRUE;
394
395 if (pRangeList == NULL)
396 return FALSE;
397
399 {
400 if (pRangeList->ulMagic != RANGE_LIST_MAGIC)
401 bValid = FALSE;
402 }
404 {
405 bValid = FALSE;
406 }
407 _SEH2_END;
408
409 return bValid;
410}
411
412
413BOOL
415 _In_opt_ PLOG_CONF_INFO pLogConfInfo)
416{
417 BOOL bValid = TRUE;
418
419 if (pLogConfInfo == NULL)
420 return FALSE;
421
423 {
424 if (pLogConfInfo->ulMagic != LOG_CONF_MAGIC)
425 bValid = FALSE;
426 }
428 {
429 bValid = FALSE;
430 }
431 _SEH2_END;
432
433 return bValid;
434}
435
436
437BOOL
439 _In_opt_ PCONFLICT_DATA pConflictData)
440{
441 BOOL bValid = TRUE;
442
443 if (pConflictData == NULL)
444 return FALSE;
445
447 {
448 if (pConflictData->ulMagic != CONFLICT_MAGIC)
449 bValid = FALSE;
450 }
452 {
453 bValid = FALSE;
454 }
455 _SEH2_END;
456
457 return bValid;
458}
459
460
461/***********************************************************************
462 * CMP_GetBlockedDriverInfo [SETUPAPI.@]
463 */
465WINAPI
467 _Out_opt_ LPWSTR pszNames,
468 _Inout_ PULONG pulLength,
469 _In_ ULONG ulFlags,
470 _In_opt_ HMACHINE hMachine)
471{
473 ULONG ulTransferLength;
475
476 TRACE("CMP_GetBlockedDriverInfo(%p %p %lx %p)\n",
477 pszNames, pulLength, ulFlags, hMachine);
478
479 if (hMachine != NULL)
480 {
481 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
482 if (BindingHandle == NULL)
483 return CR_FAILURE;
484 }
485 else
486 {
488 return CR_FAILURE;
489 }
490
491 ulTransferLength = *pulLength;
492
494 {
496 (PBYTE)pszNames,
497 &ulTransferLength,
498 pulLength,
499 ulFlags);
500 }
502 {
504 }
506
507 return ret;
508}
509
510
511/***********************************************************************
512 * CMP_GetServerSideDeviceInstallFlags [SETUPAPI.@]
513 */
515WINAPI
517 _Out_ PULONG pulSSDIFlags,
518 _In_ ULONG ulFlags,
519 _In_opt_ HMACHINE hMachine)
520{
523
524 TRACE("CMP_GetServerSideDeviceInstallFlags(%p %lx %p)\n",
525 pulSSDIFlags, ulFlags, hMachine);
526
527 if (pulSSDIFlags == NULL)
528 return CR_INVALID_POINTER;
529
530 if (ulFlags != 0)
531 return CR_INVALID_FLAG;
532
533 if (hMachine != NULL)
534 {
535 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
536 if (BindingHandle == NULL)
537 return CR_FAILURE;
538 }
539 else
540 {
542 return CR_FAILURE;
543 }
544
546 {
548 pulSSDIFlags,
549 ulFlags);
550 }
552 {
554 }
556
557 return ret;
558}
559
560
561/***********************************************************************
562 * CMP_Init_Detection [SETUPAPI.@]
563 */
565WINAPI
567 _In_ ULONG ulMagic)
568{
571
572 TRACE("CMP_Init_Detection(%lu)\n", ulMagic);
573
574 if (ulMagic != CMP_MAGIC)
575 return CR_INVALID_DATA;
576
578 return CR_FAILURE;
579
581 {
583 }
585 {
587 }
589
590 return ret;
591}
592
593
594/***********************************************************************
595 * CMP_RegisterNotification [SETUPAPI.@]
596 */
598WINAPI
600 _In_ HANDLE hRecipient,
601 _In_ LPVOID lpvNotificationFilter,
602 _In_ ULONG ulFlags,
603 _Out_ PHDEVNOTIFY phDevNotify)
604{
606 PNOTIFY_DATA pNotifyData;
607 WCHAR szNameBuffer[256];
608 INT nLength;
609 DWORD ulUnknown9 = 0;
610 DWORD dwError;
612
613 FIXME("CMP_RegisterNotification(%p %p %lu %p)\n",
614 hRecipient, lpvNotificationFilter, ulFlags, phDevNotify);
615
616 if ((hRecipient == NULL) ||
617 (lpvNotificationFilter == NULL) ||
618 (phDevNotify == NULL))
619 return CR_INVALID_POINTER;
620
621 if (ulFlags & ~0x7)
622 return CR_INVALID_FLAG;
623
624 if (((PDEV_BROADCAST_HDR)lpvNotificationFilter)->dbch_size < sizeof(DEV_BROADCAST_HDR))
625 return CR_INVALID_DATA;
626
628 return CR_FAILURE;
629
630 pNotifyData = HeapAlloc(GetProcessHeap(),
632 sizeof(NOTIFY_DATA));
633 if (pNotifyData == NULL)
634 return CR_OUT_OF_MEMORY;
635
636 pNotifyData->ulMagic = NOTIFY_MAGIC;
637 pNotifyData->hNotifyHandle = NULL;
638
639 ZeroMemory(szNameBuffer, sizeof(szNameBuffer));
640
641 if ((ulFlags & DEVICE_NOTIFY_SERVICE_HANDLE) == DEVICE_NOTIFY_WINDOW_HANDLE)
642 {
643 FIXME("Register a window\n");
644
645 nLength = GetWindowTextW((HWND)hRecipient,
646 szNameBuffer,
647 ARRAYSIZE(szNameBuffer));
648 if (nLength == 0)
649 {
650 szNameBuffer[0] = UNICODE_NULL;
651 }
652
653 FIXME("Register window: %S\n", szNameBuffer);
654 }
655 else if ((ulFlags & DEVICE_NOTIFY_SERVICE_HANDLE) == DEVICE_NOTIFY_SERVICE_HANDLE)
656 {
657 FIXME("Register a service\n");
658
659 dwError = I_ScPnPGetServiceName((SERVICE_STATUS_HANDLE)hRecipient,
660 szNameBuffer,
661 ARRAYSIZE(szNameBuffer));
662 if (dwError != ERROR_SUCCESS)
663 {
664 HeapFree(GetProcessHeap(), 0, pNotifyData);
665 return CR_INVALID_DATA;
666 }
667
668 FIXME("Register service: %S\n", szNameBuffer);
669 }
670
672 {
674 (DWORD_PTR)hRecipient,
675 szNameBuffer,
676 (BYTE*)lpvNotificationFilter,
677 ((DEV_BROADCAST_HDR*)lpvNotificationFilter)->dbch_size,
678 ulFlags,
679 &pNotifyData->hNotifyHandle,
681 &ulUnknown9); /* ??? */
682 }
684 {
686 }
688
689 if (ret == CR_SUCCESS)
690 {
691 TRACE("hNotifyHandle: %p\n", pNotifyData->hNotifyHandle);
692 *phDevNotify = (HDEVNOTIFY)pNotifyData;
693 }
694 else
695 {
696 HeapFree(GetProcessHeap(), 0, pNotifyData);
697
698 *phDevNotify = (HDEVNOTIFY)NULL;
699 }
700
701 return ret;
702}
703
704
705/***********************************************************************
706 * CMP_Report_LogOn [SETUPAPI.@]
707 */
709WINAPI
711 _In_ DWORD dwMagic,
712 _In_ DWORD dwProcessId)
713{
716 BOOL bAdmin;
717 DWORD i;
718
719 TRACE("CMP_Report_LogOn(%lu %lu)\n", dwMagic, dwProcessId);
720
721 if (dwMagic != CMP_MAGIC)
722 return CR_INVALID_DATA;
723
725 return CR_FAILURE;
726
727 bAdmin = pSetupIsUserAdmin();
728
729 for (i = 0; i < 30; i++)
730 {
732 {
734 bAdmin,
735 dwProcessId);
736 }
738 {
740 }
742
743 if (ret == CR_SUCCESS)
744 break;
745
746 Sleep(5000);
747 }
748
749 return ret;
750}
751
752
753/***********************************************************************
754 * CMP_UnregisterNotification [SETUPAPI.@]
755 */
757WINAPI
759 _In_ HDEVNOTIFY hDevNotify)
760{
762 PNOTIFY_DATA pNotifyData;
764
765 TRACE("CMP_UnregisterNotification(%p)\n", hDevNotify);
766
767 pNotifyData = (PNOTIFY_DATA)hDevNotify;
768
769 if ((pNotifyData == NULL) ||
770 (pNotifyData->ulMagic != NOTIFY_MAGIC))
771 return CR_INVALID_POINTER;
772
774 return CR_FAILURE;
775
777 {
779 &pNotifyData->hNotifyHandle);
780 }
782 {
784 }
786
787 if (ret == CR_SUCCESS)
788 {
789 pNotifyData->hNotifyHandle = NULL;
790 HeapFree(GetProcessHeap(), 0, pNotifyData);
791 }
792
793 return ret;
794}
795
796
797/***********************************************************************
798 * CMP_WaitNoPendingInstallEvents [SETUPAPI.@]
799 */
800DWORD
801WINAPI
804{
806 DWORD ret;
807
808 TRACE("CMP_WaitNoPendingInstallEvents(%lu)\n", dwTimeout);
809
810 hEvent = OpenEventW(SYNCHRONIZE, FALSE, L"Global\\PnP_No_Pending_Install_Events");
811 if (hEvent == NULL)
812 return WAIT_FAILED;
813
816 return ret;
817}
818
819
820/***********************************************************************
821 * CMP_WaitServicesAvailable [SETUPAPI.@]
822 */
824WINAPI
826 _In_opt_ HMACHINE hMachine)
827{
831
832 TRACE("CMP_WaitServicesAvailable(%p)\n", hMachine);
833
834 if (hMachine != NULL)
835 {
836 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
837 if (BindingHandle == NULL)
838 return CR_FAILURE;
839 }
840 else
841 {
843 return CR_FAILURE;
844 }
845
847 {
849 }
851 {
853 }
855
856 return ret;
857}
858
859
860/***********************************************************************
861 * CM_Add_Empty_Log_Conf [SETUPAPI.@]
862 */
864WINAPI
866 _Out_ PLOG_CONF plcLogConf,
867 _In_ DEVINST dnDevInst,
869 _In_ ULONG ulFlags)
870{
871 TRACE("CM_Add_Empty_Log_Conf(%p %p %lu %lx)\n",
872 plcLogConf, dnDevInst, Priority, ulFlags);
873
874 return CM_Add_Empty_Log_Conf_Ex(plcLogConf, dnDevInst, Priority,
875 ulFlags, NULL);
876}
877
878
879/***********************************************************************
880 * CM_Add_Empty_Log_Conf_Ex [SETUPAPI.@]
881 */
883WINAPI
885 _Out_ PLOG_CONF plcLogConf,
886 _In_ DEVINST dnDevInst,
888 _In_ ULONG ulFlags,
889 _In_opt_ HMACHINE hMachine)
890{
892 HSTRING_TABLE StringTable = NULL;
893 ULONG ulLogConfTag = 0;
894 LPWSTR lpDevInst;
895 PLOG_CONF_INFO pLogConfInfo;
897
898 FIXME("CM_Add_Empty_Log_Conf_Ex(%p %p %lu %lx %p)\n",
899 plcLogConf, dnDevInst, Priority, ulFlags, hMachine);
900
901 if (!pSetupIsUserAdmin())
902 return CR_ACCESS_DENIED;
903
904 if (plcLogConf == NULL)
905 return CR_INVALID_POINTER;
906
907 if (dnDevInst == 0)
908 return CR_INVALID_DEVINST;
909
910 if (Priority > 0xFFFF)
911 return CR_INVALID_PRIORITY;
912
913 if (ulFlags & ~(LOG_CONF_BITS | PRIORITY_BIT))
914 return CR_INVALID_FLAG;
915
916 if (hMachine != NULL)
917 {
918 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
919 if (BindingHandle == NULL)
920 return CR_FAILURE;
921
922 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
923 if (StringTable == 0)
924 return CR_FAILURE;
925 }
926 else
927 {
928 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
929 return CR_FAILURE;
930 }
931
932 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
933 if (lpDevInst == NULL)
934 return CR_INVALID_DEVNODE;
935
937 {
939 &ulLogConfTag, ulFlags);
940 }
942 {
944 }
946
947 if (ret == CR_SUCCESS)
948 {
949 pLogConfInfo = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_CONF_INFO));
950 if (pLogConfInfo == NULL)
951 {
953 }
954 else
955 {
956 pLogConfInfo->ulMagic = LOG_CONF_MAGIC;
957 pLogConfInfo->dnDevInst = dnDevInst;
958 pLogConfInfo->ulType = ulFlags;
959 pLogConfInfo->ulTag = ulLogConfTag;
960
961 *plcLogConf = (LOG_CONF)pLogConfInfo;
962
963 ret = CR_SUCCESS;
964 }
965 }
966
967 return ret;
968}
969
970
971/***********************************************************************
972 * CM_Add_IDA [SETUPAPI.@]
973 */
975WINAPI
977 _In_ DEVINST dnDevInst,
978 _In_ PSTR pszID,
979 _In_ ULONG ulFlags)
980{
981 TRACE("CM_Add_IDA(%p %s %lx)\n",
982 dnDevInst, debugstr_a(pszID), ulFlags);
983
984 return CM_Add_ID_ExA(dnDevInst, pszID, ulFlags, NULL);
985}
986
987
988/***********************************************************************
989 * CM_Add_IDW [SETUPAPI.@]
990 */
992WINAPI
994 _In_ DEVINST dnDevInst,
995 _In_ PWSTR pszID,
996 _In_ ULONG ulFlags)
997{
998 TRACE("CM_Add_IDW(%p %s %lx)\n",
999 dnDevInst, debugstr_w(pszID), ulFlags);
1000
1001 return CM_Add_ID_ExW(dnDevInst, pszID, ulFlags, NULL);
1002}
1003
1004
1005/***********************************************************************
1006 * CM_Add_ID_ExA [SETUPAPI.@]
1007 */
1009WINAPI
1011 _In_ DEVINST dnDevInst,
1012 _In_ PSTR pszID,
1013 _In_ ULONG ulFlags,
1014 _In_opt_ HMACHINE hMachine)
1015{
1016 PWSTR pszIDW;
1017 CONFIGRET ret;
1018
1019 TRACE("CM_Add_ID_ExA(%p %s %lx %p)\n",
1020 dnDevInst, debugstr_a(pszID), ulFlags, hMachine);
1021
1022 if (pSetupCaptureAndConvertAnsiArg(pszID, &pszIDW))
1023 return CR_INVALID_DATA;
1024
1025 ret = CM_Add_ID_ExW(dnDevInst, pszIDW, ulFlags, hMachine);
1026
1027 MyFree(pszIDW);
1028
1029 return ret;
1030}
1031
1032
1033/***********************************************************************
1034 * CM_Add_ID_ExW [SETUPAPI.@]
1035 */
1037WINAPI
1039 _In_ DEVINST dnDevInst,
1040 _In_ PWSTR pszID,
1041 _In_ ULONG ulFlags,
1042 _In_opt_ HMACHINE hMachine)
1043{
1045 HSTRING_TABLE StringTable = NULL;
1046 LPWSTR lpDevInst;
1047 CONFIGRET ret;
1048
1049 TRACE("CM_Add_ID_ExW(%p %s %lx %p)\n",
1050 dnDevInst, debugstr_w(pszID), ulFlags, hMachine);
1051
1052 if (!pSetupIsUserAdmin())
1053 return CR_ACCESS_DENIED;
1054
1055 if (dnDevInst == 0)
1056 return CR_INVALID_DEVINST;
1057
1058 if (pszID == NULL)
1059 return CR_INVALID_POINTER;
1060
1061 if (ulFlags & ~CM_ADD_ID_BITS)
1062 return CR_INVALID_FLAG;
1063
1064 if (hMachine != NULL)
1065 {
1066 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
1067 if (BindingHandle == NULL)
1068 return CR_FAILURE;
1069
1070 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
1071 if (StringTable == 0)
1072 return CR_FAILURE;
1073 }
1074 else
1075 {
1076 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
1077 return CR_FAILURE;
1078 }
1079
1080 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
1081 if (lpDevInst == NULL)
1082 return CR_INVALID_DEVNODE;
1083
1085 {
1087 lpDevInst,
1088 pszID,
1089 ulFlags);
1090 }
1092 {
1094 }
1096
1097 return ret;
1098}
1099
1100
1101/***********************************************************************
1102 * CM_Add_Range [SETUPAPI.@]
1103 */
1105WINAPI
1107 _In_ DWORDLONG ullStartValue,
1108 _In_ DWORDLONG ullEndValue,
1109 _In_ RANGE_LIST rlh,
1110 _In_ ULONG ulFlags)
1111{
1112 PINTERNAL_RANGE_LIST pRangeList;
1113 PINTERNAL_RANGE pRange;
1115
1116 FIXME("CM_Add_Range(%I64u %I64u %p %lx)\n",
1117 ullStartValue, ullEndValue, rlh, ulFlags);
1118
1119 pRangeList = (PINTERNAL_RANGE_LIST)rlh;
1120
1121 if (!IsValidRangeList(pRangeList))
1122 return CR_INVALID_RANGE_LIST;
1123
1124 if (ulFlags & ~CM_ADD_RANGE_BITS)
1125 return CR_INVALID_FLAG;
1126
1127 if (ullEndValue < ullStartValue)
1128 return CR_INVALID_RANGE;
1129
1130 /* Lock the range list */
1131 WaitForSingleObject(pRangeList->hMutex, INFINITE);
1132
1133 /* Allocate the new range */
1134 pRange = HeapAlloc(GetProcessHeap(), 0, sizeof(INTERNAL_RANGE));
1135 if (pRange == NULL)
1136 {
1138 goto done;
1139 }
1140
1141 pRange->pRangeList = pRangeList;
1142 pRange->ullStart = ullStartValue;
1143 pRange->ullEnd = ullEndValue;
1144
1145 /* Insert the range */
1146 if (IsListEmpty(&pRangeList->ListHead))
1147 {
1148 InsertTailList(&pRangeList->ListHead, &pRange->ListEntry);
1149 }
1150 else
1151 {
1152 HeapFree(GetProcessHeap(), 0, pRange);
1154 }
1155
1156done:
1157 /* Unlock the range list */
1158 ReleaseMutex(pRangeList->hMutex);
1159
1160 return ret;
1161}
1162
1163
1164/***********************************************************************
1165 * CM_Add_Res_Des [SETUPAPI.@]
1166 */
1168WINAPI
1170 _Out_opt_ PRES_DES prdResDes,
1171 _In_ LOG_CONF lcLogConf,
1172 _In_ RESOURCEID ResourceID,
1173 _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
1174 _In_ ULONG ResourceLen,
1175 _In_ ULONG ulFlags)
1176{
1177 TRACE("CM_Add_Res_Des(%p %p %lu %p %lu %lx)\n",
1178 prdResDes, lcLogConf, ResourceID, ResourceData, ResourceLen, ulFlags);
1179
1180 return CM_Add_Res_Des_Ex(prdResDes, lcLogConf, ResourceID, ResourceData,
1181 ResourceLen, ulFlags, NULL);
1182}
1183
1184
1185/***********************************************************************
1186 * CM_Add_Res_Des_Ex [SETUPAPI.@]
1187 */
1189WINAPI
1191 _Out_opt_ PRES_DES prdResDes,
1192 _In_ LOG_CONF lcLogConf,
1193 _In_ RESOURCEID ResourceID,
1194 _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
1195 _In_ ULONG ResourceLen,
1196 _In_ ULONG ulFlags,
1197 _In_opt_ HMACHINE hMachine)
1198{
1199 FIXME("CM_Add_Res_Des_Ex(%p %p %lu %p %lu %lx %p)\n",
1200 prdResDes, lcLogConf, ResourceID,
1201 ResourceData, ResourceLen, ulFlags, hMachine);
1202
1204}
1205
1206
1207/***********************************************************************
1208 * CM_Connect_MachineA [SETUPAPI.@]
1209 */
1211WINAPI
1213 _In_opt_ PCSTR UNCServerName,
1214 _Out_ PHMACHINE phMachine)
1215{
1216 PWSTR pServerNameW;
1217 CONFIGRET ret;
1218
1219 TRACE("CM_Connect_MachineA(%s %p)\n",
1220 debugstr_a(UNCServerName), phMachine);
1221
1222 if (UNCServerName == NULL || *UNCServerName == 0)
1223 return CM_Connect_MachineW(NULL, phMachine);
1224
1225 if (pSetupCaptureAndConvertAnsiArg(UNCServerName, &pServerNameW))
1226 return CR_INVALID_DATA;
1227
1228 ret = CM_Connect_MachineW(pServerNameW, phMachine);
1229
1230 MyFree(pServerNameW);
1231
1232 return ret;
1233}
1234
1235
1236/***********************************************************************
1237 * CM_Connect_MachineW [SETUPAPI.@]
1238 */
1240WINAPI
1242 _In_opt_ PCWSTR UNCServerName,
1243 _Out_ PHMACHINE phMachine)
1244{
1245 PMACHINE_INFO pMachine;
1246
1247 TRACE("CM_Connect_MachineW(%s %p)\n",
1248 debugstr_w(UNCServerName), phMachine);
1249
1250 if (phMachine == NULL)
1251 return CR_INVALID_POINTER;
1252
1253 *phMachine = NULL;
1254
1255 pMachine = HeapAlloc(GetProcessHeap(), 0, sizeof(MACHINE_INFO));
1256 if (pMachine == NULL)
1257 return CR_OUT_OF_MEMORY;
1258
1259 if (UNCServerName == NULL || *UNCServerName == 0)
1260 {
1261 pMachine->bLocal = TRUE;
1262
1263 /* FIXME: store the computers name in pMachine->szMachineName */
1264
1265 if (!PnpGetLocalHandles(&pMachine->BindingHandle,
1266 &pMachine->StringTable))
1267 {
1268 HeapFree(GetProcessHeap(), 0, pMachine);
1269 return CR_FAILURE;
1270 }
1271 }
1272 else
1273 {
1274 pMachine->bLocal = FALSE;
1275 if (wcslen(UNCServerName) >= SP_MAX_MACHINENAME_LENGTH - 1)
1276 {
1277 HeapFree(GetProcessHeap(), 0, pMachine);
1279 }
1280 lstrcpyW(pMachine->szMachineName, UNCServerName);
1281
1283 if (pMachine->StringTable == NULL)
1284 {
1285 HeapFree(GetProcessHeap(), 0, pMachine);
1286 return CR_FAILURE;
1287 }
1288
1289 pSetupStringTableAddString(pMachine->StringTable, L"PLT", 1);
1290
1291 if (!PnpBindRpc(UNCServerName, &pMachine->BindingHandle))
1292 {
1294 HeapFree(GetProcessHeap(), 0, pMachine);
1296 }
1297 }
1298
1299 *phMachine = (PHMACHINE)pMachine;
1300
1301 return CR_SUCCESS;
1302}
1303
1304
1305/***********************************************************************
1306 * CM_Create_DevNodeA [SETUPAPI.@]
1307 */
1309WINAPI
1311 _Out_ PDEVINST pdnDevInst,
1312 _In_ DEVINSTID_A pDeviceID,
1313 _In_ DEVINST dnParent,
1314 _In_ ULONG ulFlags)
1315{
1316 TRACE("CM_Create_DevNodeA(%p %s %p %lx)\n",
1317 pdnDevInst, debugstr_a(pDeviceID), dnParent, ulFlags);
1318
1319 return CM_Create_DevNode_ExA(pdnDevInst, pDeviceID, dnParent,
1320 ulFlags, NULL);
1321}
1322
1323
1324/***********************************************************************
1325 * CM_Create_DevNodeW [SETUPAPI.@]
1326 */
1328WINAPI
1330 _Out_ PDEVINST pdnDevInst,
1331 _In_ DEVINSTID_W pDeviceID,
1332 _In_ DEVINST dnParent,
1333 _In_ ULONG ulFlags)
1334{
1335 TRACE("CM_Create_DevNodeW(%p %s %p %lx)\n",
1336 pdnDevInst, debugstr_w(pDeviceID), dnParent, ulFlags);
1337
1338 return CM_Create_DevNode_ExW(pdnDevInst, pDeviceID, dnParent,
1339 ulFlags, NULL);
1340}
1341
1342
1343/***********************************************************************
1344 * CM_Create_DevNode_ExA [SETUPAPI.@]
1345 */
1347WINAPI
1349 _Out_ PDEVINST pdnDevInst,
1350 _In_ DEVINSTID_A pDeviceID,
1351 _In_ DEVINST dnParent,
1352 _In_ ULONG ulFlags,
1353 _In_opt_ HANDLE hMachine)
1354{
1355 DEVINSTID_W pDeviceIDW;
1356 CONFIGRET ret;
1357
1358 TRACE("CM_Create_DevNode_ExA(%p %s %p %lx %p)\n",
1359 pdnDevInst, debugstr_a(pDeviceID), dnParent, ulFlags, hMachine);
1360
1361 if (pSetupCaptureAndConvertAnsiArg(pDeviceID, &pDeviceIDW))
1362 return CR_INVALID_DATA;
1363
1364 ret = CM_Create_DevNode_ExW(pdnDevInst, pDeviceIDW, dnParent, ulFlags,
1365 hMachine);
1366
1367 MyFree(pDeviceIDW);
1368
1369 return ret;
1370}
1371
1372
1373/***********************************************************************
1374 * CM_Create_DevNode_ExW [SETUPAPI.@]
1375 */
1377WINAPI
1379 _Out_ PDEVINST pdnDevInst,
1380 _In_ DEVINSTID_W pDeviceID,
1381 _In_ DEVINST dnParent,
1382 _In_ ULONG ulFlags,
1383 _In_opt_ HANDLE hMachine)
1384{
1386 HSTRING_TABLE StringTable = NULL;
1387 LPWSTR lpParentDevInst;
1389 WCHAR szLocalDeviceID[MAX_DEVICE_ID_LEN];
1390
1391 TRACE("CM_Create_DevNode_ExW(%p %s %p %lx %p)\n",
1392 pdnDevInst, debugstr_w(pDeviceID), dnParent, ulFlags, hMachine);
1393
1394 if (!pSetupIsUserAdmin())
1395 return CR_ACCESS_DENIED;
1396
1397 if (pdnDevInst == NULL)
1398 return CR_INVALID_POINTER;
1399
1400 if (pDeviceID == NULL || wcslen(pDeviceID) == 0 || wcslen(pDeviceID) >= MAX_DEVICE_ID_LEN)
1401 return CR_INVALID_DEVICE_ID;
1402
1403 if (dnParent == 0)
1404 return CR_INVALID_DEVNODE;
1405
1406 if (ulFlags & ~CM_CREATE_DEVNODE_BITS)
1407 return CR_INVALID_FLAG;
1408
1409 if (hMachine != NULL)
1410 {
1411 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
1412 if (BindingHandle == NULL)
1413 return CR_FAILURE;
1414
1415 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
1416 if (StringTable == 0)
1417 return CR_FAILURE;
1418 }
1419 else
1420 {
1421 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
1422 return CR_FAILURE;
1423 }
1424
1425 lpParentDevInst = pSetupStringTableStringFromId(StringTable, dnParent);
1426 if (lpParentDevInst == NULL)
1427 return CR_INVALID_DEVNODE;
1428
1429 wcscpy(szLocalDeviceID, pDeviceID);
1430
1432 {
1434 szLocalDeviceID,
1435 lpParentDevInst,
1437 ulFlags);
1438 }
1440 {
1442 }
1444
1445 if (ret == CR_SUCCESS)
1446 {
1447 /* If CM_CREATE_DEVINST_GENERATE_ID was passed in, PNP_CreateDevInst
1448 * will return the generated device ID in szLocalDeviceID */
1449 *pdnDevInst = pSetupStringTableAddString(StringTable, szLocalDeviceID, 1);
1450 if (*pdnDevInst == 0)
1452 }
1453
1454 return ret;
1455}
1456
1457
1458/***********************************************************************
1459 * CM_Create_Range_List [SETUPAPI.@]
1460 */
1462WINAPI
1464 _Out_ PRANGE_LIST prlh,
1465 _In_ ULONG ulFlags)
1466{
1467 PINTERNAL_RANGE_LIST pRangeList;
1468
1469 FIXME("CM_Create_Range_List(%p %lx)\n",
1470 prlh, ulFlags);
1471
1472 if (ulFlags != 0)
1473 return CR_INVALID_FLAG;
1474
1475 if (prlh == NULL)
1476 return CR_INVALID_POINTER;
1477
1478 /* Allocate the range list */
1480 if (pRangeList == NULL)
1481 return CR_OUT_OF_MEMORY;
1482
1483 /* Set the magic value */
1484 pRangeList->ulMagic = RANGE_LIST_MAGIC;
1485
1486 /* Initialize the mutex for synchonized access */
1487 pRangeList->hMutex = CreateMutex(NULL, FALSE, NULL);
1488 if (pRangeList->hMutex == NULL)
1489 {
1490 HeapFree(GetProcessHeap(), 0, pRangeList);
1491 return CR_FAILURE;
1492 }
1493
1494 InitializeListHead(&pRangeList->ListHead);
1495
1496 *prlh = (RANGE_LIST)pRangeList;
1497
1498 return CR_SUCCESS;
1499}
1500
1501
1502/***********************************************************************
1503 * CM_Delete_Class_Key [SETUPAPI.@]
1504 */
1506WINAPI
1508 _In_ LPGUID ClassGuid,
1509 _In_ ULONG ulFlags)
1510{
1511 TRACE("CM_Delete_Class_Key(%p %lx)\n",
1512 ClassGuid, ulFlags);
1513
1514 return CM_Delete_Class_Key_Ex(ClassGuid, ulFlags, NULL);
1515}
1516
1517
1518/***********************************************************************
1519 * CM_Delete_Class_Key_Ex [SETUPAPI.@]
1520 */
1522WINAPI
1524 _In_ LPGUID ClassGuid,
1525 _In_ ULONG ulFlags,
1526 _In_opt_ HANDLE hMachine)
1527{
1528 WCHAR szGuidString[MAX_GUID_STRING_LEN];
1530 CONFIGRET ret;
1531
1532 TRACE("CM_Delete_Class_Key_Ex(%p %lx %p)\n",
1533 ClassGuid, ulFlags, hMachine);
1534
1535 if (ClassGuid == NULL)
1536 return CR_INVALID_POINTER;
1537
1538 if (ulFlags & ~CM_DELETE_CLASS_BITS)
1539 return CR_INVALID_FLAG;
1540
1541 if (!GuidToString(ClassGuid, szGuidString))
1542 return CR_INVALID_DATA;
1543
1544 if (hMachine != NULL)
1545 {
1546 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
1547 if (BindingHandle == NULL)
1548 return CR_FAILURE;
1549 }
1550 else
1551 {
1553 return CR_FAILURE;
1554 }
1555
1557 {
1559 szGuidString,
1560 ulFlags);
1561 }
1563 {
1565 }
1567
1568 return ret;
1569}
1570
1571
1572/***********************************************************************
1573 * CM_Delete_DevNode_Key [SETUPAPI.@]
1574 */
1576WINAPI
1578 _In_ DEVINST dnDevInst,
1579 _In_ ULONG ulHardwareProfile,
1580 _In_ ULONG ulFlags)
1581{
1582 TRACE("CM_Delete_DevNode_Key(%p %lu %lx)\n",
1583 dnDevInst, ulHardwareProfile, ulFlags);
1584
1585 return CM_Delete_DevNode_Key_Ex(dnDevInst, ulHardwareProfile, ulFlags,
1586 NULL);
1587}
1588
1589
1590/***********************************************************************
1591 * CM_Delete_DevNode_Key_Ex [SETUPAPI.@]
1592 */
1594WINAPI
1596 _In_ DEVINST dnDevInst,
1597 _In_ ULONG ulHardwareProfile,
1598 _In_ ULONG ulFlags,
1599 _In_opt_ HANDLE hMachine)
1600{
1602 HSTRING_TABLE StringTable = NULL;
1603 PWSTR pszDevInst, pszKeyPath = NULL, pszInstancePath = NULL;
1604 CONFIGRET ret;
1605
1606 FIXME("CM_Delete_DevNode_Key_Ex(%p %lu %lx %p)\n",
1607 dnDevInst, ulHardwareProfile, ulFlags, hMachine);
1608
1609 if (dnDevInst == 0)
1610 return CR_INVALID_DEVINST;
1611
1612 if (ulFlags & ~CM_REGISTRY_BITS)
1613 return CR_INVALID_FLAG;
1614
1615 if ((ulFlags & CM_REGISTRY_USER) && (ulFlags & CM_REGISTRY_CONFIG))
1616 return CR_INVALID_FLAG;
1617
1618 if (hMachine != NULL)
1619 {
1620 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
1621 if (BindingHandle == NULL)
1622 return CR_FAILURE;
1623
1624 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
1625 if (StringTable == 0)
1626 return CR_FAILURE;
1627 }
1628 else
1629 {
1630 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
1631 return CR_FAILURE;
1632 }
1633
1634 pszDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
1635 if (pszDevInst == NULL)
1636 return CR_INVALID_DEVNODE;
1637
1638 TRACE("pszDevInst: %S\n", pszDevInst);
1639
1640 pszKeyPath = MyMalloc(512 * sizeof(WCHAR));
1641 if (pszKeyPath == NULL)
1642 {
1644 goto done;
1645 }
1646
1647 pszInstancePath = MyMalloc(512 * sizeof(WCHAR));
1648 if (pszInstancePath == NULL)
1649 {
1651 goto done;
1652 }
1653
1655 pszDevInst,
1656 pszKeyPath,
1657 pszInstancePath,
1658 ulHardwareProfile,
1659 ulFlags);
1660 if (ret != CR_SUCCESS)
1661 goto done;
1662
1663 TRACE("pszKeyPath: %S\n", pszKeyPath);
1664 TRACE("pszInstancePath: %S\n", pszInstancePath);
1665
1666 if (ulFlags & CM_REGISTRY_USER)
1667 {
1668 FIXME("The CM_REGISTRY_USER flag is not supported yet!\n");
1669 }
1670 else
1671 {
1672#if 0
1673 if (!pSetupIsUserAdmin())
1674 {
1676 goto done;
1677 }
1678#endif
1679
1680 if (!(ulFlags & CM_REGISTRY_CONFIG))
1681 ulHardwareProfile = 0;
1682
1684 {
1686 pszDevInst,
1687 pszKeyPath,
1688 pszInstancePath,
1689 ulHardwareProfile);
1690 }
1692 {
1694 }
1696 }
1697
1698done:
1699 if (pszInstancePath != NULL)
1700 MyFree(pszInstancePath);
1701
1702 if (pszKeyPath != NULL)
1703 MyFree(pszKeyPath);
1704
1705 return ret;
1706}
1707
1708
1709/***********************************************************************
1710 * CM_Delete_Range [SETUPAPI.@]
1711 */
1713WINAPI
1715 _In_ DWORDLONG ullStartValue,
1716 _In_ DWORDLONG ullEndValue,
1717 _In_ RANGE_LIST rlh,
1718 _In_ ULONG ulFlags)
1719{
1720 FIXME("CM_Delete_Range(%I64u %I64u %p %lx)\n",
1721 ullStartValue, ullEndValue, rlh, ulFlags);
1722
1724}
1725
1726
1727/***********************************************************************
1728 * CM_Detect_Resource_Conflict [SETUPAPI.@]
1729 */
1731WINAPI
1733 _In_ DEVINST dnDevInst,
1734 _In_ RESOURCEID ResourceID,
1735 _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
1736 _In_ ULONG ResourceLen,
1737 _Out_ PBOOL pbConflictDetected,
1738 _In_ ULONG ulFlags)
1739{
1740 TRACE("CM_Detect_Resource_Conflict(%p %lu %p %lu %p 0x%lx)\n",
1741 dnDevInst, ResourceID, ResourceData, ResourceLen,
1742 pbConflictDetected, ulFlags);
1743
1744 return CM_Detect_Resource_Conflict_Ex(dnDevInst,
1745 ResourceID,
1746 ResourceData,
1747 ResourceLen,
1748 pbConflictDetected,
1749 ulFlags,
1750 NULL);
1751}
1752
1753
1754/***********************************************************************
1755 * CM_Detect_Resource_Conflict_Ex [SETUPAPI.@]
1756 */
1758WINAPI
1760 _In_ DEVINST dnDevInst,
1761 _In_ RESOURCEID ResourceID,
1762 _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
1763 _In_ ULONG ResourceLen,
1764 _Out_ PBOOL pbConflictDetected,
1765 _In_ ULONG ulFlags,
1766 _In_opt_ HMACHINE hMachine)
1767{
1768 FIXME("CM_Detect_Resource_Conflict_Ex(%p %lu %p %lu %p 0x%lx %p)\n",
1769 dnDevInst, ResourceID, ResourceData, ResourceLen,
1770 pbConflictDetected, ulFlags, hMachine);
1771
1773}
1774
1775
1776/***********************************************************************
1777 * CM_Disable_DevNode [SETUPAPI.@]
1778 */
1780WINAPI
1782 _In_ DEVINST dnDevInst,
1783 _In_ ULONG ulFlags)
1784{
1785 TRACE("CM_Disable_DevNode(%p %lx)\n",
1786 dnDevInst, ulFlags);
1787
1788 return CM_Disable_DevNode_Ex(dnDevInst, ulFlags, NULL);
1789}
1790
1791
1792/***********************************************************************
1793 * CM_Disable_DevNode_Ex [SETUPAPI.@]
1794 */
1796WINAPI
1798 _In_ DEVINST dnDevInst,
1799 _In_ ULONG ulFlags,
1800 _In_opt_ HMACHINE hMachine)
1801{
1803 HSTRING_TABLE StringTable = NULL;
1804 LPWSTR lpDevInst;
1805 CONFIGRET ret;
1806
1807 TRACE("CM_Disable_DevNode_Ex(%p %lx %p)\n",
1808 dnDevInst, ulFlags, hMachine);
1809
1810 if (!pSetupIsUserAdmin())
1811 return CR_ACCESS_DENIED;
1812
1813 if (dnDevInst == 0)
1814 return CR_INVALID_DEVINST;
1815
1816 if (ulFlags != 0)
1817 return CR_INVALID_FLAG;
1818
1819 if (hMachine != NULL)
1820 {
1821 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
1822 if (BindingHandle == NULL)
1823 return CR_FAILURE;
1824
1825 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
1826 if (StringTable == 0)
1827 return CR_FAILURE;
1828 }
1829 else
1830 {
1831 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
1832 return CR_FAILURE;
1833 }
1834
1835 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
1836 if (lpDevInst == NULL)
1837 return CR_INVALID_DEVNODE;
1838
1840 {
1842 lpDevInst,
1843 NULL,
1844 NULL,
1845 0,
1846 ulFlags);
1847 }
1849 {
1851 }
1853
1854 return ret;
1855}
1856
1857
1858/***********************************************************************
1859 * CM_Disconnect_Machine [SETUPAPI.@]
1860 */
1862WINAPI
1864 _In_opt_ HMACHINE hMachine)
1865{
1866 PMACHINE_INFO pMachine;
1867
1868 TRACE("CM_Disconnect_Machine(%p)\n", hMachine);
1869
1870 pMachine = (PMACHINE_INFO)hMachine;
1871 if (pMachine == NULL)
1872 return CR_SUCCESS;
1873
1874 if (pMachine->bLocal == FALSE)
1875 {
1876 if (pMachine->StringTable != NULL)
1878
1879 if (!PnpUnbindRpc(pMachine->BindingHandle))
1880 return CR_ACCESS_DENIED;
1881 }
1882
1883 HeapFree(GetProcessHeap(), 0, pMachine);
1884
1885 return CR_SUCCESS;
1886}
1887
1888
1889/***********************************************************************
1890 * CM_Dup_Range_List [SETUPAPI.@]
1891 */
1893WINAPI
1895 _In_ RANGE_LIST rlhOld,
1896 _In_ RANGE_LIST rlhNew,
1897 _In_ ULONG ulFlags)
1898{
1899 FIXME("CM_Dup_Range_List(%p %p %lx)\n",
1900 rlhOld, rlhNew, ulFlags);
1901
1903}
1904
1905
1906/***********************************************************************
1907 * CM_Enable_DevNode [SETUPAPI.@]
1908 */
1910WINAPI
1912 _In_ DEVINST dnDevInst,
1913 _In_ ULONG ulFlags)
1914{
1915 TRACE("CM_Enable_DevNode(%p %lx)\n",
1916 dnDevInst, ulFlags);
1917
1918 return CM_Enable_DevNode_Ex(dnDevInst, ulFlags, NULL);
1919}
1920
1921
1922/***********************************************************************
1923 * CM_Enable_DevNode_Ex [SETUPAPI.@]
1924 */
1926WINAPI
1928 _In_ DEVINST dnDevInst,
1929 _In_ ULONG ulFlags,
1930 _In_opt_ HMACHINE hMachine)
1931{
1933 HSTRING_TABLE StringTable = NULL;
1934 LPWSTR lpDevInst;
1935 CONFIGRET ret;
1936
1937 TRACE("CM_Enable_DevNode_Ex(%p %lx %p)\n",
1938 dnDevInst, ulFlags, hMachine);
1939
1940 if (!pSetupIsUserAdmin())
1941 return CR_ACCESS_DENIED;
1942
1943 if (dnDevInst == 0)
1944 return CR_INVALID_DEVINST;
1945
1946 if (ulFlags != 0)
1947 return CR_INVALID_FLAG;
1948
1949 if (hMachine != NULL)
1950 {
1951 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
1952 if (BindingHandle == NULL)
1953 return CR_FAILURE;
1954
1955 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
1956 if (StringTable == 0)
1957 return CR_FAILURE;
1958 }
1959 else
1960 {
1961 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
1962 return CR_FAILURE;
1963 }
1964
1965 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
1966 if (lpDevInst == NULL)
1967 return CR_INVALID_DEVNODE;
1968
1970 {
1972 PNP_DEVINST_ENABLE,
1973 ulFlags,
1974 lpDevInst,
1975 NULL);
1976 }
1978 {
1980 }
1982
1983 return ret;
1984}
1985
1986
1987/***********************************************************************
1988 * CM_Enumerate_Classes [SETUPAPI.@]
1989 */
1991WINAPI
1993 _In_ ULONG ulClassIndex,
1994 _Out_ LPGUID ClassGuid,
1995 _In_ ULONG ulFlags)
1996{
1997 TRACE("CM_Enumerate_Classes(%lx %p %lx)\n",
1998 ulClassIndex, ClassGuid, ulFlags);
1999
2000 return CM_Enumerate_Classes_Ex(ulClassIndex, ClassGuid, ulFlags, NULL);
2001}
2002
2003
2004/***********************************************************************
2005 * CM_Enumerate_Classes_Ex [SETUPAPI.@]
2006 */
2008WINAPI
2010 _In_ ULONG ulClassIndex,
2011 _Out_ LPGUID ClassGuid,
2012 _In_ ULONG ulFlags,
2013 _In_opt_ HMACHINE hMachine)
2014{
2015 WCHAR szBuffer[MAX_GUID_STRING_LEN];
2018 ULONG ulLength = MAX_GUID_STRING_LEN;
2019
2020 TRACE("CM_Enumerate_Classes_Ex(%lx %p %lx %p)\n",
2021 ulClassIndex, ClassGuid, ulFlags, hMachine);
2022
2023 if (ClassGuid == NULL)
2024 return CR_INVALID_POINTER;
2025
2026 if (ulFlags != 0)
2027 return CR_INVALID_FLAG;
2028
2029 if (hMachine != NULL)
2030 {
2031 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
2032 if (BindingHandle == NULL)
2033 return CR_FAILURE;
2034 }
2035 else
2036 {
2038 return CR_FAILURE;
2039 }
2040
2042 {
2044 PNP_CLASS_SUBKEYS,
2045 ulClassIndex,
2046 szBuffer,
2048 &ulLength,
2049 ulFlags);
2050 }
2052 {
2054 }
2056
2057 if (ret == CR_SUCCESS)
2058 {
2059 /* Remove the {} */
2060 szBuffer[MAX_GUID_STRING_LEN - 2] = UNICODE_NULL;
2061
2062 /* Convert the buffer to a GUID */
2063 if (UuidFromStringW(&szBuffer[1], ClassGuid) != RPC_S_OK)
2064 return CR_FAILURE;
2065 }
2066
2067 return ret;
2068}
2069
2070
2071/***********************************************************************
2072 * CM_Enumerate_EnumeratorsA [SETUPAPI.@]
2073 */
2075WINAPI
2077 _In_ ULONG ulEnumIndex,
2078 _Out_writes_(*pulLength) PCHAR Buffer,
2079 _Inout_ PULONG pulLength,
2080 _In_ ULONG ulFlags)
2081{
2082 TRACE("CM_Enumerate_EnumeratorsA(%lu %p %p %lx)\n",
2083 ulEnumIndex, Buffer, pulLength, ulFlags);
2084
2085 return CM_Enumerate_Enumerators_ExA(ulEnumIndex, Buffer, pulLength,
2086 ulFlags, NULL);
2087}
2088
2089
2090/***********************************************************************
2091 * CM_Enumerate_EnumeratorsW [SETUPAPI.@]
2092 */
2094WINAPI
2096 _In_ ULONG ulEnumIndex,
2097 _Out_writes_(*pulLength) PWCHAR Buffer,
2098 _Inout_ PULONG pulLength,
2099 _In_ ULONG ulFlags)
2100{
2101 TRACE("CM_Enumerate_EnumeratorsW(%lu %p %p %lx)\n",
2102 ulEnumIndex, Buffer, pulLength, ulFlags);
2103
2104 return CM_Enumerate_Enumerators_ExW(ulEnumIndex, Buffer, pulLength,
2105 ulFlags, NULL);
2106}
2107
2108
2109/***********************************************************************
2110 * CM_Enumerate_Enumerators_ExA [SETUPAPI.@]
2111 */
2113WINAPI
2115 _In_ ULONG ulEnumIndex,
2116 _Out_writes_(*pulLength) PCHAR Buffer,
2117 _Inout_ PULONG pulLength,
2118 _In_ ULONG ulFlags,
2119 _In_opt_ HMACHINE hMachine)
2120{
2121 WCHAR szBuffer[MAX_DEVICE_ID_LEN];
2122 ULONG ulOrigLength;
2123 ULONG ulLength;
2125
2126 TRACE("CM_Enumerate_Enumerators_ExA(%lu %p %p %lx %p)\n",
2127 ulEnumIndex, Buffer, pulLength, ulFlags, hMachine);
2128
2129 if (Buffer == NULL || pulLength == NULL)
2130 return CR_INVALID_POINTER;
2131
2132 if (ulFlags != 0)
2133 return CR_INVALID_FLAG;
2134
2135 ulOrigLength = *pulLength;
2136 *pulLength = 0;
2137
2138 ulLength = MAX_DEVICE_ID_LEN;
2139 ret = CM_Enumerate_Enumerators_ExW(ulEnumIndex, szBuffer, &ulLength,
2140 ulFlags, hMachine);
2141 if (ret == CR_SUCCESS)
2142 {
2144 0,
2145 szBuffer,
2146 ulLength,
2147 Buffer,
2148 ulOrigLength,
2149 NULL,
2150 NULL) == 0)
2151 ret = CR_FAILURE;
2152 else
2153 *pulLength = lstrlenA(Buffer) + 1;
2154 }
2155
2156 return ret;
2157}
2158
2159
2160/***********************************************************************
2161 * CM_Enumerate_Enumerators_ExW [SETUPAPI.@]
2162 */
2164WINAPI
2166 _In_ ULONG ulEnumIndex,
2167 _Out_writes_(*pulLength) PWCHAR Buffer,
2168 _Inout_ PULONG pulLength,
2169 _In_ ULONG ulFlags,
2170 _In_opt_ HMACHINE hMachine)
2171{
2173 CONFIGRET ret;
2174
2175 TRACE("CM_Enumerate_Enumerators_ExW(%lu %p %p %lx %p)\n",
2176 ulEnumIndex, Buffer, pulLength, ulFlags, hMachine);
2177
2178 if (Buffer == NULL || pulLength == NULL)
2179 return CR_INVALID_POINTER;
2180
2181 if (ulFlags != 0)
2182 return CR_INVALID_FLAG;
2183
2185
2186 if (hMachine != NULL)
2187 {
2188 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
2189 if (BindingHandle == NULL)
2190 return CR_FAILURE;
2191 }
2192 else
2193 {
2195 return CR_FAILURE;
2196 }
2197
2199 {
2201 PNP_ENUMERATOR_SUBKEYS,
2202 ulEnumIndex,
2203 Buffer,
2204 *pulLength,
2205 pulLength,
2206 ulFlags);
2207 }
2209 {
2211 }
2213
2214 return ret;
2215}
2216
2217
2218/***********************************************************************
2219 * CM_Find_Range [SETUPAPI.@]
2220 */
2222WINAPI
2224 _Out_ PDWORDLONG pullStart,
2225 _In_ DWORDLONG ullStart,
2226 _In_ ULONG ulLength,
2227 _In_ DWORDLONG ullAlignment,
2228 _In_ DWORDLONG ullEnd,
2229 _In_ RANGE_LIST rlh,
2230 _In_ ULONG ulFlags)
2231{
2232 FIXME("CM_Find_Range(%p %I64u %lu %I64u %I64u %p %lx)\n",
2233 pullStart, ullStart, ulLength, ullAlignment, ullEnd, rlh, ulFlags);
2234
2236}
2237
2238
2239/***********************************************************************
2240 * CM_First_Range [SETUPAPI.@]
2241 */
2243WINAPI
2245 _In_ RANGE_LIST rlh,
2246 _Out_ PDWORDLONG pullStart,
2247 _Out_ PDWORDLONG pullEnd,
2248 _Out_ PRANGE_ELEMENT preElement,
2249 _In_ ULONG ulFlags)
2250{
2251 PINTERNAL_RANGE_LIST pRangeList;
2252 PINTERNAL_RANGE pRange;
2253 PLIST_ENTRY ListEntry;
2255
2256 FIXME("CM_First_Range(%p %p %p %p %lx)\n",
2257 rlh, pullStart, pullEnd, preElement, ulFlags);
2258
2259 pRangeList = (PINTERNAL_RANGE_LIST)rlh;
2260
2261 if (!IsValidRangeList(pRangeList))
2262 return CR_INVALID_RANGE_LIST;
2263
2264 if (pullStart == NULL || pullEnd == NULL || preElement == NULL)
2265 return CR_INVALID_POINTER;
2266
2267 if (ulFlags != 0)
2268 return CR_INVALID_FLAG;
2269
2270 /* Lock the range list */
2271 WaitForSingleObject(pRangeList->hMutex, INFINITE);
2272
2273 /* Fail, if the list is empty */
2274 if (IsListEmpty(&pRangeList->ListHead))
2275 {
2276 ret = CR_FAILURE;
2277 goto done;
2278 }
2279
2280 /* Get the first range */
2281 ListEntry = pRangeList->ListHead.Flink;
2282 pRange = CONTAINING_RECORD(ListEntry, INTERNAL_RANGE, ListEntry);
2283
2284 /* Return the range data */
2285 *pullStart = pRange->ullStart;
2286 *pullEnd = pRange->ullEnd;
2287 *preElement = (RANGE_ELEMENT)pRange;
2288
2289done:
2290 /* Unlock the range list */
2291 ReleaseMutex(pRangeList->hMutex);
2292
2293 return ret;
2294}
2295
2296
2297/***********************************************************************
2298 * CM_Free_Log_Conf [SETUPAPI.@]
2299 */
2301WINAPI
2303 _In_ LOG_CONF lcLogConfToBeFreed,
2304 _In_ ULONG ulFlags)
2305{
2306 TRACE("CM_Free_Log_Conf(%lx %lx)\n",
2307 lcLogConfToBeFreed, ulFlags);
2308
2309 return CM_Free_Log_Conf_Ex(lcLogConfToBeFreed, ulFlags, NULL);
2310}
2311
2312
2313/***********************************************************************
2314 * CM_Free_Log_Conf_Ex [SETUPAPI.@]
2315 */
2317WINAPI
2319 _In_ LOG_CONF lcLogConfToBeFreed,
2320 _In_ ULONG ulFlags,
2321 _In_opt_ HMACHINE hMachine)
2322{
2324 HSTRING_TABLE StringTable = NULL;
2325 LPWSTR lpDevInst;
2326 PLOG_CONF_INFO pLogConfInfo;
2327 CONFIGRET ret;
2328
2329 TRACE("CM_Free_Log_Conf_Ex(%lx %lx %p)\n",
2330 lcLogConfToBeFreed, ulFlags, hMachine);
2331
2332 if (!pSetupIsUserAdmin())
2333 return CR_ACCESS_DENIED;
2334
2335 pLogConfInfo = (PLOG_CONF_INFO)lcLogConfToBeFreed;
2336 if (!IsValidLogConf(pLogConfInfo))
2337 return CR_INVALID_LOG_CONF;
2338
2339 if (ulFlags != 0)
2340 return CR_INVALID_FLAG;
2341
2342 if (hMachine != NULL)
2343 {
2344 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
2345 if (BindingHandle == NULL)
2346 return CR_FAILURE;
2347
2348 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
2349 if (StringTable == 0)
2350 return CR_FAILURE;
2351 }
2352 else
2353 {
2354 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
2355 return CR_FAILURE;
2356 }
2357
2358 lpDevInst = pSetupStringTableStringFromId(StringTable, pLogConfInfo->dnDevInst);
2359 if (lpDevInst == NULL)
2360 return CR_INVALID_DEVNODE;
2361
2363 {
2365 lpDevInst,
2366 pLogConfInfo->ulType,
2367 pLogConfInfo->ulTag,
2368 0);
2369 }
2371 {
2373 }
2375
2376 return ret;
2377}
2378
2379
2380/***********************************************************************
2381 * CM_Free_Log_Conf_Handle [SETUPAPI.@]
2382 */
2384WINAPI
2386 _In_ LOG_CONF lcLogConf)
2387{
2388 PLOG_CONF_INFO pLogConfInfo;
2389
2390 TRACE("CM_Free_Log_Conf_Handle(%lx)\n", lcLogConf);
2391
2392 pLogConfInfo = (PLOG_CONF_INFO)lcLogConf;
2393 if (!IsValidLogConf(pLogConfInfo))
2394 return CR_INVALID_LOG_CONF;
2395
2396 HeapFree(GetProcessHeap(), 0, pLogConfInfo);
2397
2398 return CR_SUCCESS;
2399}
2400
2401
2402/***********************************************************************
2403 * CM_Free_Range_List [SETUPAPI.@]
2404 */
2406WINAPI
2408 _In_ RANGE_LIST RangeList,
2409 _In_ ULONG ulFlags)
2410{
2411 PINTERNAL_RANGE_LIST pRangeList;
2412 PINTERNAL_RANGE pRange;
2413 PLIST_ENTRY ListEntry;
2414
2415 FIXME("CM_Free_Range_List(%p %lx)\n",
2416 RangeList, ulFlags);
2417
2418 pRangeList = (PINTERNAL_RANGE_LIST)RangeList;
2419
2420 if (!IsValidRangeList(pRangeList))
2421 return CR_INVALID_RANGE_LIST;
2422
2423 if (ulFlags != 0)
2424 return CR_INVALID_FLAG;
2425
2426 /* Lock the range list */
2427 WaitForSingleObject(pRangeList->hMutex, INFINITE);
2428
2429 /* Free the list of ranges */
2430 while (!IsListEmpty(&pRangeList->ListHead))
2431 {
2432 ListEntry = RemoveHeadList(&pRangeList->ListHead);
2433 pRange = CONTAINING_RECORD(ListEntry, INTERNAL_RANGE, ListEntry);
2434 HeapFree(GetProcessHeap(), 0, pRange);
2435 }
2436
2437 /* Unlock the range list */
2438 ReleaseMutex(pRangeList->hMutex);
2439
2440 /* Close the mutex */
2441 CloseHandle(pRangeList->hMutex);
2442
2443 /* Free the range list */
2444 HeapFree(GetProcessHeap(), 0, pRangeList);
2445
2446 return CR_SUCCESS;
2447}
2448
2449
2450/***********************************************************************
2451 * CM_Free_Res_Des [SETUPAPI.@]
2452 */
2454WINAPI
2456 _Out_ PRES_DES prdResDes,
2457 _In_ RES_DES rdResDes,
2458 _In_ ULONG ulFlags)
2459{
2460 TRACE("CM_Free_Res_Des(%p %p %lx)\n",
2461 prdResDes, rdResDes, ulFlags);
2462
2463 return CM_Free_Res_Des_Ex(prdResDes, rdResDes, ulFlags, NULL);
2464}
2465
2466
2467/***********************************************************************
2468 * CM_Free_Res_Des_Ex [SETUPAPI.@]
2469 */
2471WINAPI
2473 _Out_ PRES_DES prdResDes,
2474 _In_ RES_DES rdResDes,
2475 _In_ ULONG ulFlags,
2476 _In_opt_ HMACHINE hMachine)
2477{
2478 FIXME("CM_Free_Res_Des_Ex(%p %p %lx %p)\n",
2479 prdResDes, rdResDes, ulFlags, hMachine);
2480
2482}
2483
2484
2485/***********************************************************************
2486 * CM_Free_Res_Des_Handle [SETUPAPI.@]
2487 */
2489WINAPI
2491 _In_ RES_DES rdResDes)
2492{
2493 FIXME("CM_Free_Res_Des_Handle(%p)\n", rdResDes);
2494
2496}
2497
2498
2499/***********************************************************************
2500 * CM_Free_Resource_Conflict_Handle [SETUPAPI.@]
2501 */
2503WINAPI
2505 _In_ CONFLICT_LIST clConflictList)
2506{
2507 PCONFLICT_DATA pConflictData;
2508
2509 FIXME("CM_Free_Resource_Conflict_Handle(%p)\n",
2510 clConflictList);
2511
2512 pConflictData = (PCONFLICT_DATA)clConflictList;
2513 if (!IsValidConflictData(pConflictData))
2515
2516 if (pConflictData->pConflictList != NULL)
2517 MyFree(pConflictData->pConflictList);
2518
2519 MyFree(pConflictData);
2520
2521 return CR_SUCCESS;
2522}
2523
2524
2525/***********************************************************************
2526 * CM_Get_Child [SETUPAPI.@]
2527 */
2529WINAPI
2531 _Out_ PDEVINST pdnDevInst,
2532 _In_ DEVINST dnDevInst,
2533 _In_ ULONG ulFlags)
2534{
2535 TRACE("CM_Get_Child(%p %p %lx)\n",
2536 pdnDevInst, dnDevInst, ulFlags);
2537
2538 return CM_Get_Child_Ex(pdnDevInst, dnDevInst, ulFlags, NULL);
2539}
2540
2541
2542/***********************************************************************
2543 * CM_Get_Child_Ex [SETUPAPI.@]
2544 */
2546WINAPI
2548 _Out_ PDEVINST pdnDevInst,
2549 _In_ DEVINST dnDevInst,
2550 _In_ ULONG ulFlags,
2551 _In_opt_ HMACHINE hMachine)
2552{
2553 WCHAR szRelatedDevInst[MAX_DEVICE_ID_LEN];
2555 HSTRING_TABLE StringTable = NULL;
2556 LPWSTR lpDevInst;
2557 DWORD dwIndex, dwLength = MAX_DEVICE_ID_LEN;
2558 CONFIGRET ret;
2559
2560 TRACE("CM_Get_Child_Ex(%p %lx %lx %p)\n",
2561 pdnDevInst, dnDevInst, ulFlags, hMachine);
2562
2563 if (pdnDevInst == NULL)
2564 return CR_INVALID_POINTER;
2565
2566 if (dnDevInst == 0)
2567 return CR_INVALID_DEVINST;
2568
2569 if (ulFlags != 0)
2570 return CR_INVALID_FLAG;
2571
2572 *pdnDevInst = -1;
2573
2574 if (hMachine != NULL)
2575 {
2576 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
2577 if (BindingHandle == NULL)
2578 return CR_FAILURE;
2579
2580 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
2581 if (StringTable == 0)
2582 return CR_FAILURE;
2583 }
2584 else
2585 {
2586 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
2587 return CR_FAILURE;
2588 }
2589
2590 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
2591 if (lpDevInst == NULL)
2592 return CR_INVALID_DEVNODE;
2593
2595 {
2597 PNP_GET_CHILD_DEVICE_INSTANCE,
2598 lpDevInst,
2599 szRelatedDevInst,
2600 &dwLength,
2601 0);
2602 }
2604 {
2606 }
2608
2609 if (ret != CR_SUCCESS)
2610 return ret;
2611
2612 TRACE("szRelatedDevInst: %s\n", debugstr_w(szRelatedDevInst));
2613
2614 dwIndex = pSetupStringTableAddString(StringTable, szRelatedDevInst, 1);
2615 if (dwIndex == -1)
2616 return CR_FAILURE;
2617
2618 *pdnDevInst = dwIndex;
2619
2620 return CR_SUCCESS;
2621}
2622
2623
2624/***********************************************************************
2625 * CM_Get_Class_Key_NameA [SETUPAPI.@]
2626 */
2628WINAPI
2630 _In_ LPGUID ClassGuid,
2631 _Out_writes_opt_(*pulLength) LPSTR pszKeyName,
2632 _Inout_ PULONG pulLength,
2633 _In_ ULONG ulFlags)
2634{
2635 TRACE("CM_Get_Class_Key_NameA(%p %p %p %lx)\n",
2636 ClassGuid, pszKeyName, pulLength, ulFlags);
2637
2638 return CM_Get_Class_Key_Name_ExA(ClassGuid, pszKeyName, pulLength,
2639 ulFlags, NULL);
2640}
2641
2642
2643/***********************************************************************
2644 * CM_Get_Class_Key_NameW [SETUPAPI.@]
2645 */
2647WINAPI
2649 _In_ LPGUID ClassGuid,
2650 _Out_writes_opt_(*pulLength) LPWSTR pszKeyName,
2651 _Inout_ PULONG pulLength,
2652 _In_ ULONG ulFlags)
2653{
2654 TRACE("CM_Get_Class_Key_NameW(%p %p %p %lx)\n",
2655 ClassGuid, pszKeyName, pulLength, ulFlags);
2656
2657 return CM_Get_Class_Key_Name_ExW(ClassGuid, pszKeyName, pulLength,
2658 ulFlags, NULL);
2659}
2660
2661
2662/***********************************************************************
2663 * CM_Get_Class_Key_Name_ExA [SETUPAPI.@]
2664 */
2666WINAPI
2668 _In_ LPGUID ClassGuid,
2669 _Out_writes_opt_(*pulLength) LPSTR pszKeyName,
2670 _Inout_ PULONG pulLength,
2671 _In_ ULONG ulFlags,
2672 _In_opt_ HMACHINE hMachine)
2673{
2674 WCHAR szBuffer[MAX_GUID_STRING_LEN];
2676 ULONG ulLength;
2677 ULONG ulOrigLength;
2678
2679 TRACE("CM_Get_Class_Key_Name_ExA(%p %p %p %lx %p)\n",
2680 ClassGuid, pszKeyName, pulLength, ulFlags, hMachine);
2681
2682 if (ClassGuid == NULL || pszKeyName == NULL || pulLength == NULL)
2683 return CR_INVALID_POINTER;
2684
2685 ulOrigLength = *pulLength;
2686 *pulLength = 0;
2687
2688 ulLength = MAX_GUID_STRING_LEN;
2689 ret = CM_Get_Class_Key_Name_ExW(ClassGuid, szBuffer, &ulLength,
2690 ulFlags, hMachine);
2691 if (ret == CR_SUCCESS)
2692 {
2694 0,
2695 szBuffer,
2696 ulLength,
2697 pszKeyName,
2698 ulOrigLength,
2699 NULL,
2700 NULL) == 0)
2701 ret = CR_FAILURE;
2702 else
2703 *pulLength = lstrlenA(pszKeyName) + 1;
2704 }
2705
2706 return CR_SUCCESS;
2707}
2708
2709
2710/***********************************************************************
2711 * CM_Get_Class_Key_Name_ExW [SETUPAPI.@]
2712 */
2714WINAPI
2716 _In_ LPGUID ClassGuid,
2717 _Out_writes_opt_(*pulLength) LPWSTR pszKeyName,
2718 _Inout_ PULONG pulLength,
2719 _In_ ULONG ulFlags,
2720 _In_opt_ HMACHINE hMachine)
2721{
2722 TRACE("CM_Get_Class_Key_Name_ExW(%p %p %p %lx %p)\n",
2723 ClassGuid, pszKeyName, pulLength, ulFlags, hMachine);
2724
2725 if (ClassGuid == NULL || pszKeyName == NULL || pulLength == NULL)
2726 return CR_INVALID_POINTER;
2727
2728 if (ulFlags != 0)
2729 return CR_INVALID_FLAG;
2730
2731 if (*pulLength < MAX_GUID_STRING_LEN)
2732 {
2733 *pulLength = 0;
2734 return CR_BUFFER_SMALL;
2735 }
2736
2737 if (!GuidToString(ClassGuid, pszKeyName))
2738 return CR_INVALID_DATA;
2739
2740 *pulLength = MAX_GUID_STRING_LEN;
2741
2742 return CR_SUCCESS;
2743}
2744
2745
2746/***********************************************************************
2747 * CM_Get_Class_NameA [SETUPAPI.@]
2748 */
2750WINAPI
2752 _In_ LPGUID ClassGuid,
2753 _Out_writes_opt_(*pulLength) PCHAR Buffer,
2754 _Inout_ PULONG pulLength,
2755 _In_ ULONG ulFlags)
2756{
2757 TRACE("CM_Get_Class_NameA(%p %p %p %lx)\n",
2758 ClassGuid, Buffer, pulLength, ulFlags);
2759
2760 return CM_Get_Class_Name_ExA(ClassGuid, Buffer, pulLength, ulFlags,
2761 NULL);
2762}
2763
2764
2765/***********************************************************************
2766 * CM_Get_Class_NameW [SETUPAPI.@]
2767 */
2769WINAPI
2771 _In_ LPGUID ClassGuid,
2772 _Out_writes_opt_(*pulLength) PWCHAR Buffer,
2773 _Inout_ PULONG pulLength,
2774 _In_ ULONG ulFlags)
2775{
2776 TRACE("CM_Get_Class_NameW(%p %p %p %lx)\n",
2777 ClassGuid, Buffer, pulLength, ulFlags);
2778
2779 return CM_Get_Class_Name_ExW(ClassGuid, Buffer, pulLength, ulFlags,
2780 NULL);
2781}
2782
2783
2784/***********************************************************************
2785 * CM_Get_Class_Name_ExA [SETUPAPI.@]
2786 */
2788WINAPI
2790 _In_ LPGUID ClassGuid,
2791 _Out_writes_opt_(*pulLength) PCHAR Buffer,
2792 _Inout_ PULONG pulLength,
2793 _In_ ULONG ulFlags,
2794 _In_opt_ HMACHINE hMachine)
2795{
2796 WCHAR szBuffer[MAX_CLASS_NAME_LEN];
2798 ULONG ulLength;
2799 ULONG ulOrigLength;
2800
2801 TRACE("CM_Get_Class_Name_ExA(%p %p %p %lx %p)\n",
2802 ClassGuid, Buffer, pulLength, ulFlags, hMachine);
2803
2804 if (ClassGuid == NULL || Buffer == NULL || pulLength == NULL)
2805 return CR_INVALID_POINTER;
2806
2807 ulOrigLength = *pulLength;
2808 *pulLength = 0;
2809
2810 ulLength = MAX_CLASS_NAME_LEN;
2811 ret = CM_Get_Class_Name_ExW(ClassGuid, szBuffer, &ulLength,
2812 ulFlags, hMachine);
2813 if (ret == CR_SUCCESS)
2814 {
2816 0,
2817 szBuffer,
2818 ulLength,
2819 Buffer,
2820 ulOrigLength,
2821 NULL,
2822 NULL) == 0)
2823 ret = CR_FAILURE;
2824 else
2825 *pulLength = lstrlenA(Buffer) + 1;
2826 }
2827
2828 return ret;
2829}
2830
2831
2832/***********************************************************************
2833 * CM_Get_Class_Name_ExW [SETUPAPI.@]
2834 */
2836WINAPI
2838 _In_ LPGUID ClassGuid,
2839 _Out_writes_opt_(*pulLength) PWCHAR Buffer,
2840 _Inout_ PULONG pulLength,
2841 _In_ ULONG ulFlags,
2842 _In_opt_ HMACHINE hMachine)
2843{
2844 WCHAR szGuidString[MAX_GUID_STRING_LEN];
2846 CONFIGRET ret;
2847
2848 TRACE("CM_Get_Class_Name_ExW(%p %p %p %lx %p\n",
2849 ClassGuid, Buffer, pulLength, ulFlags, hMachine);
2850
2851 if (ClassGuid == NULL || Buffer == NULL || pulLength == NULL)
2852 return CR_INVALID_POINTER;
2853
2854 if (ulFlags != 0)
2855 return CR_INVALID_FLAG;
2856
2857 if (!GuidToString(ClassGuid, szGuidString))
2858 return CR_INVALID_DATA;
2859
2860 TRACE("Guid %s\n", debugstr_w(szGuidString));
2861
2862 if (hMachine != NULL)
2863 {
2864 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
2865 if (BindingHandle == NULL)
2866 return CR_FAILURE;
2867 }
2868 else
2869 {
2871 return CR_FAILURE;
2872 }
2873
2875 {
2877 szGuidString,
2878 Buffer,
2879 pulLength,
2880 ulFlags);
2881 }
2883 {
2885 }
2887
2888 return ret;
2889}
2890
2891
2892/***********************************************************************
2893 * CM_Get_Class_Registry_PropertyA [SETUPAPI.@]
2894 */
2896WINAPI
2898 LPGUID ClassGuid,
2899 ULONG ulProperty,
2900 PULONG pulRegDataType,
2901 PVOID Buffer,
2902 PULONG pulLength,
2903 ULONG ulFlags,
2904 HMACHINE hMachine)
2905{
2906 PWSTR BufferW;
2907 ULONG ulLength = 0;
2908 ULONG ulType;
2909 CONFIGRET ret;
2910
2911 TRACE("CM_Get_Class_Registry_PropertyA(%p %lu %p %p %p %lx %p)\n",
2912 ClassGuid, ulProperty, pulRegDataType, Buffer, pulLength,
2913 ulFlags, hMachine);
2914
2915 if (pulLength == NULL)
2916 return CR_INVALID_POINTER;
2917
2918 if (ulProperty < CM_CRP_MIN || ulProperty > CM_CRP_MAX)
2919 return CR_INVALID_PROPERTY;
2920
2921 ulType = GetRegistryPropertyType(ulProperty);
2922 if (ulType == REG_SZ || ulType == REG_MULTI_SZ)
2923 {
2924 /* Get the required buffer size */
2925 ret = CM_Get_Class_Registry_PropertyW(ClassGuid, ulProperty, pulRegDataType,
2926 NULL, &ulLength, ulFlags, hMachine);
2927 if (ret != CR_BUFFER_SMALL)
2928 return ret;
2929
2930 /* Allocate the unicode buffer */
2931 BufferW = HeapAlloc(GetProcessHeap(), 0, ulLength);
2932 if (BufferW == NULL)
2933 return CR_OUT_OF_MEMORY;
2934
2935 /* Get the property */
2936 ret = CM_Get_Class_Registry_PropertyW(ClassGuid, ulProperty, pulRegDataType,
2937 BufferW, &ulLength, ulFlags, hMachine);
2938 if (ret != CR_SUCCESS)
2939 {
2940 HeapFree(GetProcessHeap(), 0, BufferW);
2941 return ret;
2942 }
2943
2944 /* Do W->A conversion */
2945 *pulLength = WideCharToMultiByte(CP_ACP,
2946 0,
2947 BufferW,
2948 ulLength,
2949 Buffer,
2950 *pulLength,
2951 NULL,
2952 NULL);
2953
2954 /* Release the unicode buffer */
2955 HeapFree(GetProcessHeap(), 0, BufferW);
2956
2957 if (*pulLength == 0)
2958 ret = CR_FAILURE;
2959 }
2960 else
2961 {
2962 /* Get the property */
2963 ret = CM_Get_Class_Registry_PropertyW(ClassGuid, ulProperty, pulRegDataType,
2964 Buffer, pulLength, ulFlags, hMachine);
2965 }
2966
2967 return ret;
2968}
2969
2970
2971/***********************************************************************
2972 * CM_Get_Class_Registry_PropertyW [SETUPAPI.@]
2973 */
2975WINAPI
2977 LPGUID ClassGuid,
2978 ULONG ulProperty,
2979 PULONG pulRegDataType,
2980 PVOID Buffer,
2981 PULONG pulLength,
2982 ULONG ulFlags,
2983 HMACHINE hMachine)
2984{
2986 WCHAR szGuidString[PNP_MAX_GUID_STRING_LEN + 1];
2987 ULONG ulType = 0;
2988 ULONG ulTransferLength = 0;
2989 CONFIGRET ret;
2990
2991 TRACE("CM_Get_Class_Registry_PropertyW(%p %lu %p %p %p %lx %p)\n",
2992 ClassGuid, ulProperty, pulRegDataType, Buffer, pulLength,
2993 ulFlags, hMachine);
2994
2995 if (ClassGuid == NULL || pulLength == NULL)
2996 return CR_INVALID_POINTER;
2997
2998 if (ulFlags != 0)
2999 return CR_INVALID_FLAG;
3000
3001 if (pSetupStringFromGuid(ClassGuid,
3002 szGuidString,
3004 return CR_INVALID_DATA;
3005
3006 if (ulProperty < CM_CRP_MIN || ulProperty > CM_CRP_MAX)
3007 return CR_INVALID_PROPERTY;
3008
3009 if (hMachine != NULL)
3010 {
3011 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
3012 if (BindingHandle == NULL)
3013 return CR_FAILURE;
3014 }
3015 else
3016 {
3018 return CR_FAILURE;
3019 }
3020
3021 ulTransferLength = *pulLength;
3022
3024 {
3026 szGuidString,
3027 ulProperty,
3028 &ulType,
3029 Buffer,
3030 &ulTransferLength,
3031 pulLength,
3032 ulFlags);
3033 }
3035 {
3037 }
3039
3040 if (ret == CR_SUCCESS)
3041 {
3042 if (pulRegDataType != NULL)
3043 *pulRegDataType = ulType;
3044 }
3045
3046 return ret;
3047}
3048
3049
3050/***********************************************************************
3051 * CM_Get_Depth [SETUPAPI.@]
3052 */
3054WINAPI
3056 _Out_ PULONG pulDepth,
3057 _In_ DEVINST dnDevInst,
3058 _In_ ULONG ulFlags)
3059{
3060 TRACE("CM_Get_Depth(%p %lx %lx)\n",
3061 pulDepth, dnDevInst, ulFlags);
3062
3063 return CM_Get_Depth_Ex(pulDepth, dnDevInst, ulFlags, NULL);
3064}
3065
3066
3067/***********************************************************************
3068 * CM_Get_Depth_Ex [SETUPAPI.@]
3069 */
3071WINAPI
3073 _Out_ PULONG pulDepth,
3074 _In_ DEVINST dnDevInst,
3075 _In_ ULONG ulFlags,
3076 _In_opt_ HMACHINE hMachine)
3077{
3079 HSTRING_TABLE StringTable = NULL;
3080 LPWSTR lpDevInst;
3081 CONFIGRET ret;
3082
3083 TRACE("CM_Get_Depth_Ex(%p %lx %lx %p)\n",
3084 pulDepth, dnDevInst, ulFlags, hMachine);
3085
3086 if (pulDepth == NULL)
3087 return CR_INVALID_POINTER;
3088
3089 if (dnDevInst == 0)
3090 return CR_INVALID_DEVINST;
3091
3092 if (ulFlags != 0)
3093 return CR_INVALID_FLAG;
3094
3095 if (hMachine != NULL)
3096 {
3097 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
3098 if (BindingHandle == NULL)
3099 return CR_FAILURE;
3100
3101 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
3102 if (StringTable == 0)
3103 return CR_FAILURE;
3104 }
3105 else
3106 {
3107 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
3108 return CR_FAILURE;
3109 }
3110
3111 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
3112 if (lpDevInst == NULL)
3113 return CR_INVALID_DEVNODE;
3114
3116 {
3118 lpDevInst,
3119 pulDepth,
3120 ulFlags);
3121 }
3123 {
3125 }
3127
3128 return ret;
3129}
3130
3131
3132/***********************************************************************
3133 * CM_Get_DevNode_Custom_PropertyA [SETUPAPI.@]
3134 */
3136WINAPI
3138 _In_ DEVINST dnDevInst,
3139 _In_ PCSTR pszCustomPropertyName,
3140 _Out_opt_ PULONG pulRegDataType,
3142 _Inout_ PULONG pulLength,
3143 _In_ ULONG ulFlags)
3144{
3145 TRACE("CM_Get_DevNode_Custom_PropertyA(%lx %s %p %p %p %lx)\n",
3146 dnDevInst, pszCustomPropertyName, pulRegDataType,
3147 Buffer, pulLength, ulFlags);
3148
3149 return CM_Get_DevNode_Custom_Property_ExA(dnDevInst, pszCustomPropertyName,
3150 pulRegDataType, Buffer,
3151 pulLength, ulFlags, NULL);
3152}
3153
3154
3155/***********************************************************************
3156 * CM_Get_DevNode_Custom_PropertyW [SETUPAPI.@]
3157 */
3159WINAPI
3161 _In_ DEVINST dnDevInst,
3162 _In_ PCWSTR pszCustomPropertyName,
3163 _Out_opt_ PULONG pulRegDataType,
3165 _Inout_ PULONG pulLength,
3166 _In_ ULONG ulFlags)
3167{
3168 TRACE("CM_Get_DevNode_Custom_PropertyW(%lx %s %p %p %p %lx)\n",
3169 dnDevInst, debugstr_w(pszCustomPropertyName), pulRegDataType,
3170 Buffer, pulLength, ulFlags);
3171
3172 return CM_Get_DevNode_Custom_Property_ExW(dnDevInst, pszCustomPropertyName,
3173 pulRegDataType, Buffer,
3174 pulLength, ulFlags, NULL);
3175}
3176
3177
3178/***********************************************************************
3179 * CM_Get_DevNode_Custom_Property_ExA [SETUPAPI.@]
3180 */
3182WINAPI
3184 _In_ DEVINST dnDevInst,
3185 _In_ PCSTR pszCustomPropertyName,
3186 _Out_opt_ PULONG pulRegDataType,
3188 _Inout_ PULONG pulLength,
3189 _In_ ULONG ulFlags,
3190 _In_opt_ HMACHINE hMachine)
3191{
3192 LPWSTR pszPropertyNameW;
3193 PVOID BufferW;
3194 ULONG ulLengthW;
3195 ULONG ulDataType = REG_NONE;
3196 CONFIGRET ret;
3197
3198 TRACE("CM_Get_DevNode_Custom_Property_ExA(%lx %s %p %p %p %lx %p)\n",
3199 dnDevInst, pszCustomPropertyName, pulRegDataType,
3200 Buffer, pulLength, ulFlags, hMachine);
3201
3202 if (!pulLength)
3203 return CR_INVALID_POINTER;
3204
3205 ulLengthW = *pulLength * sizeof(WCHAR);
3206 BufferW = HeapAlloc(GetProcessHeap(), 0, ulLengthW);
3207 if (!BufferW)
3208 return CR_OUT_OF_MEMORY;
3209
3210 pszPropertyNameW = pSetupMultiByteToUnicode(pszCustomPropertyName,
3211 CP_ACP);
3212 if (pszPropertyNameW == NULL)
3213 {
3214 HeapFree(GetProcessHeap(), 0, BufferW);
3215 return CR_OUT_OF_MEMORY;
3216 }
3217
3219 pszPropertyNameW,
3220 &ulDataType,
3221 BufferW,
3222 &ulLengthW,
3223 ulFlags,
3224 hMachine);
3225 if (ret == CR_SUCCESS)
3226 {
3227 if (ulDataType == REG_SZ ||
3228 ulDataType == REG_EXPAND_SZ ||
3229 ulDataType == REG_MULTI_SZ)
3230 {
3231 /* Do W->A conversion */
3232 *pulLength = WideCharToMultiByte(CP_ACP,
3233 0,
3234 BufferW,
3235 lstrlenW(BufferW) + 1,
3236 Buffer,
3237 *pulLength,
3238 NULL,
3239 NULL);
3240 if (*pulLength == 0)
3241 ret = CR_FAILURE;
3242 }
3243 else
3244 {
3245 /* Directly copy the value */
3246 if (ulLengthW <= *pulLength)
3247 memcpy(Buffer, BufferW, ulLengthW);
3248 else
3249 {
3250 *pulLength = ulLengthW;
3252 }
3253 }
3254 }
3255
3256 if (pulRegDataType)
3257 *pulRegDataType = ulDataType;
3258
3259 HeapFree(GetProcessHeap(), 0, BufferW);
3260 MyFree(pszPropertyNameW);
3261
3262 return ret;
3263}
3264
3265
3266/***********************************************************************
3267 * CM_Get_DevNode_Custom_Property_ExW [SETUPAPI.@]
3268 */
3270WINAPI
3272 _In_ DEVINST dnDevInst,
3273 _In_ PCWSTR pszCustomPropertyName,
3274 _Out_opt_ PULONG pulRegDataType,
3276 _Inout_ PULONG pulLength,
3277 _In_ ULONG ulFlags,
3278 _In_opt_ HMACHINE hMachine)
3279{
3281 HSTRING_TABLE StringTable = NULL;
3282 LPWSTR lpDevInst;
3283 ULONG ulDataType = REG_NONE;
3284 ULONG ulTransferLength;
3286
3287 TRACE("CM_Get_DevNode_Custom_Property_ExW(%lx %s %p %p %p %lx %p)\n",
3288 dnDevInst, debugstr_w(pszCustomPropertyName), pulRegDataType,
3289 Buffer, pulLength, ulFlags, hMachine);
3290
3291 if (dnDevInst == 0)
3292 return CR_INVALID_DEVNODE;
3293
3294 if (pszCustomPropertyName == NULL ||
3295 pulLength == NULL ||
3296 *pulLength == 0)
3297 return CR_INVALID_POINTER;
3298
3299 if (ulFlags & ~CM_CUSTOMDEVPROP_BITS)
3300 return CR_INVALID_FLAG;
3301
3302 if (hMachine != NULL)
3303 {
3304 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
3305 if (BindingHandle == NULL)
3306 return CR_FAILURE;
3307
3308 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
3309 if (StringTable == 0)
3310 return CR_FAILURE;
3311 }
3312 else
3313 {
3314 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
3315 return CR_FAILURE;
3316 }
3317
3318 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
3319 if (lpDevInst == NULL)
3320 return CR_INVALID_DEVNODE;
3321
3322 ulTransferLength = *pulLength;
3323
3325 {
3327 lpDevInst,
3328 (LPWSTR)pszCustomPropertyName,
3329 &ulDataType,
3330 Buffer,
3331 &ulTransferLength,
3332 pulLength,
3333 ulFlags);
3334 }
3336 {
3338 }
3340
3341 if (ret == CR_SUCCESS)
3342 {
3343 if (pulRegDataType != NULL)
3344 *pulRegDataType = ulDataType;
3345 }
3346
3347 return ret;
3348}
3349
3350
3351/***********************************************************************
3352 * CM_Get_DevNode_Registry_PropertyA [SETUPAPI.@]
3353 */
3355WINAPI
3357 _In_ DEVINST dnDevInst,
3358 _In_ ULONG ulProperty,
3359 _Out_opt_ PULONG pulRegDataType,
3361 _Inout_ PULONG pulLength,
3362 _In_ ULONG ulFlags)
3363{
3364 TRACE("CM_Get_DevNode_Registry_PropertyA(%lx %lu %p %p %p %lx)\n",
3365 dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags);
3366
3367 return CM_Get_DevNode_Registry_Property_ExA(dnDevInst, ulProperty,
3368 pulRegDataType, Buffer,
3369 pulLength, ulFlags, NULL);
3370}
3371
3372
3373/***********************************************************************
3374 * CM_Get_DevNode_Registry_PropertyW [SETUPAPI.@]
3375 */
3377WINAPI
3379 _In_ DEVINST dnDevInst,
3380 _In_ ULONG ulProperty,
3381 _Out_opt_ PULONG pulRegDataType,
3383 _Inout_ PULONG pulLength,
3384 _In_ ULONG ulFlags)
3385{
3386 TRACE("CM_Get_DevNode_Registry_PropertyW(%lx %lu %p %p %p %lx)\n",
3387 dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags);
3388
3389 return CM_Get_DevNode_Registry_Property_ExW(dnDevInst, ulProperty,
3390 pulRegDataType, Buffer,
3391 pulLength, ulFlags, NULL);
3392}
3393
3394
3395/***********************************************************************
3396 * CM_Get_DevNode_Registry_Property_ExA [SETUPAPI.@]
3397 */
3399WINAPI
3401 _In_ DEVINST dnDevInst,
3402 _In_ ULONG ulProperty,
3403 _Out_opt_ PULONG pulRegDataType,
3405 _Inout_ PULONG pulLength,
3406 _In_ ULONG ulFlags,
3407 _In_opt_ HMACHINE hMachine)
3408{
3409 PVOID BufferW;
3410 ULONG LengthW;
3411 ULONG ulDataType = REG_NONE;
3412 CONFIGRET ret;
3413
3414 TRACE("CM_Get_DevNode_Registry_Property_ExA(%lx %lu %p %p %p %lx %p)\n",
3415 dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength,
3416 ulFlags, hMachine);
3417
3418 if (!pulLength)
3419 return CR_INVALID_POINTER;
3420
3421 LengthW = *pulLength * sizeof(WCHAR);
3422 BufferW = HeapAlloc(GetProcessHeap(), 0, LengthW);
3423 if (!BufferW)
3424 return CR_OUT_OF_MEMORY;
3425
3427 ulProperty,
3428 &ulDataType,
3429 BufferW,
3430 &LengthW,
3431 ulFlags,
3432 hMachine);
3433
3434 if (ret == CR_SUCCESS)
3435 {
3436 if (ulDataType == REG_SZ ||
3437 ulDataType == REG_EXPAND_SZ ||
3438 ulDataType == REG_MULTI_SZ)
3439 {
3440 /* Do W->A conversion */
3441 *pulLength = WideCharToMultiByte(CP_ACP,
3442 0,
3443 BufferW,
3444 lstrlenW(BufferW) + 1,
3445 Buffer,
3446 *pulLength,
3447 NULL,
3448 NULL);
3449 if (*pulLength == 0)
3450 ret = CR_FAILURE;
3451 }
3452 else
3453 {
3454 /* Directly copy the value */
3455 if (LengthW <= *pulLength)
3456 memcpy(Buffer, BufferW, LengthW);
3457 else
3458 {
3459 *pulLength = LengthW;
3461 }
3462 }
3463 }
3464
3465 if (pulRegDataType)
3466 *pulRegDataType = ulDataType;
3467
3468 HeapFree(GetProcessHeap(), 0, BufferW);
3469
3470 return ret;
3471}
3472
3473
3474/***********************************************************************
3475 * CM_Get_DevNode_Registry_Property_ExW [SETUPAPI.@]
3476 */
3478WINAPI
3480 _In_ DEVINST dnDevInst,
3481 _In_ ULONG ulProperty,
3482 _Out_opt_ PULONG pulRegDataType,
3484 _Inout_ PULONG pulLength,
3485 _In_ ULONG ulFlags,
3486 _In_opt_ HMACHINE hMachine)
3487{
3489 HSTRING_TABLE StringTable = NULL;
3491 LPWSTR lpDevInst;
3492 ULONG ulDataType = REG_NONE;
3493 ULONG ulTransferLength = 0;
3494
3495 TRACE("CM_Get_DevNode_Registry_Property_ExW(%lx %lu %p %p %p %lx %p)\n",
3496 dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength,
3497 ulFlags, hMachine);
3498
3499 if (dnDevInst == 0)
3500 return CR_INVALID_DEVNODE;
3501
3502 if (ulProperty < CM_DRP_MIN || ulProperty > CM_DRP_MAX)
3503 return CR_INVALID_PROPERTY;
3504
3505 /* pulRegDataType is optional */
3506
3507 /* Buffer is optional */
3508
3509 if (pulLength == NULL)
3510 return CR_INVALID_POINTER;
3511
3512 if (*pulLength == 0)
3513 return CR_INVALID_POINTER;
3514
3515 if (ulFlags != 0)
3516 return CR_INVALID_FLAG;
3517
3518 if (hMachine != NULL)
3519 {
3520 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
3521 if (BindingHandle == NULL)
3522 return CR_FAILURE;
3523
3524 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
3525 if (StringTable == 0)
3526 return CR_FAILURE;
3527 }
3528 else
3529 {
3530 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
3531 return CR_FAILURE;
3532 }
3533
3534 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
3535 if (lpDevInst == NULL)
3536 return CR_INVALID_DEVNODE;
3537
3538 ulTransferLength = *pulLength;
3539
3541 {
3543 lpDevInst,
3544 ulProperty,
3545 &ulDataType,
3546 Buffer,
3547 &ulTransferLength,
3548 pulLength,
3549 ulFlags);
3550 }
3552 {
3554 }
3556
3557 if (ret == CR_SUCCESS)
3558 {
3559 if (pulRegDataType != NULL)
3560 *pulRegDataType = ulDataType;
3561 }
3562
3563 return ret;
3564}
3565
3566
3567/***********************************************************************
3568 * CM_Get_DevNode_Status [SETUPAPI.@]
3569 */
3571WINAPI
3573 _Out_ PULONG pulStatus,
3574 _Out_ PULONG pulProblemNumber,
3575 _In_ DEVINST dnDevInst,
3576 _In_ ULONG ulFlags)
3577{
3578 TRACE("CM_Get_DevNode_Status(%p %p %lx %lx)\n",
3579 pulStatus, pulProblemNumber, dnDevInst, ulFlags);
3580
3581 return CM_Get_DevNode_Status_Ex(pulStatus, pulProblemNumber, dnDevInst,
3582 ulFlags, NULL);
3583}
3584
3585
3586/***********************************************************************
3587 * CM_Get_DevNode_Status_Ex [SETUPAPI.@]
3588 */
3590WINAPI
3592 _Out_ PULONG pulStatus,
3593 _Out_ PULONG pulProblemNumber,
3594 _In_ DEVINST dnDevInst,
3595 _In_ ULONG ulFlags,
3596 _In_opt_ HMACHINE hMachine)
3597{
3599 HSTRING_TABLE StringTable = NULL;
3600 LPWSTR lpDevInst;
3601 CONFIGRET ret;
3602
3603 TRACE("CM_Get_DevNode_Status_Ex(%p %p %lx %lx %p)\n",
3604 pulStatus, pulProblemNumber, dnDevInst, ulFlags, hMachine);
3605
3606 if (pulStatus == NULL || pulProblemNumber == NULL)
3607 return CR_INVALID_POINTER;
3608
3609 if (dnDevInst == 0)
3610 return CR_INVALID_DEVINST;
3611
3612 if (ulFlags != 0)
3613 return CR_INVALID_FLAG;
3614
3615 if (hMachine != NULL)
3616 {
3617 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
3618 if (BindingHandle == NULL)
3619 return CR_FAILURE;
3620
3621 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
3622 if (StringTable == 0)
3623 return CR_FAILURE;
3624 }
3625 else
3626 {
3627 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
3628 return CR_FAILURE;
3629 }
3630
3631 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
3632 if (lpDevInst == NULL)
3633 return CR_INVALID_DEVNODE;
3634
3636 {
3638 lpDevInst,
3639 pulStatus,
3640 pulProblemNumber,
3641 ulFlags);
3642 }
3644 {
3646 }
3648
3649 return ret;
3650}
3651
3652
3653/***********************************************************************
3654 * CM_Get_Device_IDA [SETUPAPI.@]
3655 */
3657WINAPI
3659 _In_ DEVINST dnDevInst,
3660 _Out_writes_(BufferLen) PCHAR Buffer,
3661 _In_ ULONG BufferLen,
3662 _In_ ULONG ulFlags)
3663{
3664 TRACE("CM_Get_Device_IDA(%lx %p %lu %lx)\n",
3665 dnDevInst, Buffer, BufferLen, ulFlags);
3666
3667 return CM_Get_Device_ID_ExA(dnDevInst, Buffer, BufferLen, ulFlags, NULL);
3668}
3669
3670
3671/***********************************************************************
3672 * CM_Get_Device_IDW [SETUPAPI.@]
3673 */
3675WINAPI
3677 _In_ DEVINST dnDevInst,
3678 _Out_writes_(BufferLen) PWCHAR Buffer,
3679 _In_ ULONG BufferLen,
3680 _In_ ULONG ulFlags)
3681{
3682 TRACE("CM_Get_Device_IDW(%lx %p %lu %lx)\n",
3683 dnDevInst, Buffer, BufferLen, ulFlags);
3684
3685 return CM_Get_Device_ID_ExW(dnDevInst, Buffer, BufferLen, ulFlags, NULL);
3686}
3687
3688
3689/***********************************************************************
3690 * CM_Get_Device_ID_ExA [SETUPAPI.@]
3691 */
3693WINAPI
3695 _In_ DEVINST dnDevInst,
3696 _Out_writes_(BufferLen) PCHAR Buffer,
3697 _In_ ULONG BufferLen,
3698 _In_ ULONG ulFlags,
3699 _In_opt_ HMACHINE hMachine)
3700{
3701 WCHAR szBufferW[MAX_DEVICE_ID_LEN];
3703
3704 TRACE("CM_Get_Device_ID_ExA(%lx %p %lu %lx %p)\n",
3705 dnDevInst, Buffer, BufferLen, ulFlags, hMachine);
3706
3707 if (Buffer == NULL)
3708 return CR_INVALID_POINTER;
3709
3710 ret = CM_Get_Device_ID_ExW(dnDevInst,
3711 szBufferW,
3713 ulFlags,
3714 hMachine);
3715 if (ret == CR_SUCCESS)
3716 {
3718 0,
3719 szBufferW,
3720 lstrlenW(szBufferW) + 1,
3721 Buffer,
3722 BufferLen,
3723 NULL,
3724 NULL) == 0)
3725 ret = CR_FAILURE;
3726 }
3727
3728 return ret;
3729}
3730
3731
3732/***********************************************************************
3733 * CM_Get_Device_ID_ExW [SETUPAPI.@]
3734 */
3736WINAPI
3738 _In_ DEVINST dnDevInst,
3739 _Out_writes_(BufferLen) PWCHAR Buffer,
3740 _In_ ULONG BufferLen,
3741 _In_ ULONG ulFlags,
3742 _In_opt_ HMACHINE hMachine)
3743{
3744 HSTRING_TABLE StringTable = NULL;
3745
3746 TRACE("CM_Get_Device_ID_ExW(%lx %p %lu %lx %p)\n",
3747 dnDevInst, Buffer, BufferLen, ulFlags, hMachine);
3748
3749 if (dnDevInst == 0)
3750 return CR_INVALID_DEVINST;
3751
3752 if (Buffer == NULL)
3753 return CR_INVALID_POINTER;
3754
3755 if (ulFlags != 0)
3756 return CR_INVALID_FLAG;
3757
3758 if (hMachine != NULL)
3759 {
3760 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
3761 if (StringTable == NULL)
3762 return CR_FAILURE;
3763 }
3764 else
3765 {
3766 if (!PnpGetLocalHandles(NULL, &StringTable))
3767 return CR_FAILURE;
3768 }
3769
3770 if (!pSetupStringTableStringFromIdEx(StringTable,
3771 dnDevInst,
3772 Buffer,
3773 &BufferLen))
3774 return CR_FAILURE;
3775
3776 return CR_SUCCESS;
3777}
3778
3779
3780/***********************************************************************
3781 * CM_Get_Device_ID_ListA [SETUPAPI.@]
3782 */
3784WINAPI
3786 _In_ PCSTR pszFilter,
3787 _Out_writes_(BufferLen) PCHAR Buffer,
3788 _In_ ULONG BufferLen,
3789 _In_ ULONG ulFlags)
3790{
3791 TRACE("CM_Get_Device_ID_ListA(%p %p %lu %lx)\n",
3792 pszFilter, Buffer, BufferLen, ulFlags);
3793
3794 return CM_Get_Device_ID_List_ExA(pszFilter, Buffer, BufferLen,
3795 ulFlags, NULL);
3796}
3797
3798
3799/***********************************************************************
3800 * CM_Get_Device_ID_ListW [SETUPAPI.@]
3801 */
3803WINAPI
3805 _In_ PCWSTR pszFilter,
3806 _Out_writes_(BufferLen) PWCHAR Buffer,
3807 _In_ ULONG BufferLen,
3808 _In_ ULONG ulFlags)
3809{
3810 TRACE("CM_Get_Device_ID_ListW(%p %p %lu %lx)\n",
3811 pszFilter, Buffer, BufferLen, ulFlags);
3812
3813 return CM_Get_Device_ID_List_ExW(pszFilter, Buffer, BufferLen,
3814 ulFlags, NULL);
3815}
3816
3817
3818/***********************************************************************
3819 * CM_Get_Device_ID_List_ExA [SETUPAPI.@]
3820 */
3822WINAPI
3824 _In_ PCSTR pszFilter,
3825 _Out_writes_(BufferLen) PCHAR Buffer,
3826 _In_ ULONG BufferLen,
3827 _In_ ULONG ulFlags,
3828 _In_opt_ HMACHINE hMachine)
3829{
3830 LPWSTR BufferW = NULL;
3831 LPWSTR pszFilterW = NULL;
3833
3834 TRACE("CM_Get_Device_ID_List_ExA(%p %p %lu %lx %p)\n",
3835 pszFilter, Buffer, BufferLen, ulFlags, hMachine);
3836
3837 BufferW = MyMalloc(BufferLen * sizeof(WCHAR));
3838 if (BufferW == NULL)
3839 return CR_OUT_OF_MEMORY;
3840
3841 if (pszFilter == NULL)
3842 {
3844 BufferW,
3845 BufferLen,
3846 ulFlags,
3847 hMachine);
3848 }
3849 else
3850 {
3851 if (pSetupCaptureAndConvertAnsiArg(pszFilter, &pszFilterW))
3852 {
3854 goto Done;
3855 }
3856
3857 ret = CM_Get_Device_ID_List_ExW(pszFilterW,
3858 BufferW,
3859 BufferLen,
3860 ulFlags,
3861 hMachine);
3862
3863 MyFree(pszFilterW);
3864 }
3865
3867 0,
3868 BufferW,
3869 BufferLen,
3870 Buffer,
3871 BufferLen,
3872 NULL,
3873 NULL) == 0)
3874 ret = CR_FAILURE;
3875
3876Done:
3877 MyFree(BufferW);
3878
3879 return ret;
3880}
3881
3882
3883/***********************************************************************
3884 * CM_Get_Device_ID_List_ExW [SETUPAPI.@]
3885 */
3887WINAPI
3889 _In_ PCWSTR pszFilter,
3890 _Out_writes_(BufferLen) PWCHAR Buffer,
3891 _In_ ULONG BufferLen,
3892 _In_ ULONG ulFlags,
3893 _In_opt_ HMACHINE hMachine)
3894{
3896 CONFIGRET ret;
3897
3898 TRACE("CM_Get_Device_ID_List_ExW(%p %p %lu %lx %p)\n",
3899 pszFilter, Buffer, BufferLen, ulFlags, hMachine);
3900
3901 if (Buffer == NULL || BufferLen == 0)
3902 return CR_INVALID_POINTER;
3903
3904 if (ulFlags & ~CM_GETIDLIST_FILTER_BITS)
3905 return CR_INVALID_FLAG;
3906
3907 if (hMachine != NULL)
3908 {
3909 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
3910 if (BindingHandle == NULL)
3911 return CR_FAILURE;
3912 }
3913 else
3914 {
3916 return CR_FAILURE;
3917 }
3918
3919 *Buffer = 0;
3920
3922 {
3924 (LPWSTR)pszFilter,
3925 Buffer,
3926 &BufferLen,
3927 ulFlags);
3928 }
3930 {
3932 }
3934
3935 return ret;
3936}
3937
3938
3939/***********************************************************************
3940 * CM_Get_Device_ID_List_SizeA [SETUPAPI.@]
3941 */
3943WINAPI
3945 _Out_ PULONG pulLen,
3946 _In_opt_ PCSTR pszFilter,
3947 _In_ ULONG ulFlags)
3948{
3949 TRACE("CM_Get_Device_ID_List_SizeA(%p %s %lx)\n",
3950 pulLen, debugstr_a(pszFilter), ulFlags);
3951
3952 return CM_Get_Device_ID_List_Size_ExA(pulLen, pszFilter, ulFlags, NULL);
3953}
3954
3955
3956/***********************************************************************
3957 * CM_Get_Device_ID_List_SizeW [SETUPAPI.@]
3958 */
3960WINAPI
3962 _Out_ PULONG pulLen,
3963 _In_opt_ PCWSTR pszFilter,
3964 _In_ ULONG ulFlags)
3965{
3966 TRACE("CM_Get_Device_ID_List_SizeW(%p %s %lx)\n",
3967 pulLen, debugstr_w(pszFilter), ulFlags);
3968
3969 return CM_Get_Device_ID_List_Size_ExW(pulLen, pszFilter, ulFlags, NULL);
3970}
3971
3972
3973/***********************************************************************
3974 * CM_Get_Device_ID_List_Size_ExA [SETUPAPI.@]
3975 */
3977WINAPI
3979 _Out_ PULONG pulLen,
3980 _In_opt_ PCSTR pszFilter,
3981 _In_ ULONG ulFlags,
3982 _In_opt_ HMACHINE hMachine)
3983{
3984 LPWSTR pszFilterW = NULL;
3986
3987 FIXME("CM_Get_Device_ID_List_Size_ExA(%p %s %lx %p)\n",
3988 pulLen, debugstr_a(pszFilter), ulFlags, hMachine);
3989
3990 if (pszFilter == NULL)
3991 {
3993 NULL,
3994 ulFlags,
3995 hMachine);
3996 }
3997 else
3998 {
3999 if (pSetupCaptureAndConvertAnsiArg(pszFilter, &pszFilterW))
4000 return CR_INVALID_DEVICE_ID;
4001
4003 pszFilterW,
4004 ulFlags,
4005 hMachine);
4006
4007 MyFree(pszFilterW);
4008 }
4009
4010 return ret;
4011}
4012
4013
4014/***********************************************************************
4015 * CM_Get_Device_ID_List_Size_ExW [SETUPAPI.@]
4016 */
4018WINAPI
4020 _Out_ PULONG pulLen,
4021 _In_opt_ PCWSTR pszFilter,
4022 _In_ ULONG ulFlags,
4023 _In_opt_ HMACHINE hMachine)
4024{
4026 CONFIGRET ret;
4027
4028 FIXME("CM_Get_Device_ID_List_Size_ExW(%p %s %lx %p)\n",
4029 pulLen, debugstr_w(pszFilter), ulFlags, hMachine);
4030
4031 if (pulLen == NULL)
4032 return CR_INVALID_POINTER;
4033
4034 if (ulFlags & ~CM_GETIDLIST_FILTER_BITS)
4035 return CR_INVALID_FLAG;
4036
4037 if (hMachine != NULL)
4038 {
4039 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
4040 if (BindingHandle == NULL)
4041 return CR_FAILURE;
4042 }
4043 else
4044 {
4046 return CR_FAILURE;
4047 }
4048
4049 *pulLen = 0;
4050
4052 {
4054 (LPWSTR)pszFilter,
4055 pulLen,
4056 ulFlags);
4057 }
4059 {
4061 }
4063
4064 return ret;
4065}
4066
4067
4068/***********************************************************************
4069 * CM_Get_Device_ID_Size [SETUPAPI.@]
4070 */
4072WINAPI
4074 _Out_ PULONG pulLen,
4075 _In_ DEVINST dnDevInst,
4076 _In_ ULONG ulFlags)
4077{
4078 TRACE("CM_Get_Device_ID_Size(%p %lx %lx)\n",
4079 pulLen, dnDevInst, ulFlags);
4080
4081 return CM_Get_Device_ID_Size_Ex(pulLen, dnDevInst, ulFlags, NULL);
4082}
4083
4084
4085/***********************************************************************
4086 * CM_Get_Device_ID_Size_Ex [SETUPAPI.@]
4087 */
4089WINAPI
4091 _Out_ PULONG pulLen,
4092 _In_ DEVINST dnDevInst,
4093 _In_ ULONG ulFlags,
4094 _In_opt_ HMACHINE hMachine)
4095{
4096 HSTRING_TABLE StringTable = NULL;
4097 LPWSTR DeviceId;
4098
4099 TRACE("CM_Get_Device_ID_Size_Ex(%p %lx %lx %p)\n",
4100 pulLen, dnDevInst, ulFlags, hMachine);
4101
4102 if (pulLen == NULL)
4103 return CR_INVALID_POINTER;
4104
4105 if (dnDevInst == 0)
4106 return CR_INVALID_DEVINST;
4107
4108 if (ulFlags != 0)
4109 return CR_INVALID_FLAG;
4110
4111 if (hMachine != NULL)
4112 {
4113 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
4114 if (StringTable == NULL)
4115 return CR_FAILURE;
4116 }
4117 else
4118 {
4119 if (!PnpGetLocalHandles(NULL, &StringTable))
4120 return CR_FAILURE;
4121 }
4122
4123 DeviceId = pSetupStringTableStringFromId(StringTable, dnDevInst);
4124 if (DeviceId == NULL)
4125 {
4126 *pulLen = 0;
4127 return CR_SUCCESS;
4128 }
4129
4130 *pulLen = lstrlenW(DeviceId);
4131
4132 return CR_SUCCESS;
4133}
4134
4135
4136/***********************************************************************
4137 * CM_Get_Device_Interface_AliasA [SETUPAPI.@]
4138 */
4140WINAPI
4142 _In_ LPCSTR pszDeviceInterface,
4143 _In_ LPGUID AliasInterfaceGuid,
4144 _Out_writes_(*pulLength) LPSTR pszAliasDeviceInterface,
4145 _Inout_ PULONG pulLength,
4146 _In_ ULONG ulFlags)
4147{
4148 TRACE("CM_Get_Device_Interface_AliasA(%p %p %p %p %lx)\n",
4149 pszDeviceInterface, AliasInterfaceGuid,
4150 pszAliasDeviceInterface, pulLength, ulFlags);
4151
4152 return CM_Get_Device_Interface_Alias_ExA(pszDeviceInterface,
4153 AliasInterfaceGuid, pszAliasDeviceInterface, pulLength,
4154 ulFlags, NULL);
4155}
4156
4157
4158/***********************************************************************
4159 * CM_Get_Device_Interface_AliasW [SETUPAPI.@]
4160 */
4162WINAPI
4164 _In_ LPCWSTR pszDeviceInterface,
4165 _In_ LPGUID AliasInterfaceGuid,
4166 _Out_writes_(*pulLength) LPWSTR pszAliasDeviceInterface,
4167 _Inout_ PULONG pulLength,
4168 _In_ ULONG ulFlags)
4169{
4170 TRACE("CM_Get_Device_Interface_AliasW(%p %p %p %p %lx)\n",
4171 pszDeviceInterface, AliasInterfaceGuid,
4172 pszAliasDeviceInterface, pulLength, ulFlags);
4173
4174 return CM_Get_Device_Interface_Alias_ExW(pszDeviceInterface,
4175 AliasInterfaceGuid, pszAliasDeviceInterface, pulLength,
4176 ulFlags, NULL);
4177}
4178
4179
4180/***********************************************************************
4181 * CM_Get_Device_Interface_Alias_ExA [SETUPAPI.@]
4182 */
4184WINAPI
4186 _In_ LPCSTR pszDeviceInterface,
4187 _In_ LPGUID AliasInterfaceGuid,
4188 _Out_writes_(*pulLength) LPSTR pszAliasDeviceInterface,
4189 _Inout_ PULONG pulLength,
4190 _In_ ULONG ulFlags,
4191 _In_opt_ HMACHINE hMachine)
4192{
4193 FIXME("CM_Get_Device_Interface_Alias_ExA(%p %p %p %p %lx %p)\n",
4194 pszDeviceInterface, AliasInterfaceGuid,
4195 pszAliasDeviceInterface, pulLength, ulFlags, hMachine);
4196
4198}
4199
4200
4201/***********************************************************************
4202 * CM_Get_Device_Interface_Alias_ExW [SETUPAPI.@]
4203 */
4205WINAPI
4207 _In_ LPCWSTR pszDeviceInterface,
4208 _In_ LPGUID AliasInterfaceGuid,
4209 _Out_writes_(*pulLength) LPWSTR pszAliasDeviceInterface,
4210 _Inout_ PULONG pulLength,
4211 _In_ ULONG ulFlags,
4212 _In_opt_ HMACHINE hMachine)
4213{
4215 ULONG ulTransferLength;
4217
4218 TRACE("CM_Get_Device_Interface_Alias_ExW(%p %p %p %p %lx %p)\n",
4219 pszDeviceInterface, AliasInterfaceGuid,
4220 pszAliasDeviceInterface, pulLength, ulFlags, hMachine);
4221
4222 if (pszDeviceInterface == NULL ||
4223 AliasInterfaceGuid == NULL ||
4224 pszAliasDeviceInterface == NULL ||
4225 pulLength == NULL)
4226 return CR_INVALID_POINTER;
4227
4228 if (ulFlags != 0)
4229 return CR_INVALID_FLAG;
4230
4231 if (hMachine != NULL)
4232 {
4233 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
4234 if (BindingHandle == NULL)
4235 return CR_FAILURE;
4236 }
4237 else
4238 {
4240 return CR_FAILURE;
4241 }
4242
4243 ulTransferLength = *pulLength;
4244
4246 {
4248 (LPWSTR)pszDeviceInterface,
4249 AliasInterfaceGuid,
4250 pszAliasDeviceInterface,
4251 pulLength,
4252 &ulTransferLength,
4253 0);
4254 }
4256 {
4258 }
4260
4261 return ret;
4262}
4263
4264
4265/***********************************************************************
4266 * CM_Get_Device_Interface_ListA (SETUPAPI.@)
4267 */
4269WINAPI
4272 _In_opt_ DEVINSTID_A pDeviceID,
4273 _Out_writes_(BufferLen) PCHAR Buffer,
4274 _In_ ULONG BufferLen,
4275 _In_ ULONG ulFlags)
4276{
4277 TRACE("CM_Get_Device_Interface_ListA(%s %s %p %lu 0x%08lx)\n",
4279 Buffer, BufferLen, ulFlags);
4280
4282 Buffer, BufferLen, ulFlags, NULL);
4283}
4284
4285
4286/***********************************************************************
4287 * CM_Get_Device_Interface_ListW (SETUPAPI.@)
4288 */
4290WINAPI
4293 _In_opt_ DEVINSTID_W pDeviceID,
4294 _Out_writes_(BufferLen) PWCHAR Buffer,
4295 _In_ ULONG BufferLen,
4296 _In_ ULONG ulFlags)
4297{
4298 TRACE("CM_Get_Device_Interface_ListW(%s %s %p %lu 0x%08lx)\n",
4300 Buffer, BufferLen, ulFlags);
4301
4303 Buffer, BufferLen, ulFlags, NULL);
4304}
4305
4306
4307/***********************************************************************
4308 * CM_Get_Device_Interface_List_ExA (SETUPAPI.@)
4309 */
4311WINAPI
4314 _In_opt_ DEVINSTID_A pDeviceID,
4315 _Out_writes_(BufferLen) PCHAR Buffer,
4316 _In_ ULONG BufferLen,
4317 _In_ ULONG ulFlags,
4318 _In_opt_ HMACHINE hMachine)
4319{
4320 DEVINSTID_W pDeviceIdW = NULL;
4321 PWCHAR BufferW = NULL;
4323
4324 TRACE("CM_Get_Device_Interface_List_ExA(%s %s %p %lu 0x%08lx %p)\n",
4326 Buffer, BufferLen, ulFlags, hMachine);
4327
4328 if (Buffer == NULL ||
4329 BufferLen == 0)
4330 return CR_INVALID_POINTER;
4331
4332 if (pDeviceID != NULL)
4333 {
4334 if (!pSetupCaptureAndConvertAnsiArg(pDeviceID, &pDeviceIdW))
4335 return CR_INVALID_DEVICE_ID;
4336 }
4337
4338 BufferW = MyMalloc(BufferLen * sizeof(WCHAR));
4339 if (BufferW == NULL)
4340 {
4342 goto Done;
4343 }
4344
4346 BufferW, BufferLen, ulFlags,
4347 hMachine);
4348 if (ret != CR_SUCCESS)
4349 goto Done;
4350
4352 0,
4353 BufferW,
4354 BufferLen,
4355 Buffer,
4356 BufferLen,
4357 NULL,
4358 NULL) == 0)
4359 ret = CR_FAILURE;
4360
4361Done:
4362 if (BufferW != NULL)
4363 MyFree(BufferW);
4364
4365 if (pDeviceIdW != NULL)
4366 MyFree(pDeviceIdW);
4367
4368 return ret;
4369}
4370
4371
4372/***********************************************************************
4373 * CM_Get_Device_Interface_List_ExW (SETUPAPI.@)
4374 */
4376WINAPI
4379 _In_opt_ DEVINSTID_W pDeviceID,
4380 _Out_writes_(BufferLen) PWCHAR Buffer,
4381 _In_ ULONG BufferLen,
4382 _In_ ULONG ulFlags,
4383 _In_opt_ HMACHINE hMachine)
4384{
4388
4389 TRACE("CM_Get_Device_Interface_List_ExW(%s %s %p %lu 0x%08lx %p)\n",
4391 Buffer, BufferLen, ulFlags, hMachine);
4392
4393 if (Buffer == NULL ||
4394 BufferLen == 0)
4395 return CR_INVALID_POINTER;
4396
4397 if (ulFlags & ~CM_GET_DEVICE_INTERFACE_LIST_BITS)
4398 return CR_INVALID_FLAG;
4399
4400 if (hMachine != NULL)
4401 {
4402 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
4403 if (BindingHandle == NULL)
4404 return CR_FAILURE;
4405 }
4406 else
4407 {
4409 return CR_FAILURE;
4410 }
4411
4412 *Buffer = 0;
4413 BufferSize = BufferLen;
4414
4416 {
4419 pDeviceID,
4420 (LPBYTE)Buffer,
4421 &BufferSize,
4422 ulFlags);
4423 }
4425 {
4427 }
4429
4430 return ret;
4431}
4432
4433
4434/***********************************************************************
4435 * CM_Get_Device_Interface_List_SizeA (SETUPAPI.@)
4436 */
4438WINAPI
4440 _Out_ PULONG pulLen,
4442 _In_opt_ DEVINSTID_A pDeviceID,
4443 _In_ ULONG ulFlags)
4444{
4445 TRACE("CM_Get_Device_Interface_List_SizeA(%p %p %s 0x%08lx)\n",
4446 pulLen, InterfaceClassGuid, debugstr_a(pDeviceID), ulFlags);
4447
4449 pDeviceID, ulFlags, NULL);
4450}
4451
4452
4453/***********************************************************************
4454 * CM_Get_Device_Interface_List_SizeW (SETUPAPI.@)
4455 */
4457WINAPI
4459 _Out_ PULONG pulLen,
4461 _In_opt_ DEVINSTID_W pDeviceID,
4462 _In_ ULONG ulFlags)
4463{
4464 TRACE("CM_Get_Device_Interface_List_SizeW(%p %p %s 0x%08lx)\n",
4465 pulLen, InterfaceClassGuid, debugstr_w(pDeviceID), ulFlags);
4466
4468 pDeviceID, ulFlags, NULL);
4469}
4470
4471
4472/***********************************************************************
4473 * CM_Get_Device_Interface_List_Size_ExA (SETUPAPI.@)
4474 */
4476WINAPI
4478 _Out_ PULONG pulLen,
4480 _In_opt_ DEVINSTID_A pDeviceID,
4481 _In_ ULONG ulFlags,
4482 _In_opt_ HMACHINE hMachine)
4483{
4484 DEVINSTID_W pDeviceIdW = NULL;
4486
4487 TRACE("CM_Get_Device_Interface_List_Size_ExA(%p %p %s 0x%08lx %p)\n",
4488 pulLen, InterfaceClassGuid, debugstr_a(pDeviceID), ulFlags, hMachine);
4489
4490 if (pulLen == NULL)
4491 return CR_INVALID_POINTER;
4492
4493 if (pDeviceID != NULL)
4494 {
4495 if (!pSetupCaptureAndConvertAnsiArg(pDeviceID, &pDeviceIdW))
4496 return CR_INVALID_DEVICE_ID;
4497 }
4498
4499 *pulLen = 0;
4500
4502 pDeviceIdW, ulFlags, hMachine);
4503
4504 if (pDeviceIdW != NULL)
4505 MyFree(pDeviceIdW);
4506
4507 return ret;
4508}
4509
4510
4511/***********************************************************************
4512 * CM_Get_Device_Interface_List_Size_ExW (SETUPAPI.@)
4513 */
4515WINAPI
4517 _Out_ PULONG pulLen,
4519 _In_opt_ DEVINSTID_W pDeviceID,
4520 _In_ ULONG ulFlags,
4521 _In_opt_ HMACHINE hMachine)
4522{
4525
4526 TRACE("CM_Get_Device_Interface_List_Size_ExW(%p %p %s 0x%08lx %p)\n",
4527 pulLen, InterfaceClassGuid, debugstr_w(pDeviceID), ulFlags, hMachine);
4528
4529 if (pulLen == NULL)
4530 return CR_INVALID_POINTER;
4531
4532 if (ulFlags & ~CM_GET_DEVICE_INTERFACE_LIST_BITS)
4533 return CR_INVALID_FLAG;
4534
4535 if (hMachine != NULL)
4536 {
4537 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
4538 if (BindingHandle == NULL)
4539 return CR_FAILURE;
4540 }
4541 else
4542 {
4544 return CR_FAILURE;
4545 }
4546
4547 *pulLen = 0;
4548
4550 {
4552 pulLen,
4554 pDeviceID,
4555 ulFlags);
4556 }
4558 {
4560 }
4562
4563 return ret;
4564}
4565
4566
4567/***********************************************************************
4568 * CM_Get_First_Log_Conf [SETUPAPI.@]
4569 */
4571WINAPI
4573 _Out_opt_ PLOG_CONF plcLogConf,
4574 _In_ DEVINST dnDevInst,
4575 _In_ ULONG ulFlags)
4576{
4577 TRACE("CM_Get_First_Log_Conf(%p %lx %lx)\n",
4578 plcLogConf, dnDevInst, ulFlags);
4579
4580 return CM_Get_First_Log_Conf_Ex(plcLogConf, dnDevInst, ulFlags, NULL);
4581}
4582
4583
4584/***********************************************************************
4585 * CM_Get_First_Log_Conf_Ex [SETUPAPI.@]
4586 */
4588WINAPI
4590 _Out_opt_ PLOG_CONF plcLogConf,
4591 _In_ DEVINST dnDevInst,
4592 _In_ ULONG ulFlags,
4593 _In_opt_ HMACHINE hMachine)
4594{
4596 HSTRING_TABLE StringTable = NULL;
4597 LPWSTR lpDevInst = NULL;
4599 ULONG ulTag;
4600 PLOG_CONF_INFO pLogConfInfo;
4601
4602 FIXME("CM_Get_First_Log_Conf_Ex(%p %lx %lx %p)\n",
4603 plcLogConf, dnDevInst, ulFlags, hMachine);
4604
4605 if (dnDevInst == 0)
4606 return CR_INVALID_DEVINST;
4607
4608 if (ulFlags & ~LOG_CONF_BITS)
4609 return CR_INVALID_FLAG;
4610
4611 if (plcLogConf)
4612 *plcLogConf = 0;
4613
4614 if (hMachine != NULL)
4615 {
4616 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
4617 if (BindingHandle == NULL)
4618 return CR_FAILURE;
4619
4620 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
4621 if (StringTable == 0)
4622 return CR_FAILURE;
4623 }
4624 else
4625 {
4626 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
4627 return CR_FAILURE;
4628 }
4629
4630 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
4631 if (lpDevInst == NULL)
4632 return CR_INVALID_DEVNODE;
4633
4635 {
4637 lpDevInst,
4638 ulFlags,
4639 &ulTag,
4640 ulFlags);
4641 }
4643 {
4645 }
4647
4648 if (ret != CR_SUCCESS)
4649 return ret;
4650
4651 if (plcLogConf)
4652 {
4653 pLogConfInfo = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_CONF_INFO));
4654 if (pLogConfInfo == NULL)
4655 return CR_OUT_OF_MEMORY;
4656
4657 pLogConfInfo->ulMagic = LOG_CONF_MAGIC;
4658 pLogConfInfo->dnDevInst = dnDevInst;
4659 pLogConfInfo->ulType = ulFlags;
4660 pLogConfInfo->ulTag = ulTag;
4661
4662 *plcLogConf = (LOG_CONF)pLogConfInfo;
4663 }
4664
4665 return CR_SUCCESS;
4666}
4667
4668
4669/***********************************************************************
4670 * CM_Get_Global_State [SETUPAPI.@]
4671 */
4673WINAPI
4675 _Out_ PULONG pulState,
4676 _In_ ULONG ulFlags)
4677{
4678 TRACE("CM_Get_Global_State(%p %lx)\n",
4679 pulState, ulFlags);
4680
4681 return CM_Get_Global_State_Ex(pulState, ulFlags, NULL);
4682}
4683
4684
4685/***********************************************************************
4686 * CM_Get_Global_State_Ex [SETUPAPI.@]
4687 */
4689WINAPI
4691 _Out_ PULONG pulState,
4692 _In_ ULONG ulFlags,
4693 _In_opt_ HMACHINE hMachine)
4694{
4696 CONFIGRET ret;
4697
4698 TRACE("CM_Get_Global_State_Ex(%p %lx %p)\n",
4699 pulState, ulFlags, hMachine);
4700
4701 if (pulState == NULL)
4702 return CR_INVALID_POINTER;
4703
4704 if (ulFlags != 0)
4705 return CR_INVALID_FLAG;
4706
4707 if (hMachine != NULL)
4708 {
4709 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
4710 if (BindingHandle == NULL)
4711 return CR_FAILURE;
4712 }
4713 else
4714 {
4716 return CR_FAILURE;
4717 }
4718
4720 {
4721 ret = PNP_GetGlobalState(BindingHandle, pulState, ulFlags);
4722 }
4724 {
4726 }
4728
4729 return ret;
4730}
4731
4732
4733/***********************************************************************
4734 * CM_Get_HW_Prof_FlagsA [SETUPAPI.@]
4735 */
4737WINAPI
4739 _In_ DEVINSTID_A szDevInstName,
4740 _In_ ULONG ulHardwareProfile,
4741 _Out_ PULONG pulValue,
4742 _In_ ULONG ulFlags)
4743{
4744 TRACE("CM_Get_HW_Prof_FlagsA(%s %lu %p %lx)\n",
4745 debugstr_a(szDevInstName), ulHardwareProfile, pulValue, ulFlags);
4746
4747 return CM_Get_HW_Prof_Flags_ExA(szDevInstName, ulHardwareProfile,
4748 pulValue, ulFlags, NULL);
4749}
4750
4751
4752/***********************************************************************
4753 * CM_Get_HW_Prof_FlagsW [SETUPAPI.@]
4754 */
4756WINAPI
4758 _In_ DEVINSTID_W szDevInstName,
4759 _In_ ULONG ulHardwareProfile,
4760 _Out_ PULONG pulValue,
4761 _In_ ULONG ulFlags)
4762{
4763 TRACE("CM_Get_HW_Prof_FlagsW(%s %lu %p %lx)\n",
4764 debugstr_w(szDevInstName), ulHardwareProfile, pulValue, ulFlags);
4765
4766 return CM_Get_HW_Prof_Flags_ExW(szDevInstName, ulHardwareProfile,
4767 pulValue, ulFlags, NULL);
4768}
4769
4770
4771/***********************************************************************
4772 * CM_Get_HW_Prof_Flags_ExA [SETUPAPI.@]
4773 */
4775WINAPI
4777 _In_ DEVINSTID_A szDevInstName,
4778 _In_ ULONG ulHardwareProfile,
4779 _Out_ PULONG pulValue,
4780 _In_ ULONG ulFlags,
4781 _In_opt_ HMACHINE hMachine)
4782{
4783 DEVINSTID_W pszDevIdW = NULL;
4785
4786 TRACE("CM_Get_HW_Prof_Flags_ExA(%s %lu %p %lx %p)\n",
4787 debugstr_a(szDevInstName), ulHardwareProfile, pulValue, ulFlags, hMachine);
4788
4789 if (szDevInstName != NULL)
4790 {
4791 if (pSetupCaptureAndConvertAnsiArg(szDevInstName, &pszDevIdW))
4792 return CR_INVALID_DEVICE_ID;
4793 }
4794
4795 ret = CM_Get_HW_Prof_Flags_ExW(pszDevIdW, ulHardwareProfile,
4796 pulValue, ulFlags, hMachine);
4797
4798 if (pszDevIdW != NULL)
4799 MyFree(pszDevIdW);
4800
4801 return ret;
4802}
4803
4804
4805/***********************************************************************
4806 * CM_Get_HW_Prof_Flags_ExW [SETUPAPI.@]
4807 */
4809WINAPI
4811 _In_ DEVINSTID_W szDevInstName,
4812 _In_ ULONG ulHardwareProfile,
4813 _Out_ PULONG pulValue,
4814 _In_ ULONG ulFlags,
4815 _In_opt_ HMACHINE hMachine)
4816{
4818 CONFIGRET ret;
4819
4820 FIXME("CM_Get_HW_Prof_Flags_ExW(%s %lu %p %lx %p)\n",
4821 debugstr_w(szDevInstName), ulHardwareProfile, pulValue, ulFlags, hMachine);
4822
4823 if ((szDevInstName == NULL) || (pulValue == NULL))
4824 return CR_INVALID_POINTER;
4825
4826 if (ulFlags != 0)
4827 return CR_INVALID_FLAG;
4828
4829 /* FIXME: Check whether szDevInstName is valid */
4830
4831 if (hMachine != NULL)
4832 {
4833 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
4834 if (BindingHandle == NULL)
4835 return CR_FAILURE;
4836 }
4837 else
4838 {
4840 return CR_FAILURE;
4841 }
4842
4844 {
4845 ret = PNP_HwProfFlags(BindingHandle, PNP_GET_HWPROFFLAGS, szDevInstName,
4846 ulHardwareProfile, pulValue, NULL, NULL, 0, 0);
4847 }
4849 {
4851 }
4853
4854 return ret;
4855}
4856
4857
4858/***********************************************************************
4859 * CM_Get_Hardware_Profile_InfoA [SETUPAPI.@]
4860 */
4862WINAPI
4864 _In_ ULONG ulIndex,
4865 _Out_ PHWPROFILEINFO_A pHWProfileInfo,
4866 _In_ ULONG ulFlags)
4867{
4868 TRACE("CM_Get_Hardware_Profile_InfoA(%lu %p %lx)\n",
4869 ulIndex, pHWProfileInfo, ulFlags);
4870
4871 return CM_Get_Hardware_Profile_Info_ExA(ulIndex, pHWProfileInfo,
4872 ulFlags, NULL);
4873}
4874
4875
4876/***********************************************************************
4877 * CM_Get_Hardware_Profile_InfoW [SETUPAPI.@]
4878 */
4880WINAPI
4882 _In_ ULONG ulIndex,
4883 _Out_ PHWPROFILEINFO_W pHWProfileInfo,
4884 _In_ ULONG ulFlags)
4885{
4886 TRACE("CM_Get_Hardware_Profile_InfoW(%lu %p %lx)\n",
4887 ulIndex, pHWProfileInfo, ulFlags);
4888
4889 return CM_Get_Hardware_Profile_Info_ExW(ulIndex, pHWProfileInfo,
4890 ulFlags, NULL);
4891}
4892
4893
4894/***********************************************************************
4895 * CM_Get_Hardware_Profile_Info_ExA [SETUPAPI.@]
4896 */
4898WINAPI
4900 _In_ ULONG ulIndex,
4901 _Out_ PHWPROFILEINFO_A pHWProfileInfo,
4902 _In_ ULONG ulFlags,
4903 _In_opt_ HMACHINE hMachine)
4904{
4905 HWPROFILEINFO_W LocalProfileInfo;
4906 CONFIGRET ret;
4907
4908 TRACE("CM_Get_Hardware_Profile_Info_ExA(%lu %p %lx %p)\n",
4909 ulIndex, pHWProfileInfo, ulFlags, hMachine);
4910
4911 if (pHWProfileInfo == NULL)
4912 return CR_INVALID_POINTER;
4913
4914 ret = CM_Get_Hardware_Profile_Info_ExW(ulIndex, &LocalProfileInfo,
4915 ulFlags, hMachine);
4916 if (ret == CR_SUCCESS)
4917 {
4918 pHWProfileInfo->HWPI_ulHWProfile = LocalProfileInfo.HWPI_ulHWProfile;
4919 pHWProfileInfo->HWPI_dwFlags = LocalProfileInfo.HWPI_dwFlags;
4920
4922 0,
4923 LocalProfileInfo.HWPI_szFriendlyName,
4924 lstrlenW(LocalProfileInfo.HWPI_szFriendlyName) + 1,
4925 pHWProfileInfo->HWPI_szFriendlyName,
4927 NULL,
4928 NULL) == 0)
4929 ret = CR_FAILURE;
4930 }
4931
4932 return ret;
4933}
4934
4935
4936/***********************************************************************
4937 * CM_Get_Hardware_Profile_Info_ExW [SETUPAPI.@]
4938 */
4940WINAPI
4942 _In_ ULONG ulIndex,
4943 _Out_ PHWPROFILEINFO_W pHWProfileInfo,
4944 _In_ ULONG ulFlags,
4945 _In_opt_ HMACHINE hMachine)
4946{
4948 CONFIGRET ret;
4949
4950 TRACE("CM_Get_Hardware_Profile_Info_ExW(%lu %p %lx %p)\n",
4951 ulIndex, pHWProfileInfo, ulFlags, hMachine);
4952
4953 if (pHWProfileInfo == NULL)
4954 return CR_INVALID_POINTER;
4955
4956 if (ulFlags != 0)
4957 return CR_INVALID_FLAG;
4958
4959 if (hMachine != NULL)
4960 {
4961 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
4962 if (BindingHandle == NULL)
4963 return CR_FAILURE;
4964 }
4965 else
4966 {
4968 return CR_FAILURE;
4969 }
4970
4972 {
4973 ret = PNP_GetHwProfInfo(BindingHandle, ulIndex, pHWProfileInfo,
4974 sizeof(HWPROFILEINFO_W), 0);
4975 }
4977 {
4979 }
4981
4982 return ret;
4983}
4984
4985
4986/***********************************************************************
4987 * CM_Get_Log_Conf_Priority [SETUPAPI.@]
4988 */
4990WINAPI
4992 _In_ LOG_CONF lcLogConf,
4993 _Out_ PPRIORITY pPriority,
4994 _In_ ULONG ulFlags)
4995{
4996 TRACE("CM_Get_Log_Conf_Priority(%p %p %lx)\n",
4997 lcLogConf, pPriority, ulFlags);
4998
4999 return CM_Get_Log_Conf_Priority_Ex(lcLogConf, pPriority, ulFlags, NULL);
5000}
5001
5002
5003/***********************************************************************
5004 * CM_Get_Log_Conf_Priority_Ex [SETUPAPI.@]
5005 */
5007WINAPI
5009 _In_ LOG_CONF lcLogConf,
5010 _Out_ PPRIORITY pPriority,
5011 _In_ ULONG ulFlags,
5012 _In_opt_ HMACHINE hMachine)
5013{
5015 HSTRING_TABLE StringTable = NULL;
5016 PLOG_CONF_INFO pLogConfInfo;
5017 LPWSTR lpDevInst;
5018 CONFIGRET ret;
5019
5020 FIXME("CM_Get_Log_Conf_Priority_Ex(%p %p %lx %p)\n",
5021 lcLogConf, pPriority, ulFlags, hMachine);
5022
5023 pLogConfInfo = (PLOG_CONF_INFO)lcLogConf;
5024 if (!IsValidLogConf(pLogConfInfo))
5025 return CR_INVALID_LOG_CONF;
5026
5027 if (pPriority == NULL)
5028 return CR_INVALID_POINTER;
5029
5030 if (ulFlags != 0)
5031 return CR_INVALID_FLAG;
5032
5033 if (hMachine != NULL)
5034 {
5035 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
5036 if (BindingHandle == NULL)
5037 return CR_FAILURE;
5038
5039 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
5040 if (StringTable == 0)
5041 return CR_FAILURE;
5042 }
5043 else
5044 {
5045 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
5046 return CR_FAILURE;
5047 }
5048
5049 lpDevInst = pSetupStringTableStringFromId(StringTable, pLogConfInfo->dnDevInst);
5050 if (lpDevInst == NULL)
5051 return CR_INVALID_DEVNODE;
5052
5054 {
5056 lpDevInst,
5057 pLogConfInfo->ulType,
5058 pLogConfInfo->ulTag,
5059 pPriority,
5060 0);
5061 }
5063 {
5065 }
5067
5068 return ret;
5069}
5070
5071
5072/***********************************************************************
5073 * CM_Get_Next_Log_Conf [SETUPAPI.@]
5074 */
5076WINAPI
5078 _Out_opt_ PLOG_CONF plcLogConf,
5079 _In_ LOG_CONF lcLogConf,
5080 _In_ ULONG ulFlags)
5081{
5082 TRACE("CM_Get_Next_Log_Conf(%p %p %lx)\n",
5083 plcLogConf, lcLogConf, ulFlags);
5084
5085 return CM_Get_Next_Log_Conf_Ex(plcLogConf, lcLogConf, ulFlags, NULL);
5086}
5087
5088
5089/***********************************************************************
5090 * CM_Get_Next_Log_Conf_Ex [SETUPAPI.@]
5091 */
5093WINAPI
5095 _Out_opt_ PLOG_CONF plcLogConf,
5096 _In_ LOG_CONF lcLogConf,
5097 _In_ ULONG ulFlags,
5098 _In_opt_ HMACHINE hMachine)
5099{
5101 HSTRING_TABLE StringTable = NULL;
5102 PLOG_CONF_INFO pLogConfInfo;
5103 PLOG_CONF_INFO pNewLogConfInfo;
5104 ULONG ulNewTag;
5105 LPWSTR lpDevInst;
5106 CONFIGRET ret;
5107
5108 FIXME("CM_Get_Next_Log_Conf_Ex(%p %p %lx %p)\n",
5109 plcLogConf, lcLogConf, ulFlags, hMachine);
5110
5111 if (plcLogConf)
5112 *plcLogConf = 0;
5113
5114 pLogConfInfo = (PLOG_CONF_INFO)lcLogConf;
5115 if (!IsValidLogConf(pLogConfInfo))
5116 return CR_INVALID_LOG_CONF;
5117
5118 if (ulFlags != 0)
5119 return CR_INVALID_FLAG;
5120
5121 if (hMachine != NULL)
5122 {
5123 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
5124 if (BindingHandle == NULL)
5125 return CR_FAILURE;
5126
5127 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
5128 if (StringTable == 0)
5129 return CR_FAILURE;
5130 }
5131 else
5132 {
5133 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
5134 return CR_FAILURE;
5135 }
5136
5137 lpDevInst = pSetupStringTableStringFromId(StringTable, pLogConfInfo->dnDevInst);
5138 if (lpDevInst == NULL)
5139 return CR_INVALID_DEVNODE;
5140
5142 {
5144 lpDevInst,
5145 pLogConfInfo->ulType,
5146 pLogConfInfo->ulTag,
5147 &ulNewTag,
5148 0);
5149 }
5151 {
5153 }
5155
5156 if (ret != CR_SUCCESS)
5157 return ret;
5158
5159 if (plcLogConf)
5160 {
5161 pNewLogConfInfo = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_CONF_INFO));
5162 if (pNewLogConfInfo == NULL)
5163 return CR_OUT_OF_MEMORY;
5164
5165 pNewLogConfInfo->ulMagic = LOG_CONF_MAGIC;
5166 pNewLogConfInfo->dnDevInst = pLogConfInfo->dnDevInst;
5167 pNewLogConfInfo->ulType = pLogConfInfo->ulType;
5168 pNewLogConfInfo->ulTag = ulNewTag;
5169
5170 *plcLogConf = (LOG_CONF)pNewLogConfInfo;
5171 }
5172
5173 return CR_SUCCESS;
5174}
5175
5176
5177/***********************************************************************
5178 * CM_Get_Next_Re_Des [SETUPAPI.@]
5179 */
5181WINAPI
5183 _Out_ PRES_DES prdResDes,
5184 _In_ RES_DES rdResDes,
5185 _In_ RESOURCEID ForResource,
5186 _Out_opt_ PRESOURCEID pResourceID,
5187 _In_ ULONG ulFlags)
5188{
5189 TRACE("CM_Get_Next_Res_Des(%p %p %lu %p %lx)\n",
5190 prdResDes, rdResDes, ForResource, pResourceID, ulFlags);
5191
5192 return CM_Get_Next_Res_Des_Ex(prdResDes, rdResDes, ForResource,
5193 pResourceID, ulFlags, NULL);
5194}
5195
5196
5197/***********************************************************************
5198 * CM_Get_Next_Re_Des_Ex [SETUPAPI.@]
5199 */
5201WINAPI
5203 _Out_ PRES_DES prdResDes,
5204 _In_ RES_DES rdResDes,
5205 _In_ RESOURCEID ForResource,
5206 _Out_opt_ PRESOURCEID pResourceID,
5207 _In_ ULONG ulFlags,
5208 _In_opt_ HMACHINE hMachine)
5209{
5211 HSTRING_TABLE StringTable = NULL;
5212 ULONG ulInTag, ulOutTag = 0;
5213 ULONG ulInType, ulOutType = 0;
5214 LPWSTR lpDevInst;
5215 DEVINST dnDevInst;
5216 CONFIGRET ret;
5217
5218 FIXME("CM_Get_Next_Res_Des_Ex(%p %p %lu %p %lx %p)\n",
5219 prdResDes, rdResDes, ForResource, pResourceID, ulFlags, hMachine);
5220
5221 if (prdResDes == NULL)
5222 return CR_INVALID_POINTER;
5223
5224 if (IsValidLogConf((PLOG_CONF_INFO)rdResDes))
5225 {
5226 FIXME("LogConf found!\n");
5227 dnDevInst = ((PLOG_CONF_INFO)rdResDes)->dnDevInst;
5228 ulInTag = ((PLOG_CONF_INFO)rdResDes)->ulTag;
5229 ulInType = ((PLOG_CONF_INFO)rdResDes)->ulType;
5230 }
5231#if 0
5232 else if (IsValidResDes((PRES_DES_INFO)rdResDes))
5233 {
5234 FIXME("ResDes found!\n");
5235 dnDevInst = ((PRES_DES_INFO)rdResDes)->dnDevInst;
5236 ulInTag = ((PRES_DES_INFO)rdResDes)->ulTag;
5237 ulInType = ((PRES_DES_INFO)rdResDes)->ulType;
5238 }
5239#endif
5240 else
5241 {
5242 return CR_INVALID_RES_DES;
5243 }
5244
5245 if (hMachine != NULL)
5246 {
5247 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
5248 if (BindingHandle == NULL)
5249 return CR_FAILURE;
5250
5251 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
5252 if (StringTable == 0)
5253 return CR_FAILURE;
5254 }
5255 else
5256 {
5257 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
5258 return CR_FAILURE;
5259 }
5260
5261 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
5262 if (lpDevInst == NULL)
5263 return CR_INVALID_DEVNODE;
5264
5266 {
5268 lpDevInst,
5269 ulInTag,
5270 ulInType,
5271 ForResource,
5272 0, /* unsigned long ulResourceTag, */
5273 &ulOutTag,
5274 &ulOutType,
5275 0);
5276 }
5278 {
5280 }
5282
5283 if (ret != CR_SUCCESS)
5284 return ret;
5285
5286 /* FIXME: Create the ResDes handle */
5287
5288 return CR_SUCCESS;
5289}
5290
5291
5292/***********************************************************************
5293 * CM_Get_Parent [SETUPAPI.@]
5294 */
5296WINAPI
5298 _Out_ PDEVINST pdnDevInst,
5299 _In_ DEVINST dnDevInst,
5300 _In_ ULONG ulFlags)
5301{
5302 TRACE("CM_Get_Parent(%p %p %lx)\n",
5303 pdnDevInst, dnDevInst, ulFlags);
5304
5305 return CM_Get_Parent_Ex(pdnDevInst, dnDevInst, ulFlags, NULL);
5306}
5307
5308
5309/***********************************************************************
5310 * CM_Get_Parent_Ex [SETUPAPI.@]
5311 */
5313WINAPI
5315 _Out_ PDEVINST pdnDevInst,
5316 _In_ DEVINST dnDevInst,
5317 _In_ ULONG ulFlags,
5318 _In_opt_ HMACHINE hMachine)
5319{
5320 WCHAR szRelatedDevInst[MAX_DEVICE_ID_LEN];
5322 HSTRING_TABLE StringTable = NULL;
5323 LPWSTR lpDevInst;
5324 DWORD dwIndex, dwLength = MAX_DEVICE_ID_LEN;
5325 CONFIGRET ret;
5326
5327 TRACE("CM_Get_Parent_Ex(%p %lx %lx %p)\n",
5328 pdnDevInst, dnDevInst, ulFlags, hMachine);
5329
5330 if (pdnDevInst == NULL)
5331 return CR_INVALID_POINTER;
5332
5333 if (dnDevInst == 0)
5334 return CR_INVALID_DEVINST;
5335
5336 if (ulFlags != 0)
5337 return CR_INVALID_FLAG;
5338
5339 *pdnDevInst = -1;
5340
5341 if (hMachine != NULL)
5342 {
5343 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
5344 if (BindingHandle == NULL)
5345 return CR_FAILURE;
5346
5347 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
5348 if (StringTable == 0)
5349 return CR_FAILURE;
5350 }
5351 else
5352 {
5353 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
5354 return CR_FAILURE;
5355 }
5356
5357 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
5358 if (lpDevInst == NULL)
5359 return CR_INVALID_DEVNODE;
5360
5362 {
5364 PNP_GET_PARENT_DEVICE_INSTANCE,
5365 lpDevInst,
5366 szRelatedDevInst,
5367 &dwLength,
5368 0);
5369 }
5371 {
5373 }
5375
5376 if (ret != CR_SUCCESS)
5377 return ret;
5378
5379 TRACE("szRelatedDevInst: %s\n", debugstr_w(szRelatedDevInst));
5380
5381 dwIndex = pSetupStringTableAddString(StringTable, szRelatedDevInst, 1);
5382 if (dwIndex == -1)
5383 return CR_FAILURE;
5384
5385 *pdnDevInst = dwIndex;
5386
5387 return CR_SUCCESS;
5388}
5389
5390
5391/***********************************************************************
5392 * CM_Get_Res_Des_Data [SETUPAPI.@]
5393 */
5395WINAPI
5397 _In_ RES_DES rdResDes,
5398 _Out_writes_bytes_(BufferLen) PVOID Buffer,
5399 _In_ ULONG BufferLen,
5400 _In_ ULONG ulFlags)
5401{
5402 TRACE("CM_Get_Res_Des_Data(%p %p %lu %lx)\n",
5403 rdResDes, Buffer, BufferLen, ulFlags);
5404
5405 return CM_Get_Res_Des_Data_Ex(rdResDes, Buffer, BufferLen, ulFlags, NULL);
5406}
5407
5408
5409/***********************************************************************
5410 * CM_Get_Res_Des_Data_Ex [SETUPAPI.@]
5411 */
5413WINAPI
5415 _In_ RES_DES rdResDes,
5416 _Out_writes_bytes_(BufferLen) PVOID Buffer,
5417 _In_ ULONG BufferLen,
5418 _In_ ULONG ulFlags,
5419 _In_opt_ HMACHINE hMachine)
5420{
5421 FIXME("CM_Get_Res_Des_Data_Ex(%p %p %lu %lx %p)\n",
5422 rdResDes, Buffer, BufferLen, ulFlags, hMachine);
5423
5425}
5426
5427
5428/***********************************************************************
5429 * CM_Get_Res_Des_Size [SETUPAPI.@]
5430 */
5432WINAPI
5435 _In_ RES_DES rdResDes,
5436 _In_ ULONG ulFlags)
5437{
5438 TRACE("CM_Get_Res_Des_Data_Size(%p %p %lx)\n",
5439 pulSize, rdResDes, ulFlags);
5440
5441 return CM_Get_Res_Des_Data_Size_Ex(pulSize, rdResDes, ulFlags, NULL);
5442}
5443
5444
5445/***********************************************************************
5446 * CM_Get_Res_Des_Size_Ex [SETUPAPI.@]
5447 */
5449WINAPI
5452 _In_ RES_DES rdResDes,
5453 _In_ ULONG ulFlags,
5454 _In_opt_ HMACHINE hMachine)
5455{
5456 TRACE("CM_Get_Res_Des_Data_Size_Ex(%p %p %lx %p)\n",
5457 pulSize, rdResDes, ulFlags, hMachine);
5458
5460}
5461
5462
5463/***********************************************************************
5464 * CM_Get_Resource_Conflict_Count [SETUPAPI.@]
5465 */
5467WINAPI
5469 _In_ CONFLICT_LIST clConflictList,
5470 _Out_ PULONG pulCount)
5471{
5472 PCONFLICT_DATA pConflictData;
5473
5474 FIXME("CM_Get_Resource_Conflict_Count(%p %p)\n",
5475 clConflictList, pulCount);
5476
5477 pConflictData = (PCONFLICT_DATA)clConflictList;
5478 if (!IsValidConflictData(pConflictData))
5480
5481 if (pulCount == NULL)
5482 return CR_INVALID_POINTER;
5483
5484 *pulCount = pConflictData->pConflictList->ConflictsListed;
5485
5486 return CR_SUCCESS;
5487}
5488
5489
5490/***********************************************************************
5491 * CM_Get_Resource_Conflict_DetailsA [SETUPAPI.@]
5492 */
5494WINAPI
5496 _In_ CONFLICT_LIST clConflictList,
5497 _In_ ULONG ulIndex,
5498 _Inout_ PCONFLICT_DETAILS_A pConflictDetails)
5499{
5500 FIXME("CM_Get_Resource_Conflict_CountA(%p %lu %p)\n",
5501 clConflictList, ulIndex, pConflictDetails);
5502
5504}
5505
5506
5507/***********************************************************************
5508 * CM_Get_Resource_Conflict_DetailsW [SETUPAPI.@]
5509 */
5511WINAPI
5513 _In_ CONFLICT_LIST clConflictList,
5514 _In_ ULONG ulIndex,
5515 _Inout_ PCONFLICT_DETAILS_W pConflictDetails)
5516{
5517 FIXME("CM_Get_Resource_Conflict_CountW(%p %lu %p)\n",
5518 clConflictList, ulIndex, pConflictDetails);
5519
5521}
5522
5523
5524/***********************************************************************
5525 * CM_Get_Sibling [SETUPAPI.@]
5526 */
5528WINAPI
5530 _Out_ PDEVINST pdnDevInst,
5531 _In_ DEVINST dnDevInst,
5532 _In_ ULONG ulFlags)
5533{
5534 TRACE("CM_Get_Sibling(%p %p %lx)\n",
5535 pdnDevInst, dnDevInst, ulFlags);
5536
5537 return CM_Get_Sibling_Ex(pdnDevInst, dnDevInst, ulFlags, NULL);
5538}
5539
5540
5541/***********************************************************************
5542 * CM_Get_Sibling_Ex [SETUPAPI.@]
5543 */
5545WINAPI
5547 _Out_ PDEVINST pdnDevInst,
5548 _In_ DEVINST dnDevInst,
5549 _In_ ULONG ulFlags,
5550 _In_opt_ HMACHINE hMachine)
5551{
5552 WCHAR szRelatedDevInst[MAX_DEVICE_ID_LEN];
5554 HSTRING_TABLE StringTable = NULL;
5555 LPWSTR lpDevInst;
5556 DWORD dwIndex, dwLength = MAX_DEVICE_ID_LEN;
5557 CONFIGRET ret;
5558
5559 TRACE("CM_Get_Sibling_Ex(%p %lx %lx %p)\n",
5560 pdnDevInst, dnDevInst, ulFlags, hMachine);
5561
5562 if (pdnDevInst == NULL)
5563 return CR_INVALID_POINTER;
5564
5565 if (dnDevInst == 0)
5566 return CR_INVALID_DEVINST;
5567
5568 if (ulFlags != 0)
5569 return CR_INVALID_FLAG;
5570
5571 *pdnDevInst = -1;
5572
5573 if (hMachine != NULL)
5574 {
5575 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
5576 if (BindingHandle == NULL)
5577 return CR_FAILURE;
5578
5579 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
5580 if (StringTable == 0)
5581 return CR_FAILURE;
5582 }
5583 else
5584 {
5585 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
5586 return CR_FAILURE;
5587 }
5588
5589 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
5590 if (lpDevInst == NULL)
5591 return CR_INVALID_DEVNODE;
5592
5594 {
5596 PNP_GET_SIBLING_DEVICE_INSTANCE,
5597 lpDevInst,
5598 szRelatedDevInst,
5599 &dwLength,
5600 0);
5601 }
5603 {
5605 }
5607
5608 if (ret != CR_SUCCESS)
5609 return ret;
5610
5611 TRACE("szRelatedDevInst: %s\n", debugstr_w(szRelatedDevInst));
5612
5613 dwIndex = pSetupStringTableAddString(StringTable, szRelatedDevInst, 1);
5614 if (dwIndex == -1)
5615 return CR_FAILURE;
5616
5617 *pdnDevInst = dwIndex;
5618
5619 return CR_SUCCESS;
5620}
5621
5622
5623/***********************************************************************
5624 * CM_Get_Version [SETUPAPI.@]
5625 */
5626WORD
5627WINAPI
5629{
5630 TRACE("CM_Get_Version()\n");
5631
5632 return CM_Get_Version_Ex(NULL);
5633}
5634
5635
5636/***********************************************************************
5637 * CM_Get_Version_Ex [SETUPAPI.@]
5638 */
5639WORD
5640WINAPI
5642 _In_opt_ HMACHINE hMachine)
5643{
5645 WORD Version = 0;
5646 CONFIGRET ret;
5647
5648 TRACE("CM_Get_Version_Ex(%p)\n", hMachine);
5649
5650 if (hMachine != NULL)
5651 {
5652 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
5653 if (BindingHandle == NULL)
5654 return 0;
5655 }
5656 else
5657 {
5659 return CR_FAILURE;
5660 }
5661
5663 {
5665 }
5667 {
5669 }
5671
5672 if (ret != CR_SUCCESS)
5673 return 0;
5674
5675 return Version;
5676}
5677
5678
5679/***********************************************************************
5680 * CM_Intersect_Range_List [SETUPAPI.@]
5681 */
5683WINAPI
5685 _In_ RANGE_LIST rlhOld1,
5686 _In_ RANGE_LIST rlhOld2,
5687 _In_ RANGE_LIST rlhNew,
5688 _In_ ULONG ulFlags)
5689{
5690 FIXME("CM_Intersect_Range_List(%p %p %p %lx)\n",
5691 rlhOld1, rlhOld2, rlhNew, ulFlags);
5692
5694}
5695
5696
5697/***********************************************************************
5698 * CM_Invert_Range_List [SETUPAPI.@]
5699 */
5701WINAPI
5703 _In_ RANGE_LIST rlhOld,
5704 _In_ RANGE_LIST rlhNew,
5705 _In_ DWORDLONG ullMaxValue,
5706 _In_ ULONG ulFlags)
5707{
5708 FIXME("CM_Invert_Range_List(%p %p %I64u %lx)\n",
5709 rlhOld, rlhNew, ullMaxValue, ulFlags);
5710
5712}
5713
5714
5715/***********************************************************************
5716 * CM_Is_Dock_Station_Present [SETUPAPI.@]
5717 */
5719WINAPI
5721 _Out_ PBOOL pbPresent)
5722{
5723 TRACE("CM_Is_Dock_Station_Present(%p)\n",
5724 pbPresent);
5725
5726 return CM_Is_Dock_Station_Present_Ex(pbPresent, NULL);
5727}
5728
5729
5730/***********************************************************************
5731 * CM_Is_Dock_Station_Present_Ex [SETUPAPI.@]
5732 */
5734WINAPI
5736 _Out_ PBOOL pbPresent,
5737 _In_opt_ HMACHINE hMachine)
5738{
5740 CONFIGRET ret;
5741
5742 TRACE("CM_Is_Dock_Station_Present_Ex(%p %p)\n",
5743 pbPresent, hMachine);
5744
5745 if (pbPresent == NULL)
5746 return CR_INVALID_POINTER;
5747
5748 *pbPresent = FALSE;
5749
5750 if (hMachine != NULL)
5751 {
5752 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
5753 if (BindingHandle == NULL)
5754 return CR_FAILURE;
5755 }
5756 else
5757 {
5759 return CR_FAILURE;
5760 }
5761
5763 {
5765 pbPresent);
5766 }
5768 {
5770 }
5772
5773 return ret;
5774}
5775
5776
5777/***********************************************************************
5778 * CM_Is_Version_Available_Ex [SETUPAPI.@]
5779 */
5780BOOL
5781WINAPI
5783 _In_ WORD wVersion)
5784{
5785 TRACE("CM_Is_Version_Available(%hu)\n",
5786 wVersion);
5787
5788 return CM_Is_Version_Available_Ex(wVersion, NULL);
5789}
5790
5791
5792/***********************************************************************
5793 * CM_Is_Version_Available_Ex [SETUPAPI.@]
5794 */
5795BOOL
5796WINAPI
5798 _In_ WORD wVersion,
5799 _In_opt_ HMACHINE hMachine)
5800{
5802 WORD wServerVersion;
5803 CONFIGRET ret;
5804
5805 TRACE("CM_Is_Version_Available_Ex(%hu %p)\n",
5806 wVersion, hMachine);
5807
5808 if (wVersion <= 0x400)
5809 return TRUE;
5810
5811 if (hMachine != NULL)
5812 {
5813 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
5814 if (BindingHandle == NULL)
5815 return FALSE;
5816 }
5817 else
5818 {
5820 return FALSE;
5821 }
5822
5824 {
5825 ret = PNP_GetVersion(BindingHandle, &wServerVersion);
5826 }
5828 {
5830 }
5832
5833 if (ret != CR_SUCCESS)
5834 return FALSE;
5835
5836 return (wServerVersion >= wVersion);
5837}
5838
5839
5840/***********************************************************************
5841 * CM_Locate_DevNodeA [SETUPAPI.@]
5842 */
5844WINAPI
5846 _Out_ PDEVINST pdnDevInst,
5847 _In_opt_ DEVINSTID_A pDeviceID,
5848 _In_ ULONG ulFlags)
5849{
5850 TRACE("CM_Locate_DevNodeA(%p %s %lx)\n",
5851 pdnDevInst, debugstr_a(pDeviceID), ulFlags);
5852
5853 return CM_Locate_DevNode_ExA(pdnDevInst, pDeviceID, ulFlags, NULL);
5854}
5855
5856
5857/***********************************************************************
5858 * CM_Locate_DevNodeW [SETUPAPI.@]
5859 */
5861WINAPI
5863 _Out_ PDEVINST pdnDevInst,
5864 _In_opt_ DEVINSTID_W pDeviceID,
5865 _In_ ULONG ulFlags)
5866{
5867 TRACE("CM_Locate_DevNodeW(%p %s %lx)\n",
5868 pdnDevInst, debugstr_w(pDeviceID), ulFlags);
5869
5870 return CM_Locate_DevNode_ExW(pdnDevInst, pDeviceID, ulFlags, NULL);
5871}
5872
5873
5874/***********************************************************************
5875 * CM_Locate_DevNode_ExA [SETUPAPI.@]
5876 */
5878WINAPI
5880 _Out_ PDEVINST pdnDevInst,
5881 _In_opt_ DEVINSTID_A pDeviceID,
5882 _In_ ULONG ulFlags,
5883 _In_opt_ HMACHINE hMachine)
5884{
5885 DEVINSTID_W pDevIdW = NULL;
5887
5888 TRACE("CM_Locate_DevNode_ExA(%p %s %lx %p)\n",
5889 pdnDevInst, debugstr_a(pDeviceID), ulFlags, hMachine);
5890
5891 if (pDeviceID != NULL)
5892 {
5893 if (pSetupCaptureAndConvertAnsiArg(pDeviceID, &pDevIdW))
5894 return CR_INVALID_DEVICE_ID;
5895 }
5896
5897 ret = CM_Locate_DevNode_ExW(pdnDevInst, pDevIdW, ulFlags, hMachine);
5898
5899 if (pDevIdW != NULL)
5900 MyFree(pDevIdW);
5901
5902 return ret;
5903}
5904
5905
5906/***********************************************************************
5907 * CM_Locate_DevNode_ExW [SETUPAPI.@]
5908 */
5910WINAPI
5912 _Out_ PDEVINST pdnDevInst,
5913 _In_opt_ DEVINSTID_W pDeviceID,
5914 _In_ ULONG ulFlags,
5915 _In_opt_ HMACHINE hMachine)
5916{
5917 WCHAR DeviceIdBuffer[MAX_DEVICE_ID_LEN];
5919 HSTRING_TABLE StringTable = NULL;
5921
5922 TRACE("CM_Locate_DevNode_ExW(%p %s %lx %p)\n",
5923 pdnDevInst, debugstr_w(pDeviceID), ulFlags, hMachine);
5924
5925 if (pdnDevInst == NULL)
5926 return CR_INVALID_POINTER;
5927
5928 if (ulFlags & ~CM_LOCATE_DEVNODE_BITS)
5929 return CR_INVALID_FLAG;
5930
5931 if (hMachine != NULL)
5932 {
5933 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
5934 if (BindingHandle == NULL)
5935 return CR_FAILURE;
5936
5937 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
5938 if (StringTable == 0)
5939 return CR_FAILURE;
5940 }
5941 else
5942 {
5943 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
5944 return CR_FAILURE;
5945 }
5946
5947 if (pDeviceID != NULL && lstrlenW(pDeviceID) != 0)
5948 {
5949 lstrcpyW(DeviceIdBuffer, pDeviceID);
5950
5952 {
5953 /* Validate the device ID */
5955 DeviceIdBuffer,
5956 ulFlags);
5957 }
5959 {
5961 }
5963 }
5964 else
5965 {
5967 {
5968 /* Get the root device ID */
5970 DeviceIdBuffer,
5972 }
5974 {
5976 }
5978 }
5979
5980 TRACE("DeviceIdBuffer: %s\n", debugstr_w(DeviceIdBuffer));
5981
5982 if (ret == CR_SUCCESS)
5983 {
5984 *pdnDevInst = pSetupStringTableAddString(StringTable, DeviceIdBuffer, 1);
5985 if (*pdnDevInst == -1)
5986 ret = CR_FAILURE;
5987 }
5988
5989 return ret;
5990}
5991
5992
5993/***********************************************************************
5994 * CM_Merge_Range_List [SETUPAPI.@]
5995 */
5997WINAPI
5999 _In_ RANGE_LIST rlhOld1,
6000 _In_ RANGE_LIST rlhOld2,
6001 _In_ RANGE_LIST rlhNew,
6002 _In_ ULONG ulFlags)
6003{
6004 FIXME("CM_Merge_Range_List(%p %p %p %lx)\n",
6005 rlhOld1, rlhOld2, rlhNew, ulFlags);
6006
6008}
6009
6010
6011/***********************************************************************
6012 * CM_Modify_Res_Des [SETUPAPI.@]
6013 */
6015WINAPI
6017 _Out_ PRES_DES prdResDes,
6018 _In_ RES_DES rdResDes,
6019 _In_ RESOURCEID ResourceID,
6020 _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
6021 _In_ ULONG ResourceLen,
6022 _In_ ULONG ulFlags)
6023{
6024 TRACE("CM_Modify_Res_Des(%p %p %lx %p %lu %lx)\n",
6025 prdResDes, rdResDes, ResourceID, ResourceData,
6026 ResourceLen, ulFlags);
6027
6028 return CM_Modify_Res_Des_Ex(prdResDes, rdResDes, ResourceID, ResourceData,
6029 ResourceLen, ulFlags, NULL);
6030}
6031
6032
6033/***********************************************************************
6034 * CM_Modify_Res_Des_Ex [SETUPAPI.@]
6035 */
6037WINAPI
6039 _Out_ PRES_DES prdResDes,
6040 _In_ RES_DES rdResDes,
6041 _In_ RESOURCEID ResourceID,
6042 _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
6043 _In_ ULONG ResourceLen,
6044 _In_ ULONG ulFlags,
6045 _In_opt_ HMACHINE hMachine)
6046{
6047 FIXME("CM_Modify_Res_Des_Ex(%p %p %lx %p %lu %lx %p)\n",
6048 prdResDes, rdResDes, ResourceID, ResourceData,
6049 ResourceLen, ulFlags, hMachine);
6050
6052}
6053
6054
6055/***********************************************************************
6056 * CM_Move_DevNode [SETUPAPI.@]
6057 */
6059WINAPI
6061 _In_ DEVINST dnFromDevInst,
6062 _In_ DEVINST dnToDevInst,
6063 _In_ ULONG ulFlags)
6064{
6065 TRACE("CM_Move_DevNode(%lx %lx %lx)\n",
6066 dnFromDevInst, dnToDevInst, ulFlags);
6067
6068 return CM_Move_DevNode_Ex(dnFromDevInst, dnToDevInst, ulFlags, NULL);
6069}
6070
6071
6072/***********************************************************************
6073 * CM_Move_DevNode_Ex [SETUPAPI.@]
6074 */
6076WINAPI
6078 _In_ DEVINST dnFromDevInst,
6079 _In_ DEVINST dnToDevInst,
6080 _In_ ULONG ulFlags,
6081 _In_opt_ HMACHINE hMachine)
6082{
6084 HSTRING_TABLE StringTable = NULL;
6085 LPWSTR lpFromDevInst;
6086 LPWSTR lpToDevInst;
6087 CONFIGRET ret;
6088
6089 FIXME("CM_Move_DevNode_Ex(%lx %lx %lx %p)\n",
6090 dnFromDevInst, dnToDevInst, ulFlags, hMachine);
6091
6092 if (!pSetupIsUserAdmin())
6093 return CR_ACCESS_DENIED;
6094
6095 if (dnFromDevInst == 0 || dnToDevInst == 0)
6096 return CR_INVALID_DEVNODE;
6097
6098 if (ulFlags != 0)
6099 return CR_INVALID_FLAG;
6100
6101 if (hMachine != NULL)
6102 {
6103 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
6104 if (BindingHandle == NULL)
6105 return CR_FAILURE;
6106
6107 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
6108 if (StringTable == 0)
6109 return CR_FAILURE;
6110 }
6111 else
6112 {
6113 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
6114 return CR_FAILURE;
6115 }
6116
6117 lpFromDevInst = pSetupStringTableStringFromId(StringTable, dnFromDevInst);
6118 if (lpFromDevInst == NULL)
6119 return CR_INVALID_DEVNODE;
6120
6121 lpToDevInst = pSetupStringTableStringFromId(StringTable, dnToDevInst);
6122 if (lpToDevInst == NULL)
6123 return CR_INVALID_DEVNODE;
6124
6126 {
6128 PNP_DEVINST_MOVE,
6129 ulFlags,
6130 lpFromDevInst,
6131 lpToDevInst);
6132 }
6134 {
6136 }
6138
6139 return ret;
6140}
6141
6142
6143/***********************************************************************
6144 * CM_Next_Range [SETUPAPI.@]
6145 */
6147WINAPI
6149 _Inout_ PRANGE_ELEMENT preElement,
6150 _Out_ PDWORDLONG pullStart,
6151 _Out_ PDWORDLONG pullEnd,
6152 _In_ ULONG ulFlags)
6153{
6154 PINTERNAL_RANGE_LIST pRangeList;
6155 PINTERNAL_RANGE pRange;
6156 PLIST_ENTRY ListEntry;
6158
6159 FIXME("CM_Next_Range(%p %p %p %lx)\n",
6160 preElement, pullStart, pullEnd, ulFlags);
6161
6162 pRange = (PINTERNAL_RANGE)preElement;
6163
6164 if (pRange == NULL || pRange->pRangeList == NULL)
6165 return CR_FAILURE;
6166
6167 if (pullStart == NULL || pullEnd == NULL)
6168 return CR_INVALID_POINTER;
6169
6170 if (ulFlags != 0)
6171 return CR_INVALID_FLAG;
6172
6173 pRangeList = pRange->pRangeList;
6174
6175 /* Lock the range list */
6176 WaitForSingleObject(pRangeList->hMutex, INFINITE);
6177
6178 /* Fail, if we reached the end of the list */
6179 if (pRange->ListEntry.Flink == &pRangeList->ListHead)
6180 {
6181 ret = CR_FAILURE;
6182 goto done;
6183 }
6184
6185 /* Get the next range */
6186 ListEntry = pRangeList->ListHead.Flink;
6187 pRange = CONTAINING_RECORD(ListEntry, INTERNAL_RANGE, ListEntry);
6188
6189 /* Return the range data */
6190 *pullStart = pRange->ullStart;
6191 *pullEnd = pRange->ullEnd;
6192 *preElement = (RANGE_ELEMENT)pRange;
6193
6194done:
6195 /* Unlock the range list */
6196 ReleaseMutex(pRangeList->hMutex);
6197
6198 return ret;
6199}
6200
6201
6202/***********************************************************************
6203 * CM_Open_Class_KeyA [SETUPAPI.@]
6204 */
6206WINAPI
6208 _In_opt_ LPGUID pClassGuid,
6209 _In_opt_ LPCSTR pszClassName,
6210 _In_ REGSAM samDesired,
6212 _Out_ PHKEY phkClass,
6213 _In_ ULONG ulFlags)
6214{
6215 TRACE("CM_Open_Class_KeyA(%p %s %lx %lx %p %lx)\n",
6216 debugstr_guid(pClassGuid), debugstr_a(pszClassName),
6217 samDesired, Disposition, phkClass, ulFlags);
6218
6219 return CM_Open_Class_Key_ExA(pClassGuid, pszClassName, samDesired,
6220 Disposition, phkClass, ulFlags, NULL);
6221}
6222
6223
6224/***********************************************************************
6225 * CM_Open_Class_KeyW [SETUPAPI.@]
6226 */
6228WINAPI
6230 _In_opt_ LPGUID pClassGuid,
6231 _In_opt_ LPCWSTR pszClassName,
6232 _In_ REGSAM samDesired,
6234 _Out_ PHKEY phkClass,
6235 _In_ ULONG ulFlags)
6236{
6237 TRACE("CM_Open_Class_KeyW(%p %s %lx %lx %p %lx)\n",
6238 debugstr_guid(pClassGuid), debugstr_w(pszClassName),
6239 samDesired, Disposition, phkClass, ulFlags);
6240
6241 return CM_Open_Class_Key_ExW(pClassGuid, pszClassName, samDesired,
6242 Disposition, phkClass, ulFlags, NULL);
6243}
6244
6245
6246/***********************************************************************
6247 * CM_Open_Class_Key_ExA [SETUPAPI.@]
6248 */
6250WINAPI
6252 _In_opt_ LPGUID pClassGuid,
6253 _In_opt_ LPCSTR pszClassName,
6254 _In_ REGSAM samDesired,
6256 _Out_ PHKEY phkClass,
6257 _In_ ULONG ulFlags,
6258 _In_opt_ HMACHINE hMachine)
6259{
6260 LPWSTR pszClassNameW = NULL;
6261 CONFIGRET ret;
6262
6263 TRACE("CM_Open_Class_Key_ExA(%p %s %lx %lx %p %lx %p)\n",
6264 debugstr_guid(pClassGuid), debugstr_a(pszClassName),
6265 samDesired, Disposition, phkClass, ulFlags, hMachine);
6266
6267 if (pszClassName != NULL)
6268 {
6269 if (pSetupCaptureAndConvertAnsiArg(pszClassName, &pszClassNameW))
6270 return CR_INVALID_DATA;
6271 }
6272
6273 ret = CM_Open_Class_Key_ExW(pClassGuid, pszClassNameW, samDesired,
6274 Disposition, phkClass, ulFlags, hMachine);
6275
6276 if (pszClassNameW != NULL)
6277 MyFree(pszClassNameW);
6278
6279 return ret;
6280}
6281
6282
6283/***********************************************************************
6284 * CM_Open_Class_Key_ExW [SETUPAPI.@]
6285 */
6287WINAPI
6289 _In_opt_ LPGUID pClassGuid,
6290 _In_opt_ LPCWSTR pszClassName,
6291 _In_ REGSAM samDesired,
6293 _Out_ PHKEY phkClass,
6294 _In_ ULONG ulFlags,
6295 _In_opt_ HMACHINE hMachine)
6296{
6297 WCHAR szKeyName[MAX_PATH];
6298 LPWSTR lpGuidString;
6299 DWORD dwDisposition;
6300 DWORD dwError;
6301 HKEY hKey;
6302
6303 TRACE("CM_Open_Class_Key_ExW(%p %s %lx %lx %p %lx %p)\n",
6304 debugstr_guid(pClassGuid), debugstr_w(pszClassName),
6305 samDesired, Disposition, phkClass, ulFlags, hMachine);
6306
6307 /* Check Disposition and ulFlags */
6309 (ulFlags & ~CM_OPEN_CLASS_KEY_BITS))
6310 return CR_INVALID_FLAG;
6311
6312 /* Check phkClass */
6313 if (phkClass == NULL)
6314 return CR_INVALID_POINTER;
6315
6316 *phkClass = NULL;
6317
6318 if (ulFlags == CM_OPEN_CLASS_KEY_INTERFACE &&
6319 pszClassName != NULL)
6320 return CR_INVALID_DATA;
6321
6322 if (hMachine == NULL)
6323 {
6325 }
6326 else
6327 {
6328 if (RegConnectRegistryW(((PMACHINE_INFO)hMachine)->szMachineName,
6330 &hKey))
6331 return CR_REGISTRY_ERROR;
6332 }
6333
6334 if (ulFlags & CM_OPEN_CLASS_KEY_INTERFACE)
6335 {
6336 lstrcpyW(szKeyName, DeviceClasses);
6337 }
6338 else
6339 {
6340 lstrcpyW(szKeyName, ControlClass);
6341 }
6342
6343 if (pClassGuid != NULL)
6344 {
6345 if (UuidToStringW((UUID*)pClassGuid, &lpGuidString) != RPC_S_OK)
6346 {
6348 return CR_INVALID_DATA;
6349 }
6350
6351 lstrcatW(szKeyName, BackslashOpenBrace);
6352 lstrcatW(szKeyName, lpGuidString);
6353 lstrcatW(szKeyName, CloseBrace);
6354 }
6355
6357 {
6358 dwError = RegCreateKeyExW(hKey, szKeyName, 0, NULL, 0, samDesired,
6359 NULL, phkClass, &dwDisposition);
6360 }
6361 else
6362 {
6363 dwError = RegOpenKeyExW(hKey, szKeyName, 0, samDesired, phkClass);
6364 }
6365
6367
6368 if (pClassGuid != NULL)
6369 RpcStringFreeW(&lpGuidString);
6370
6371 if (dwError != ERROR_SUCCESS)
6372 {
6373 *phkClass = NULL;
6375 }
6376
6377 if (pszClassName != NULL)
6378 {
6379 RegSetValueExW(*phkClass, Class, 0, REG_SZ, (LPBYTE)pszClassName,
6380 (lstrlenW(pszClassName) + 1) * sizeof(WCHAR));
6381 }
6382
6383 return CR_SUCCESS;
6384}
6385
6386
6387/***********************************************************************
6388 * CM_Open_DevNode_Key [SETUPAPI.@]
6389 */
6391WINAPI
6393 _In_ DEVINST dnDevNode,
6394 _In_ REGSAM samDesired,
6395 _In_ ULONG ulHardwareProfile,
6397 _Out_ PHKEY phkDevice,
6398 _In_ ULONG ulFlags)
6399{
6400 TRACE("CM_Open_DevNode_Key(%lx %lx %lu %lx %p %lx)\n",
6401 dnDevNode, samDesired, ulHardwareProfile, Disposition, phkDevice, ulFlags);
6402
6403 return CM_Open_DevNode_Key_Ex(dnDevNode, samDesired, ulHardwareProfile,
6404 Disposition, phkDevice, ulFlags, NULL);
6405}
6406
6407
6408/***********************************************************************
6409 * CM_Open_DevNode_Key_Ex [SETUPAPI.@]
6410 */
6412WINAPI
6414 _In_ DEVINST dnDevNode,
6415 _In_ REGSAM samDesired,
6416 _In_ ULONG ulHardwareProfile,
6418 _Out_ PHKEY phkDevice,
6419 _In_ ULONG ulFlags,
6420 _In_opt_ HMACHINE hMachine)
6421{
6423 HSTRING_TABLE StringTable = NULL;
6424 LPWSTR pszDevInst, pszKeyPath = NULL, pszInstancePath = NULL;
6425 LONG lError;
6426 DWORD dwDisposition;
6427 HKEY hRootKey = NULL;
6429
6430 TRACE("CM_Open_DevNode_Key_Ex(%lx %lx %lu %lx %p %lx %p)\n",
6431 dnDevNode, samDesired, ulHardwareProfile, Disposition, phkDevice, ulFlags, hMachine);
6432
6433 if (phkDevice == NULL)
6434 return CR_INVALID_POINTER;
6435
6436 *phkDevice = NULL;
6437
6438 if (dnDevNode == 0)
6439 return CR_INVALID_DEVNODE;
6440
6441 if (ulFlags & ~CM_REGISTRY_BITS)
6442 return CR_INVALID_FLAG;
6443
6445 return CR_INVALID_DATA;
6446
6447 if (hMachine != NULL)
6448 {
6449 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
6450 if (BindingHandle == NULL)
6451 return CR_FAILURE;
6452
6453 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
6454 if (StringTable == 0)
6455 return CR_FAILURE;
6456 }
6457 else
6458 {
6459 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
6460 return CR_FAILURE;
6461 }
6462
6463 pszDevInst = pSetupStringTableStringFromId(StringTable, dnDevNode);
6464 if (pszDevInst == NULL)
6465 return CR_INVALID_DEVNODE;
6466
6467 TRACE("pszDevInst: %S\n", pszDevInst);
6468
6469 pszKeyPath = MyMalloc(512 * sizeof(WCHAR));
6470 if (pszKeyPath == NULL)
6471 {
6473 goto done;
6474 }
6475
6476 pszInstancePath = MyMalloc(512 * sizeof(WCHAR));
6477 if (pszInstancePath == NULL)
6478 {
6480 goto done;
6481 }
6482
6484 pszDevInst,
6485 pszKeyPath,
6486 pszInstancePath,
6487 ulHardwareProfile,
6488 ulFlags);
6489 if (ret != CR_SUCCESS)
6490 goto done;
6491
6492 TRACE("pszKeyPath: %S\n", pszKeyPath);
6493 TRACE("pszInstancePath: %S\n", pszInstancePath);
6494
6495 wcscat(pszKeyPath, L"\\");
6496 wcscat(pszKeyPath, pszInstancePath);
6497
6498 TRACE("pszKeyPath: %S\n", pszKeyPath);
6499
6500 if (hMachine == NULL)
6501 {
6502 hRootKey = HKEY_LOCAL_MACHINE;
6503 }
6504 else
6505 {
6506 if (RegConnectRegistryW(((PMACHINE_INFO)hMachine)->szMachineName,
6508 &hRootKey))
6509 {
6511 goto done;
6512 }
6513 }
6514
6516 {
6517 lError = RegCreateKeyExW(hRootKey,
6518 pszKeyPath,
6519 0,
6520 NULL,
6521 0,
6522 samDesired,
6523 NULL,
6524 phkDevice,
6525 &dwDisposition);
6526 }
6527 else
6528 {
6529 lError = RegOpenKeyExW(hRootKey,
6530 pszKeyPath,
6531 0,
6532 samDesired,
6533 phkDevice);
6534 }
6535
6536 if (lError != ERROR_SUCCESS)
6537 {
6538 *phkDevice = NULL;
6540 }
6541
6542done:
6543 if ((hRootKey != NULL) && (hRootKey != HKEY_LOCAL_MACHINE))
6544 RegCloseKey(hRootKey);
6545
6546 if (pszInstancePath != NULL)
6547 MyFree(pszInstancePath);
6548
6549 if (pszKeyPath != NULL)
6550 MyFree(pszKeyPath);
6551
6552 return ret;
6553}
6554
6555
6556/***********************************************************************
6557 * CM_Query_And_Remove_SubTreeA [SETUPAPI.@]
6558 */
6560WINAPI
6562 _In_ DEVINST dnAncestor,
6563 _Out_opt_ PPNP_VETO_TYPE pVetoType,
6564 _Out_writes_opt_(ulNameLength) LPSTR pszVetoName,
6565 _In_ ULONG ulNameLength,
6566 _In_ ULONG ulFlags)
6567{
6568 TRACE("CM_Query_And_Remove_SubTreeA(%lx %p %p %lu %lx)\n",
6569 dnAncestor, pVetoType, pszVetoName, ulNameLength, ulFlags);
6570
6571 return CM_Query_And_Remove_SubTree_ExA(dnAncestor, pVetoType, pszVetoName,
6572 ulNameLength, ulFlags, NULL);
6573}
6574
6575
6576/***********************************************************************
6577 * CM_Query_And_Remove_SubTreeW [SETUPAPI.@]
6578 */
6580WINAPI
6582 _In_ DEVINST dnAncestor,
6583 _Out_opt_ PPNP_VETO_TYPE pVetoType,
6584 _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName,
6585 _In_ ULONG ulNameLength,
6586 _In_ ULONG ulFlags)
6587{
6588 TRACE("CM_Query_And_Remove_SubTreeW(%lx %p %p %lu %lx)\n",
6589 dnAncestor, pVetoType, pszVetoName, ulNameLength, ulFlags);
6590
6591 return CM_Query_And_Remove_SubTree_ExW(dnAncestor, pVetoType, pszVetoName,
6592 ulNameLength, ulFlags, NULL);
6593}
6594
6595
6596/***********************************************************************
6597 * CM_Query_And_Remove_SubTree_ExA [SETUPAPI.@]
6598 */
6600WINAPI
6602 _In_ DEVINST dnAncestor,
6603 _Out_opt_ PPNP_VETO_TYPE pVetoType,
6604 _Out_writes_opt_(ulNameLength) LPSTR pszVetoName,
6605 _In_ ULONG ulNameLength,
6606 _In_ ULONG ulFlags,
6607 _In_opt_ HMACHINE hMachine)
6608{
6609 LPWSTR lpLocalVetoName;
6610 CONFIGRET ret;
6611
6612 TRACE("CM_Query_And_Remove_SubTree_ExA(%lx %p %p %lu %lx %p)\n",
6613 dnAncestor, pVetoType, pszVetoName, ulNameLength,
6614 ulFlags, hMachine);
6615
6616 if (pszVetoName == NULL && ulNameLength == 0)
6617 return CR_INVALID_POINTER;
6618
6619 lpLocalVetoName = HeapAlloc(GetProcessHeap(), 0, ulNameLength * sizeof(WCHAR));
6620 if (lpLocalVetoName == NULL)
6621 return CR_OUT_OF_MEMORY;
6622
6623 ret = CM_Query_And_Remove_SubTree_ExW(dnAncestor, pVetoType, lpLocalVetoName,
6624 ulNameLength, ulFlags, hMachine);
6625 if (ret == CR_REMOVE_VETOED)
6626 {
6628 0,
6629 lpLocalVetoName,
6630 ulNameLength,
6631 pszVetoName,
6632 ulNameLength,
6633 NULL,
6634 NULL) == 0)
6635 ret = CR_FAILURE;
6636 }
6637
6638 HeapFree(GetProcessHeap(), 0, lpLocalVetoName);
6639
6640 return ret;
6641}
6642
6643
6644/***********************************************************************
6645 * CM_Query_And_Remove_SubTree_ExW [SETUPAPI.@]
6646 */
6648WINAPI
6650 _In_ DEVINST dnAncestor,
6651 _Out_opt_ PPNP_VETO_TYPE pVetoType,
6652 _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName,
6653 _In_ ULONG ulNameLength,
6654 _In_ ULONG ulFlags,
6655 _In_opt_ HMACHINE hMachine)
6656{
6658 HSTRING_TABLE StringTable = NULL;
6659 LPWSTR lpDevInst;
6660 CONFIGRET ret;
6661
6662 TRACE("CM_Query_And_Remove_SubTree_ExW(%lx %p %p %lu %lx %p)\n",
6663 dnAncestor, pVetoType, pszVetoName, ulNameLength,
6664 ulFlags, hMachine);
6665
6666 if (dnAncestor == 0)
6667 return CR_INVALID_DEVNODE;
6668
6669 if (ulFlags & ~CM_REMOVE_BITS)
6670 return CR_INVALID_FLAG;
6671
6672 if (pszVetoName == NULL && ulNameLength == 0)
6673 return CR_INVALID_POINTER;
6674
6675 if (hMachine != NULL)
6676 {
6677 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
6678 if (BindingHandle == NULL)
6679 return CR_FAILURE;
6680
6681 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
6682 if (StringTable == 0)
6683 return CR_FAILURE;
6684 }
6685 else
6686 {
6687 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
6688 return CR_FAILURE;
6689 }
6690
6691 lpDevInst = pSetupStringTableStringFromId(StringTable, dnAncestor);
6692 if (lpDevInst == NULL)
6693 return CR_INVALID_DEVNODE;
6694
6696 {
6698 lpDevInst,
6699 pVetoType,
6700 pszVetoName,
6701 ulNameLength,
6702 ulFlags);
6703 }
6705 {
6707 }
6709
6710 return ret;
6711}
6712
6713
6714/***********************************************************************
6715 * CM_Query_Arbitrator_Free_Data [SETUPAPI.@]
6716 */
6718WINAPI
6721 _In_ ULONG DataLen,
6722 _In_ DEVINST dnDevInst,
6723 _In_ RESOURCEID ResourceID,
6724 _In_ ULONG ulFlags)
6725{
6726 TRACE("CM_Query_Arbitrator_Free_Data(%p %lu %lx %lu 0x%08lx)\n",
6727 pData, DataLen, dnDevInst, ResourceID, ulFlags);
6728
6729 return CM_Query_Arbitrator_Free_Data_Ex(pData, DataLen, dnDevInst,
6730 ResourceID, ulFlags, NULL);
6731}
6732
6733
6734/***********************************************************************
6735 * CM_Query_Arbitrator_Free_Data_Ex [SETUPAPI.@]
6736 */
6738WINAPI
6741 _In_ ULONG DataLen,
6742 _In_ DEVINST dnDevInst,
6743 _In_ RESOURCEID ResourceID,
6744 _In_ ULONG ulFlags,
6745 _In_opt_ HMACHINE hMachine)
6746{
6748 HSTRING_TABLE StringTable = NULL;
6749 LPWSTR lpDevInst;
6750 CONFIGRET ret;
6751
6752 TRACE("CM_Query_Arbitrator_Free_Data_Ex(%p %lu %lx %lu 0x%08lx %p)\n",
6753 pData, DataLen, dnDevInst, ResourceID, ulFlags, hMachine);
6754
6755 if (pData == NULL || DataLen == 0)
6756 return CR_INVALID_POINTER;
6757
6758 if (dnDevInst == 0)
6759 return CR_INVALID_DEVINST;
6760
6761 if (ulFlags & ~CM_QUERY_ARBITRATOR_BITS)
6762 return CR_INVALID_FLAG;
6763
6764 if (hMachine != NULL)
6765 {
6766 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
6767 if (BindingHandle == NULL)
6768 return CR_FAILURE;
6769
6770 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
6771 if (StringTable == 0)
6772 return CR_FAILURE;
6773 }
6774 else
6775 {
6776 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
6777 return CR_FAILURE;
6778 }
6779
6780 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
6781 if (lpDevInst == NULL)
6782 return CR_INVALID_DEVNODE;
6783
6785 {
6787 pData,
6788 DataLen,
6789 lpDevInst,
6790 ResourceID,
6791 ulFlags);
6792 }
6794 {
6796 }
6798
6799 return ret;
6800}
6801
6802
6803/***********************************************************************
6804 * CM_Query_Arbitrator_Free_Size [SETUPAPI.@]
6805 */
6807WINAPI
6810 _In_ DEVINST dnDevInst,
6811 _In_ RESOURCEID ResourceID,
6812 _In_ ULONG ulFlags)
6813{
6814 TRACE("CM_Query_Arbitrator_Free_Size(%p %lu %lx 0x%08lx)\n",
6815 pulSize, dnDevInst,ResourceID, ulFlags);
6816
6817 return CM_Query_Arbitrator_Free_Size_Ex(pulSize, dnDevInst, ResourceID,
6818 ulFlags, NULL);
6819}
6820
6821
6822/***********************************************************************
6823 * CM_Query_Arbitrator_Free_Size_Ex [SETUPAPI.@]
6824 */
6826WINAPI
6829 _In_ DEVINST dnDevInst,
6830 _In_ RESOURCEID ResourceID,
6831 _In_ ULONG ulFlags,
6832 _In_opt_ HMACHINE hMachine)
6833{
6835 HSTRING_TABLE StringTable = NULL;
6836 LPWSTR lpDevInst;
6837 CONFIGRET ret;
6838
6839 TRACE("CM_Query_Arbitrator_Free_Size_Ex(%p %lu %lx 0x%08lx %p)\n",
6840 pulSize, dnDevInst,ResourceID, ulFlags, hMachine);
6841
6842 if (pulSize == NULL)
6843 return CR_INVALID_POINTER;
6844
6845 if (dnDevInst == 0)
6846 return CR_INVALID_DEVINST;
6847
6848 if (ulFlags & ~CM_QUERY_ARBITRATOR_BITS)
6849 return CR_INVALID_FLAG;
6850
6851 if (hMachine != NULL)
6852 {
6853 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
6854 if (BindingHandle == NULL)
6855 return CR_FAILURE;
6856
6857 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
6858 if (StringTable == 0)
6859 return CR_FAILURE;
6860 }
6861 else
6862 {
6863 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
6864 return CR_FAILURE;
6865 }
6866
6867 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
6868 if (lpDevInst == NULL)
6869 return CR_INVALID_DEVNODE;
6870
6872 {
6874 pulSize,
6875 lpDevInst,
6876 ResourceID,
6877 ulFlags);
6878 }
6880 {
6882 }
6884
6885 return ret;
6886}
6887
6888
6889/***********************************************************************
6890 * CM_Query_Remove_SubTree [SETUPAPI.@]
6891 *
6892 * This function is obsolete in Windows XP and above.
6893 */
6895WINAPI
6897 _In_ DEVINST dnAncestor,
6898 _In_ ULONG ulFlags)
6899{
6900 TRACE("CM_Query_Remove_SubTree(%lx %lx)\n",
6901 dnAncestor, ulFlags);
6902
6904}
6905
6906
6907/***********************************************************************
6908 * CM_Query_Remove_SubTree_Ex [SETUPAPI.@]
6909 *
6910 * This function is obsolete in Windows XP and above.
6911 */
6913WINAPI
6915 _In_ DEVINST dnAncestor,
6916 _In_ ULONG ulFlags,
6917 _In_opt_ HMACHINE hMachine)
6918{
6919 TRACE("CM_Query_Remove_SubTree_Ex(%lx %lx %p)\n",
6920 dnAncestor, ulFlags, hMachine);
6921
6923}
6924
6925
6926/***********************************************************************
6927 * CM_Query_Resource_Conflict_List [SETUPAPI.@]
6928 */
6930WINAPI
6932 _Out_ PCONFLICT_LIST pclConflictList,
6933 _In_ DEVINST dnDevInst,
6934 _In_ RESOURCEID ResourceID,
6935 _In_ PCVOID ResourceData,
6936 _In_ ULONG ResourceLen,
6937 _In_ ULONG ulFlags,
6938 _In_opt_ HMACHINE hMachine)
6939{
6941 HSTRING_TABLE StringTable = NULL;
6942 PPNP_CONFLICT_LIST pConflictBuffer = NULL;
6943 PCONFLICT_DATA pConflictData = NULL;
6944 ULONG ulBufferLength;
6945 LPWSTR lpDevInst;
6946 CONFIGRET ret;
6947
6948 FIXME("CM_Query_Resource_Conflict_List(%p %lx %lu %p %lu %lx %p)\n",
6949 pclConflictList, dnDevInst, ResourceID, ResourceData,
6950 ResourceLen, ulFlags, hMachine);
6951
6952 if (dnDevInst == 0)
6953 return CR_INVALID_DEVNODE;
6954
6955 if (ulFlags & ~CM_RESDES_WIDTH_BITS)
6956 return CR_INVALID_FLAG;
6957
6958 if (pclConflictList == NULL ||
6959 ResourceData == NULL ||
6960 ResourceLen == 0)
6961 return CR_INVALID_POINTER;
6962
6963 if (ResourceID == 0)
6964 return CR_INVALID_RESOURCEID;
6965
6966 *pclConflictList = 0;
6967
6968 if (hMachine != NULL)
6969 {
6970 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
6971 if (BindingHandle == NULL)
6972 return CR_FAILURE;
6973
6974 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
6975 if (StringTable == 0)
6976 return CR_FAILURE;
6977 }
6978 else
6979 {
6980 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
6981 return CR_FAILURE;
6982 }
6983
6984 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
6985 if (lpDevInst == NULL)
6986 return CR_INVALID_DEVNODE;
6987
6988 pConflictData = MyMalloc(sizeof(CONFLICT_DATA));
6989 if (pConflictData == NULL)
6990 {
6992 goto done;
6993 }
6994
6995 ulBufferLength = sizeof(PNP_CONFLICT_LIST) +
6996 sizeof(PNP_CONFLICT_STRINGS) +
6997 (sizeof(wchar_t) * 200);
6998 pConflictBuffer = MyMalloc(ulBufferLength);
6999 if (pConflictBuffer == NULL)
7000 {
7002 goto done;
7003 }
7004
7006 {
7008 lpDevInst,
7009 ResourceID,
7010 (PBYTE)ResourceData,
7011 ResourceLen,
7012 (PBYTE)pConflictBuffer,
7013 ulBufferLength,
7014 ulFlags);
7015 }
7017 {
7019 }
7021
7022 if (ret != CR_SUCCESS)
7023 goto done;
7024
7025 pConflictData->ulMagic = CONFLICT_MAGIC;
7026 pConflictData->pConflictList = pConflictBuffer;
7027
7028 *pclConflictList = (CONFLICT_LIST)pConflictData;
7029
7030done:
7031 if (ret != CR_SUCCESS)
7032 {
7033 if (pConflictBuffer != NULL)
7034 MyFree(pConflictBuffer);
7035
7036 if (pConflictData != NULL)
7037 MyFree(pConflictData);
7038 }
7039
7040 return ret;
7041}
7042
7043
7044/***********************************************************************
7045 * CM_Reenumerate_DevNode [SETUPAPI.@]
7046 */
7048WINAPI
7050 _In_ DEVINST dnDevInst,
7051 _In_ ULONG ulFlags)
7052{
7053 TRACE("CM_Reenumerate_DevNode(%lx %lx)\n",
7054 dnDevInst, ulFlags);
7055
7056 return CM_Reenumerate_DevNode_Ex(dnDevInst, ulFlags, NULL);
7057}
7058
7059
7060/***********************************************************************
7061 * CM_Reenumerate_DevNode_Ex [SETUPAPI.@]
7062 */
7065 _In_ DEVINST dnDevInst,
7066 _In_ ULONG ulFlags,
7067 _In_opt_ HMACHINE hMachine)
7068{
7070 HSTRING_TABLE StringTable = NULL;
7071 LPWSTR lpDevInst;
7072 CONFIGRET ret;
7073
7074 FIXME("CM_Reenumerate_DevNode_Ex(%lx %lx %p)\n",
7075 dnDevInst, ulFlags, hMachine);
7076
7077 if (dnDevInst == 0)
7078 return CR_INVALID_DEVNODE;
7079
7080 if (ulFlags & ~CM_REENUMERATE_BITS)
7081 return CR_INVALID_FLAG;
7082
7083 if (hMachine != NULL)
7084 {
7085 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
7086 if (BindingHandle == NULL)
7087 return CR_FAILURE;
7088
7089 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
7090 if (StringTable == 0)
7091 return CR_FAILURE;
7092 }
7093 else
7094 {
7095 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
7096 return CR_FAILURE;
7097 }
7098
7099 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
7100 if (lpDevInst == NULL)
7101 return CR_INVALID_DEVNODE;
7102
7104 {
7106 PNP_DEVINST_REENUMERATE,
7107 ulFlags,
7108 lpDevInst,
7109 NULL);
7110 }
7112 {
7114 }
7116
7117 return ret;
7118}
7119
7120
7121/***********************************************************************
7122 * CM_Register_Device_Driver [SETUPAPI.@]
7123 */
7125WINAPI
7127 _In_ DEVINST dnDevInst,
7128 _In_ ULONG ulFlags)
7129{
7130 TRACE("CM_Register_Device_Driver(%lx 0x%08lx)\n",
7131 dnDevInst, ulFlags);
7132
7133 return CM_Register_Device_Driver_Ex(dnDevInst, ulFlags, NULL);
7134}
7135
7136
7137/***********************************************************************
7138 * CM_Register_Device_Driver_Ex [SETUPAPI.@]
7139 */
7141WINAPI
7143 _In_ DEVINST dnDevInst,
7144 _In_ ULONG ulFlags,
7145 _In_opt_ HMACHINE hMachine)
7146{
7148 HSTRING_TABLE StringTable = NULL;
7149 LPWSTR lpDevInst;
7150 CONFIGRET ret;
7151
7152 TRACE("CM_Register_Device_Driver_Ex(%lx 0x%08lx %p)\n",
7153 dnDevInst, ulFlags, hMachine);
7154
7155 if (dnDevInst == 0)
7156 return CR_INVALID_DEVNODE;
7157
7158 if (ulFlags & ~CM_REGISTER_DEVICE_DRIVER_BITS)
7159 return CR_INVALID_FLAG;
7160
7161 if (hMachine != NULL)
7162 {
7163 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
7164 if (BindingHandle == NULL)
7165 return CR_FAILURE;
7166
7167 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
7168 if (StringTable == 0)
7169 return CR_FAILURE;
7170 }
7171 else
7172 {
7173 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
7174 return CR_FAILURE;
7175 }
7176
7177 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
7178 if (lpDevInst == NULL)
7179 return CR_INVALID_DEVNODE;
7180
7182 {
7184 lpDevInst,
7185 ulFlags);
7186 }
7188 {
7190 }
7192
7193 return ret;
7194}
7195
7196
7197/***********************************************************************
7198 * CM_Register_Device_InterfaceA [SETUPAPI.@]
7199 */
7201WINAPI
7203 _In_ DEVINST dnDevInst,
7205 _In_opt_ LPCSTR pszReference,
7206 _Out_writes_(*pulLength) LPSTR pszDeviceInterface,
7207 _Inout_ PULONG pulLength,
7208 _In_ ULONG ulFlags)
7209{
7210 TRACE("CM_Register_Device_InterfaceA(%lx %s %s %p %p %lx)\n",
7212 pszReference, pszDeviceInterface, pulLength, ulFlags);
7213
7215 pszReference, pszDeviceInterface,
7216 pulLength, ulFlags, NULL);
7217}
7218
7219
7220/***********************************************************************
7221 * CM_Register_Device_InterfaceW [SETUPAPI.@]
7222 */
7224WINAPI
7226 _In_ DEVINST dnDevInst,
7228 _In_opt_ LPCWSTR pszReference,
7229 _Out_writes_(*pulLength) LPWSTR pszDeviceInterface,
7230 _Inout_ PULONG pulLength,
7231 _In_ ULONG ulFlags)
7232{
7233 TRACE("CM_Register_Device_InterfaceW(%lx %s %s %p %p %lx)\n",
7235 debugstr_w(pszReference), pszDeviceInterface, pulLength, ulFlags);
7236
7238 pszReference, pszDeviceInterface,
7239 pulLength, ulFlags, NULL);
7240}
7241
7242
7243/***********************************************************************
7244 * CM_Register_Device_Interface_ExA [SETUPAPI.@]
7245 */
7247WINAPI
7249 _In_ DEVINST dnDevInst,
7251 _In_opt_ LPCSTR pszReference,
7252 _Out_writes_(*pulLength) LPSTR pszDeviceInterface,
7253 _Inout_ PULONG pulLength,
7254 _In_ ULONG ulFlags,
7255 _In_opt_ HMACHINE hMachine)
7256{
7257 LPWSTR pszReferenceW = NULL;
7258 LPWSTR pszDeviceInterfaceW;
7259 ULONG ulLength;
7260 CONFIGRET ret;
7261
7262 TRACE("CM_Register_Device_Interface_ExA(%lx %s %s %p %p %lx %p)\n",
7263 dnDevInst, debugstr_guid(InterfaceClassGuid), debugstr_a(pszReference),
7264 pszDeviceInterface, pulLength, ulFlags, hMachine);
7265
7266 if (pulLength == NULL || pszDeviceInterface == NULL)
7267 return CR_INVALID_POINTER;
7268
7269 if (pszReference != NULL)
7270 {
7271 if (pSetupCaptureAndConvertAnsiArg(pszReference, &pszReferenceW))
7272 return CR_INVALID_DATA;
7273 }
7274
7275 ulLength = *pulLength;
7276
7277 pszDeviceInterfaceW = HeapAlloc(GetProcessHeap(), 0, ulLength * sizeof(WCHAR));
7278 if (pszDeviceInterfaceW == NULL)
7279 {
7281 goto Done;
7282 }
7283
7286 pszReferenceW,
7287 pszDeviceInterfaceW,
7288 &ulLength,
7289 ulFlags,
7290 hMachine);
7291 if (ret == CR_SUCCESS)
7292 {
7294 0,
7295 pszDeviceInterfaceW,
7296 ulLength,
7297 pszDeviceInterface,
7298 *pulLength,
7299 NULL,
7300 NULL) == 0)
7301 ret = CR_FAILURE;
7302 }
7303
7304 *pulLength = ulLength;
7305
7306Done:
7307 if (pszDeviceInterfaceW != NULL)
7308 HeapFree(GetProcessHeap(), 0, pszDeviceInterfaceW);
7309
7310 if (pszReferenceW != NULL)
7311 MyFree(pszReferenceW);
7312
7313 return ret;
7314}
7315
7316
7317/***********************************************************************
7318 * CM_Register_Device_Interface_ExW [SETUPAPI.@]
7319 */
7321WINAPI
7323 _In_ DEVINST dnDevInst,
7325 _In_opt_ LPCWSTR pszReference,
7326 _Out_writes_(*pulLength) LPWSTR pszDeviceInterface,
7327 _Inout_ PULONG pulLength,
7328 _In_ ULONG ulFlags,
7329 _In_opt_ HMACHINE hMachine)
7330{
7332 HSTRING_TABLE StringTable = NULL;
7333 LPWSTR lpDevInst;
7334 ULONG ulTransferLength;
7335 CONFIGRET ret;
7336
7337 TRACE("CM_Register_Device_Interface_ExW(%lx %s %s %p %p %lx %p)\n",
7338 dnDevInst, debugstr_guid(InterfaceClassGuid), debugstr_w(pszReference),
7339 pszDeviceInterface, pulLength, ulFlags, hMachine);
7340
7341 if (dnDevInst == 0)
7342 return CR_INVALID_DEVNODE;
7343
7344 if (InterfaceClassGuid == NULL ||
7345 pszDeviceInterface == NULL ||
7346 pulLength == NULL)
7347 return CR_INVALID_POINTER;
7348
7349 if (ulFlags != 0)
7350 return CR_INVALID_FLAG;
7351
7352 if (hMachine != NULL)
7353 {
7354 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
7355 if (BindingHandle == NULL)
7356 return CR_FAILURE;
7357
7358 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
7359 if (StringTable == 0)
7360 return CR_FAILURE;
7361 }
7362 else
7363 {
7364 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
7365 return CR_FAILURE;
7366 }
7367
7368 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
7369 if (lpDevInst == NULL)
7370 return CR_INVALID_DEVNODE;
7371
7372 ulTransferLength = *pulLength;
7373
7375 {
7377 lpDevInst,
7379 (LPWSTR)pszReference,
7380 pszDeviceInterface,
7381 pulLength,
7382 &ulTransferLength,
7383 0);
7384 }
7386 {
7388 }
7390
7391 return ret;
7392}
7393
7394
7395/***********************************************************************
7396 * CM_Remove_SubTree [SETUPAPI.@]
7397 *
7398 * This function is obsolete in Windows XP and above.
7399 */
7401WINAPI
7403 _In_ DEVINST dnAncestor,
7404 _In_ ULONG ulFlags)
7405{
7406 TRACE("CM_Remove_SubTree(%lx %lx)\n",
7407 dnAncestor, ulFlags);
7408
7410}
7411
7412
7413/***********************************************************************
7414 * CM_Remove_SubTree_Ex [SETUPAPI.@]
7415 *
7416 * This function is obsolete in Windows XP and above.
7417 */
7419WINAPI
7421 _In_ DEVINST dnAncestor,
7422 _In_ ULONG ulFlags,
7423 _In_opt_ HMACHINE hMachine)
7424{
7425 TRACE("CM_Remove_SubTree_Ex(%lx %lx %p)\n",
7426 dnAncestor, ulFlags, hMachine);
7427
7429}
7430
7431
7432/***********************************************************************
7433 * CM_Request_Device_EjectA [SETUPAPI.@]
7434 */
7436WINAPI
7438 _In_ DEVINST dnDevInst,
7439 _Out_opt_ PPNP_VETO_TYPE pVetoType,
7440 _Out_writes_opt_(ulNameLength) LPSTR pszVetoName,
7441 _In_ ULONG ulNameLength,
7442 _In_ ULONG ulFlags)
7443{
7444 TRACE("CM_Request_Device_EjectA(%lx %p %p %lu %lx)\n",
7445 dnDevInst, pVetoType, pszVetoName, ulNameLength, ulFlags);
7446
7447 return CM_Request_Device_Eject_ExA(dnDevInst, pVetoType, pszVetoName,
7448 ulNameLength, ulFlags, NULL);
7449}
7450
7451
7452/***********************************************************************
7453 * CM_Request_Device_EjectW [SETUPAPI.@]
7454 */
7456WINAPI
7458 _In_ DEVINST dnDevInst,
7459 _Out_opt_ PPNP_VETO_TYPE pVetoType,
7460 _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName,
7461 _In_ ULONG ulNameLength,
7462 _In_ ULONG ulFlags)
7463{
7464 TRACE("CM_Request_Device_EjectW(%lx %p %p %lu %lx)\n",
7465 dnDevInst, pVetoType, pszVetoName, ulNameLength, ulFlags);
7466
7467 return CM_Request_Device_Eject_ExW(dnDevInst, pVetoType, pszVetoName,
7468 ulNameLength, ulFlags, NULL);
7469}
7470
7471
7472/***********************************************************************
7473 * CM_Request_Device_Eject_ExA [SETUPAPI.@]
7474 */
7476WINAPI
7478 _In_ DEVINST dnDevInst,
7479 _Out_opt_ PPNP_VETO_TYPE pVetoType,
7480 _Out_writes_opt_(ulNameLength) LPSTR pszVetoName,
7481 _In_ ULONG ulNameLength,
7482 _In_ ULONG ulFlags,
7483 _In_opt_ HMACHINE hMachine)
7484{
7485 LPWSTR lpLocalVetoName = NULL;
7486 CONFIGRET ret;
7487
7488 TRACE("CM_Request_Device_Eject_ExA(%lx %p %p %lu %lx %p)\n",
7489 dnDevInst, pVetoType, pszVetoName, ulNameLength, ulFlags, hMachine);
7490
7491 if (ulNameLength != 0)
7492 {
7493 if (pszVetoName == NULL)
7494 return CR_INVALID_POINTER;
7495
7496 lpLocalVetoName = HeapAlloc(GetProcessHeap(), 0, ulNameLength * sizeof(WCHAR));
7497 if (lpLocalVetoName == NULL)
7498 return CR_OUT_OF_MEMORY;
7499 }
7500
7501 ret = CM_Request_Device_Eject_ExW(dnDevInst, pVetoType, lpLocalVetoName,
7502 ulNameLength, ulFlags, hMachine);
7503 if (ret == CR_REMOVE_VETOED && ulNameLength != 0)
7504 {
7506 0,
7507 lpLocalVetoName,
7508 ulNameLength,
7509 pszVetoName,
7510 ulNameLength,
7511 NULL,
7512 NULL) == 0)
7513 ret = CR_FAILURE;
7514 }
7515
7516 HeapFree(GetProcessHeap(), 0, lpLocalVetoName);
7517
7518 return ret;
7519}
7520
7521
7522/***********************************************************************
7523 * CM_Request_Device_Eject_ExW [SETUPAPI.@]
7524 */
7526WINAPI
7528 _In_ DEVINST dnDevInst,
7529 _Out_opt_ PPNP_VETO_TYPE pVetoType,
7530 _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName,
7531 _In_ ULONG ulNameLength,
7532 _In_ ULONG ulFlags,
7533 _In_opt_ HMACHINE hMachine)
7534{
7536 HSTRING_TABLE StringTable = NULL;
7537 LPWSTR lpDevInst;
7538 CONFIGRET ret;
7539
7540 TRACE("CM_Request_Device_Eject_ExW(%lx %p %p %lu %lx %p)\n",
7541 dnDevInst, pVetoType, pszVetoName, ulNameLength, ulFlags, hMachine);
7542
7543 if (dnDevInst == 0)
7544 return CR_INVALID_DEVNODE;
7545
7546 if (ulFlags != 0)
7547 return CR_INVALID_FLAG;
7548
7549 if (pszVetoName == NULL && ulNameLength != 0)
7550 return CR_INVALID_POINTER;
7551
7552 /* Windows 2003 SP2 ignores pszVetoName when ulNameLength is zero
7553 * and behaves like when pszVetoName is NULL */
7554 if (ulNameLength == 0)
7555 pszVetoName = NULL;
7556
7557 if (hMachine != NULL)
7558 {
7559 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
7560 if (BindingHandle == NULL)
7561 return CR_FAILURE;
7562
7563 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
7564 if (StringTable == 0)
7565 return CR_FAILURE;
7566 }
7567 else
7568 {
7569 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
7570 return CR_FAILURE;
7571 }
7572
7573 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
7574 if (lpDevInst == NULL)
7575 return CR_INVALID_DEVNODE;
7576
7578 {
7580 lpDevInst,
7581 pVetoType,
7582 pszVetoName,
7583 ulNameLength,
7584 ulFlags);
7585 }
7587 {
7589 }
7591
7592 return ret;
7593}
7594
7595
7596/***********************************************************************
7597 * CM_Request_Eject_PC [SETUPAPI.@]
7598 */
7600WINAPI
7602{
7603 TRACE("CM_Request_Eject_PC()\n");
7604
7606}
7607
7608
7609/***********************************************************************
7610 * CM_Request_Eject_PC_Ex [SETUPAPI.@]
7611 */
7613WINAPI
7615 _In_opt_ HMACHINE hMachine)
7616{
7618 CONFIGRET ret;
7619
7620 TRACE("CM_Request_Eject_PC_Ex(%p)\n", hMachine);
7621
7622 if (hMachine != NULL)
7623 {
7624 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
7625 if (BindingHandle == NULL)
7626 return CR_FAILURE;
7627 }
7628 else
7629 {
7631 return CR_FAILURE;
7632 }
7633
7635 {
7637 }
7639 {
7641 }
7643
7644 return ret;
7645}
7646
7647
7648/***********************************************************************
7649 * CM_Run_Detection [SETUPAPI.@]
7650 */
7652WINAPI
7654 _In_ ULONG ulFlags)
7655{
7656 TRACE("CM_Run_Detection(%lx)\n", ulFlags);
7657
7658 return CM_Run_Detection_Ex(ulFlags, NULL);
7659}
7660
7661
7662/***********************************************************************
7663 * CM_Run_Detection_Ex [SETUPAPI.@]
7664 */
7666WINAPI
7668 _In_ ULONG ulFlags,
7669 _In_opt_ HMACHINE hMachine)
7670{
7672 CONFIGRET ret;
7673
7674 TRACE("CM_Run_Detection_Ex(%lx %p)\n",
7675 ulFlags, hMachine);
7676
7677 if (!pSetupIsUserAdmin())
7678 return CR_ACCESS_DENIED;
7679
7680 if (ulFlags & ~CM_DETECT_BITS)
7681 return CR_INVALID_FLAG;
7682
7683 if (hMachine != NULL)
7684 {
7685 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
7686 if (BindingHandle == NULL)
7687 return CR_FAILURE;
7688 }
7689 else
7690 {
7692 return CR_FAILURE;
7693 }
7694
7696 {
7698 ulFlags);
7699 }
7701 {
7703 }
7705
7706 return ret;
7707}
7708
7709
7710/***********************************************************************
7711 * CM_Set_Class_Registry_PropertyA [SETUPAPI.@]
7712 */
7714WINAPI
7716 _In_ LPGUID ClassGuid,
7717 _In_ ULONG ulProperty,
7719 _In_ ULONG ulLength,
7720 _In_ ULONG ulFlags,
7721 _In_opt_ HMACHINE hMachine)
7722{
7723 FIXME("CM_Set_Class_Registry_PropertyA(%p %lx %p %lu %lx %p)\n",
7724 ClassGuid, ulProperty, Buffer, ulLength, ulFlags, hMachine);
7725
7727}
7728
7729
7730/***********************************************************************
7731 * CM_Set_Class_Registry_PropertyW [SETUPAPI.@]
7732 */
7734WINAPI
7736 _In_ LPGUID ClassGuid,
7737 _In_ ULONG ulProperty,
7739 _In_ ULONG ulLength,
7740 _In_ ULONG ulFlags,
7741 _In_opt_ HMACHINE hMachine)
7742{
7743 FIXME("CM_Set_Class_Registry_PropertyW(%p %lx %p %lu %lx %p)\n",
7744 ClassGuid, ulProperty, Buffer, ulLength, ulFlags, hMachine);
7745
7747}
7748
7749
7750/***********************************************************************
7751 * CM_Set_DevNode_Problem [SETUPAPI.@]
7752 */
7754WINAPI
7756 _In_ DEVINST dnDevInst,
7757 _In_ ULONG ulProblem,
7758 _In_ ULONG ulFlags)
7759{
7760 TRACE("CM_Set_DevNode_Problem(%lx %lx %lx)\n",
7761 dnDevInst, ulProblem, ulFlags);
7762
7763 return CM_Set_DevNode_Problem_Ex(dnDevInst, ulProblem, ulFlags, NULL);
7764}
7765
7766
7767/***********************************************************************
7768 * CM_Set_DevNode_Problem_Ex [SETUPAPI.@]
7769 */
7771WINAPI
7773 _In_ DEVINST dnDevInst,
7774 _In_ ULONG ulProblem,
7775 _In_ ULONG ulFlags,
7776 _In_opt_ HMACHINE hMachine)
7777{
7779 HSTRING_TABLE StringTable = NULL;
7780 LPWSTR lpDevInst;
7781 CONFIGRET ret;
7782
7783 TRACE("CM_Set_DevNode_Problem_Ex(%lx %lx %lx %p)\n",
7784 dnDevInst, ulProblem, ulFlags, hMachine);
7785
7786 if (dnDevInst == 0)
7787 return CR_INVALID_DEVNODE;
7788
7789 if (ulFlags & ~CM_SET_DEVNODE_PROBLEM_BITS)
7790 return CR_INVALID_FLAG;
7791
7792 if (hMachine != NULL)
7793 {
7794 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
7795 if (BindingHandle == NULL)
7796 return CR_FAILURE;
7797
7798 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
7799 if (StringTable == 0)
7800 return CR_FAILURE;
7801 }
7802 else
7803 {
7804 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
7805 return CR_FAILURE;
7806 }
7807
7808 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
7809 if (lpDevInst == NULL)
7810 return CR_INVALID_DEVNODE;
7811
7813 {
7815 lpDevInst,
7816 ulProblem,
7817 ulFlags);
7818 }
7820 {
7822 }
7824
7825 return ret;
7826}
7827
7828
7829/***********************************************************************
7830 * CM_Set_DevNode_Registry_PropertyA [SETUPAPI.@]
7831 */
7833WINAPI
7835 _In_ DEVINST dnDevInst,
7836 _In_ ULONG ulProperty,
7838 _In_ ULONG ulLength,
7839 _In_ ULONG ulFlags)
7840{
7841 TRACE("CM_Set_DevNode_Registry_PropertyA(%lx %lu %p %lx %lx)\n",
7842 dnDevInst, ulProperty, Buffer, ulLength, ulFlags);
7843
7844 return CM_Set_DevNode_Registry_Property_ExA(dnDevInst, ulProperty,
7845 Buffer, ulLength,
7846 ulFlags, NULL);
7847}
7848
7849
7850/***********************************************************************
7851 * CM_Set_DevNode_Registry_PropertyW [SETUPAPI.@]
7852 */
7854WINAPI
7856 _In_ DEVINST dnDevInst,
7857 _In_ ULONG ulProperty,
7859 _In_ ULONG ulLength,
7860 _In_ ULONG ulFlags)
7861{
7862 TRACE("CM_Set_DevNode_Registry_PropertyW(%lx %lu %p %lx %lx)\n",
7863 dnDevInst, ulProperty, Buffer, ulLength, ulFlags);
7864
7865 return CM_Set_DevNode_Registry_Property_ExW(dnDevInst, ulProperty,
7866 Buffer, ulLength,
7867 ulFlags, NULL);
7868}
7869
7870
7871/***********************************************************************
7872 * CM_Set_DevNode_Registry_Property_ExA [SETUPAPI.@]
7873 */
7875WINAPI
7877 _In_ DEVINST dnDevInst,
7878 _In_ ULONG ulProperty,
7880 _In_ ULONG ulLength,
7881 _In_ ULONG ulFlags,
7882 _In_opt_ HMACHINE hMachine)
7883{
7886 ULONG ulType;
7887
7888 FIXME("CM_Set_DevNode_Registry_Property_ExA(%lx %lu %p %lx %lx %p)\n",
7889 dnDevInst, ulProperty, Buffer, ulLength, ulFlags, hMachine);
7890
7891 if (Buffer == NULL && ulLength != 0)
7892 return CR_INVALID_POINTER;
7893
7894 if (ulProperty < CM_DRP_MIN || ulProperty > CM_DRP_MAX)
7895 return CR_INVALID_PROPERTY;
7896
7897 if (Buffer == NULL)
7898 {
7900 ulProperty,
7901 NULL,
7902 0,
7903 ulFlags,
7904 hMachine);
7905 }
7906 else
7907 {
7908 /* Get property type */
7909 ulType = GetRegistryPropertyType(ulProperty);
7910
7911 /* Allocate buffer if needed */
7912 if (ulType == REG_SZ ||
7914 {
7915 lpBuffer = MyMalloc(ulLength * sizeof(WCHAR));
7916 if (lpBuffer == NULL)
7917 {
7919 }
7920 else
7921 {
7923 ulLength, lpBuffer, ulLength))
7924 {
7926 ret = CR_FAILURE;
7927 }
7928 else
7929 {
7931 ulProperty,
7932 lpBuffer,
7933 ulLength * sizeof(WCHAR),
7934 ulFlags,
7935 hMachine);
7937 }
7938 }
7939 }
7940 else
7941 {
7943 ulProperty,
7944 Buffer,
7945 ulLength,
7946 ulFlags,
7947 hMachine);
7948 }
7949
7951 }
7952
7953 return ret;
7954}
7955
7956
7957/***********************************************************************
7958 * CM_Set_DevNode_Registry_Property_ExW [SETUPAPI.@]
7959 */
7961WINAPI
7963 _In_ DEVINST dnDevInst,
7964 _In_ ULONG ulProperty,
7966 _In_ ULONG ulLength,
7967 _In_ ULONG ulFlags,
7968 _In_opt_ HMACHINE hMachine)
7969{
7971 HSTRING_TABLE StringTable = NULL;
7972 LPWSTR lpDevInst;
7973 ULONG ulType;
7974 CONFIGRET ret;
7975
7976 TRACE("CM_Set_DevNode_Registry_Property_ExW(%lx %lu %p %lx %lx %p)\n",
7977 dnDevInst, ulProperty, Buffer, ulLength, ulFlags, hMachine);
7978
7979 if (dnDevInst == 0)
7980 return CR_INVALID_DEVNODE;
7981
7982 if (ulProperty < CM_DRP_MIN || ulProperty > CM_DRP_MAX)
7983 return CR_INVALID_PROPERTY;
7984
7985 if (Buffer != NULL && ulLength == 0)
7986 return CR_INVALID_POINTER;
7987
7988 if (ulFlags != 0)
7989 return CR_INVALID_FLAG;
7990
7991 if (hMachine != NULL)
7992 {
7993 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
7994 if (BindingHandle == NULL)
7995 return CR_FAILURE;
7996
7997 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
7998 if (StringTable == 0)
7999 return CR_FAILURE;
8000 }
8001 else
8002 {
8003 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
8004 return CR_FAILURE;
8005 }
8006
8007 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
8008 if (lpDevInst == NULL)
8009 return CR_INVALID_DEVNODE;
8010
8011 /* Get property type */
8012 ulType = GetRegistryPropertyType(ulProperty);
8013
8015 {
8017 lpDevInst,
8018 ulProperty,
8019 ulType,
8020 (BYTE *)Buffer,
8021 ulLength,
8022 ulFlags);
8023 }
8025 {
8027 }
8029
8030 return ret;
8031}
8032
8033
8034/***********************************************************************
8035 * CM_Set_HW_Prof [SETUPAPI.@]
8036 */
8038WINAPI
8040 _In_ ULONG ulHardwareProfile,
8041 _In_ ULONG ulFlags)
8042{
8043 TRACE("CM_Set_HW_Prof(%lu %lx)\n",
8044 ulHardwareProfile, ulFlags);
8045
8046 return CM_Set_HW_Prof_Ex(ulHardwareProfile, ulFlags, NULL);
8047}
8048
8049
8050/***********************************************************************
8051 * CM_Set_HW_Prof_Ex [SETUPAPI.@]
8052 */
8054WINAPI
8056 _In_ ULONG ulHardwareProfile,
8057 _In_ ULONG ulFlags,
8058 _In_opt_ HMACHINE hMachine)
8059{
8061 CONFIGRET ret;
8062
8063 TRACE("CM_Set_HW_Prof_Ex(%lu %lx %p)\n",
8064 ulHardwareProfile, ulFlags, hMachine);
8065
8066 if (!pSetupIsUserAdmin())
8067 return CR_ACCESS_DENIED;
8068
8069 if (ulFlags != 0)
8070 return CR_INVALID_FLAG;
8071
8072 if (hMachine != NULL)
8073 {
8074 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
8075 if (BindingHandle == NULL)
8076 return CR_FAILURE;
8077 }
8078 else
8079 {
8081 return CR_FAILURE;
8082 }
8083
8085 {
8086 ret = PNP_SetHwProf(BindingHandle, ulHardwareProfile, ulFlags);
8087 }
8089 {
8091 }
8093
8094 return ret;
8095}
8096
8097
8098/***********************************************************************
8099 * CM_Set_HW_Prof_FlagsA [SETUPAPI.@]
8100 */
8102WINAPI
8104 _In_ DEVINSTID_A szDevInstName,
8105 _In_ ULONG ulConfig,
8106 _In_ ULONG ulValue,
8107 _In_ ULONG ulFlags)
8108{
8109 TRACE("CM_Set_HW_Prof_FlagsA(%s %lu %lu %lx)\n",
8110 debugstr_a(szDevInstName), ulConfig, ulValue, ulFlags);
8111
8112 return CM_Set_HW_Prof_Flags_ExA(szDevInstName, ulConfig, ulValue,
8113 ulFlags, NULL);
8114}
8115
8116
8117/***********************************************************************
8118 * CM_Set_HW_Prof_FlagsW [SETUPAPI.@]
8119 */
8121WINAPI
8123 _In_ DEVINSTID_W szDevInstName,
8124 _In_ ULONG ulConfig,
8125 _In_ ULONG ulValue,
8126 _In_ ULONG ulFlags)
8127{
8128 TRACE("CM_Set_HW_Prof_FlagsW(%s %lu %lu %lx)\n",
8129 debugstr_w(szDevInstName), ulConfig, ulValue, ulFlags);
8130
8131 return CM_Set_HW_Prof_Flags_ExW(szDevInstName, ulConfig, ulValue,
8132 ulFlags, NULL);
8133}
8134
8135
8136/***********************************************************************
8137 * CM_Set_HW_Prof_Flags_ExA [SETUPAPI.@]
8138 */
8140WINAPI
8142 _In_ DEVINSTID_A szDevInstName,
8143 _In_ ULONG ulConfig,
8144 _In_ ULONG ulValue,
8145 _In_ ULONG ulFlags,
8146 _In_opt_ HMACHINE hMachine)
8147{
8148 DEVINSTID_W pszDevIdW = NULL;
8150
8151 TRACE("CM_Set_HW_Prof_Flags_ExA(%s %lu %lu %lx %p)\n",
8152 debugstr_a(szDevInstName), ulConfig, ulValue, ulFlags, hMachine);
8153
8154 if (szDevInstName != NULL)
8155 {
8156 if (pSetupCaptureAndConvertAnsiArg(szDevInstName, &pszDevIdW))
8157 return CR_INVALID_DEVICE_ID;
8158 }
8159
8160 ret = CM_Set_HW_Prof_Flags_ExW(pszDevIdW, ulConfig, ulValue,
8161 ulFlags, hMachine);
8162
8163 if (pszDevIdW != NULL)
8164 MyFree(pszDevIdW);
8165
8166 return ret;
8167}
8168
8169
8170/***********************************************************************
8171 * CM_Set_HW_Prof_Flags_ExW [SETUPAPI.@]
8172 */
8174WINAPI
8176 _In_ DEVINSTID_W szDevInstName,
8177 _In_ ULONG ulConfig,
8178 _In_ ULONG ulValue,
8179 _In_ ULONG ulFlags,
8180 _In_opt_ HMACHINE hMachine)
8181{
8183 CONFIGRET ret;
8184
8185 FIXME("CM_Set_HW_Prof_Flags_ExW(%s %lu %lu %lx %p)\n",
8186 debugstr_w(szDevInstName), ulConfig, ulValue, ulFlags, hMachine);
8187
8188 if (szDevInstName == NULL)
8189 return CR_INVALID_POINTER;
8190
8191 if (ulFlags & ~ CM_SET_HW_PROF_FLAGS_BITS)
8192 return CR_INVALID_FLAG;
8193
8194 /* FIXME: Check whether szDevInstName is valid */
8195
8196 if (hMachine != NULL)
8197 {
8198 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
8199 if (BindingHandle == NULL)
8200 return CR_FAILURE;
8201 }
8202 else
8203 {
8205 return CR_FAILURE;
8206 }
8207
8209 {
8210 ret = PNP_HwProfFlags(BindingHandle, PNP_SET_HWPROFFLAGS, szDevInstName,
8211 ulConfig, &ulValue, NULL, NULL, 0, 0);
8212 }
8214 {
8216 }
8218
8219 return ret;
8220}
8221
8222
8223/***********************************************************************
8224 * CM_Setup_DevNode [SETUPAPI.@]
8225 */
8227WINAPI
8229 _In_ DEVINST dnDevInst,
8230 _In_ ULONG ulFlags)
8231{
8232 TRACE("CM_Setup_DevNode(%lx %lx)\n",
8233 dnDevInst, ulFlags);
8234
8235 return CM_Setup_DevNode_Ex(dnDevInst, ulFlags, NULL);
8236}
8237
8238
8239/***********************************************************************
8240 * CM_Setup_DevNode_Ex [SETUPAPI.@]
8241 */
8243WINAPI
8245 _In_ DEVINST dnDevInst,
8246 _In_ ULONG ulFlags,
8247 _In_opt_ HMACHINE hMachine)
8248{
8250 HSTRING_TABLE StringTable = NULL;
8251 LPWSTR lpDevInst;
8252 CONFIGRET ret;
8253
8254 FIXME("CM_Setup_DevNode_Ex(%lx %lx %p)\n",
8255 dnDevInst, ulFlags, hMachine);
8256
8257 if (!pSetupIsUserAdmin())
8258 return CR_ACCESS_DENIED;
8259
8260 if (dnDevInst == 0)
8261 return CR_INVALID_DEVNODE;
8262
8263 if (ulFlags & ~CM_SETUP_BITS)
8264 return CR_INVALID_FLAG;
8265
8266 if (hMachine != NULL)
8267 {
8268 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
8269 if (BindingHandle == NULL)
8270 return CR_FAILURE;
8271
8272 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
8273 if (StringTable == 0)
8274 return CR_FAILURE;
8275 }
8276 else
8277 {
8278 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
8279 return CR_FAILURE;
8280 }
8281
8282 lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
8283 if (lpDevInst == NULL)
8284 return CR_INVALID_DEVNODE;
8285
8287 {
8289 PNP_DEVINST_SETUP,
8290 ulFlags,
8291 lpDevInst,
8292 NULL);
8293 }
8295 {
8297 }
8299
8300 return ret;
8301}
8302
8303
8304/***********************************************************************
8305 * CM_Test_Range_Available [SETUPAPI.@]
8306 */
8308WINAPI
8310 _In_ DWORDLONG ullStartValue,
8311 _In_ DWORDLONG ullEndValue,
8312 _In_ RANGE_LIST rlh,
8313 _In_ ULONG ulFlags)
8314{
8315 FIXME("CM_Test_Range_Available(%I64u %I64u %p %lx)\n",
8316 ullStartValue, ullEndValue, rlh, ulFlags);
8318}
8319
8320
8321/***********************************************************************
8322 * CM_Uninstall_DevNode [SETUPAPI.@]
8323 */
8325WINAPI
8327 _In_ DEVINST dnPhantom,
8328 _In_ ULONG ulFlags)
8329{
8330 TRACE("CM_Uninstall_DevNode(%lx %lx)\n",
8331 dnPhantom, ulFlags);
8332
8333 return CM_Uninstall_DevNode_Ex(dnPhantom, ulFlags, NULL);
8334}
8335
8336
8337/***********************************************************************
8338 * CM_Uninstall_DevNode_Ex [SETUPAPI.@]
8339 */
8341WINAPI
8343 _In_ DEVINST dnPhantom,
8344 _In_ ULONG ulFlags,
8345 _In_opt_ HMACHINE hMachine)
8346{
8348 HSTRING_TABLE StringTable = NULL;
8349 LPWSTR lpDevInst;
8350 CONFIGRET ret;
8351
8352 TRACE("CM_Uninstall_DevNode_Ex(%lx %lx %p)\n",
8353 dnPhantom, ulFlags, hMachine);
8354
8355 if (dnPhantom == 0)
8356 return CR_INVALID_DEVNODE;
8357
8358 if (ulFlags != 0)
8359 return CR_INVALID_FLAG;
8360
8361 if (hMachine != NULL)
8362 {
8363 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
8364 if (BindingHandle == NULL)
8365 return CR_FAILURE;
8366
8367 StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
8368 if (StringTable == 0)
8369 return CR_FAILURE;
8370 }
8371 else
8372 {
8373 if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
8374 return CR_FAILURE;
8375 }
8376
8377 lpDevInst = pSetupStringTableStringFromId(StringTable, dnPhantom);
8378 if (lpDevInst == NULL)
8379 return CR_INVALID_DEVNODE;
8380
8382 {
8384 lpDevInst,
8385 ulFlags);
8386 }
8388 {
8390 }
8392
8393 return ret;
8394}
8395
8396
8397/***********************************************************************
8398 * CM_Unregister_Device_InterfaceA [SETUPAPI.@]
8399 */
8401WINAPI
8403 _In_ LPCSTR pszDeviceInterface,
8404 _In_ ULONG ulFlags)
8405{
8406 TRACE("CM_Unregister_Device_InterfaceA(%s %lx)\n",
8407 debugstr_a(pszDeviceInterface), ulFlags);
8408
8409 return CM_Unregister_Device_Interface_ExA(pszDeviceInterface,
8410 ulFlags, NULL);
8411}
8412
8413
8414/***********************************************************************
8415 * CM_Unregister_Device_InterfaceW [SETUPAPI.@]
8416 */
8418WINAPI
8420 _In_ LPCWSTR pszDeviceInterface,
8421 _In_ ULONG ulFlags)
8422{
8423 TRACE("CM_Unregister_Device_InterfaceW(%s %lx)\n",
8424 debugstr_w(pszDeviceInterface), ulFlags);
8425
8426 return CM_Unregister_Device_Interface_ExW(pszDeviceInterface,
8427 ulFlags, NULL);
8428}
8429
8430
8431/***********************************************************************
8432 * CM_Unregister_Device_Interface_ExA [SETUPAPI.@]
8433 */
8435WINAPI
8437 _In_ LPCSTR pszDeviceInterface,
8438 _In_ ULONG ulFlags,
8439 _In_opt_ HMACHINE hMachine)
8440{
8441 LPWSTR pszDeviceInterfaceW = NULL;
8442 CONFIGRET ret;
8443
8444 TRACE("CM_Unregister_Device_Interface_ExA(%s %lx %p)\n",
8445 debugstr_a(pszDeviceInterface), ulFlags, hMachine);
8446
8447 if (pszDeviceInterface == NULL)
8448 return CR_INVALID_POINTER;
8449
8450 if (pSetupCaptureAndConvertAnsiArg(pszDeviceInterface, &pszDeviceInterfaceW))
8451 return CR_INVALID_DATA;
8452
8453 ret = CM_Unregister_Device_Interface_ExW(pszDeviceInterfaceW,
8454 ulFlags, hMachine);
8455
8456 if (pszDeviceInterfaceW != NULL)
8457 MyFree(pszDeviceInterfaceW);
8458
8459 return ret;
8460}
8461
8462
8463/***********************************************************************
8464 * CM_Unregister_Device_Interface_ExW [SETUPAPI.@]
8465 */
8467WINAPI
8469 _In_ LPCWSTR pszDeviceInterface,
8470 _In_ ULONG ulFlags,
8471 _In_opt_ HMACHINE hMachine)
8472{
8474 CONFIGRET ret;
8475
8476 TRACE("CM_Unregister_Device_Interface_ExW(%s %lx %p)\n",
8477 debugstr_w(pszDeviceInterface), ulFlags, hMachine);
8478
8479 if (pszDeviceInterface == NULL)
8480 return CR_INVALID_POINTER;
8481
8482 if (ulFlags != 0)
8483 return CR_INVALID_FLAG;
8484
8485 if (hMachine != NULL)
8486 {
8487 BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
8488 if (BindingHandle == NULL)
8489 return CR_FAILURE;
8490 }
8491 else
8492 {
8494 return CR_FAILURE;
8495 }
8496
8498 {
8500 (LPWSTR)pszDeviceInterface,
8501 ulFlags);
8502 }
8504 {
8506 }
8508
8509 return ret;
8510}
static SERVICE_STATUS_HANDLE(WINAPI *pRegisterServiceCtrlHandlerExA)(LPCSTR
DWORD WINAPI PNP_GetVersion(handle_t hBinding, WORD *pVersion)
Definition: rpcserver.c:657
DWORD WINAPI PNP_GetInterfaceDeviceList(handle_t hBinding, GUID *InterfaceGuid, LPWSTR pszDeviceID, BYTE *Buffer, PNP_RPC_BUFFER_SIZE *pulLength, DWORD ulFlags)
Definition: rpcserver.c:2601
DWORD WINAPI PNP_SetHwProf(handle_t hBinding, DWORD ulHardwareProfile, DWORD ulFlags)
Definition: rpcserver.c:4635
DWORD WINAPI PNP_UnregisterNotification(handle_t hBinding, PNP_NOTIFY_HANDLE *pNotifyHandle)
Definition: rpcserver.c:4781
DWORD WINAPI PNP_QueryResConfList(handle_t hBinding, LPWSTR pDeviceID, RESOURCEID ResourceID, BYTE *ResourceData, PNP_RPC_BUFFER_SIZE ResourceLen, BYTE *Buffer, PNP_RPC_BUFFER_SIZE BufferLen, DWORD ulFlags)
Definition: rpcserver.c:4617
DWORD WINAPI PNP_GetRelatedDeviceInstance(handle_t hBinding, DWORD ulRelationship, LPWSTR pDeviceID, LPWSTR pRelatedDeviceId, PNP_RPC_STRING_LEN *pulLength, DWORD ulFlags)
Definition: rpcserver.c:847
DWORD WINAPI PNP_EnumerateSubKeys(handle_t hBinding, DWORD ulBranch, DWORD ulIndex, LPWSTR Buffer, PNP_RPC_STRING_LEN ulLength, PNP_RPC_STRING_LEN *pulRequiredLen, DWORD ulFlags)
Definition: rpcserver.c:925
DWORD WINAPI PNP_UnregisterDeviceClassAssociation(handle_t hBinding, LPWSTR pszInterfaceDevice, DWORD ulFlags)
Definition: rpcserver.c:2714
DWORD WINAPI PNP_GetDeviceListSize(handle_t hBinding, LPWSTR pszFilter, PNP_RPC_BUFFER_SIZE *pulLength, DWORD ulFlags)
Definition: rpcserver.c:1717
DWORD WINAPI PNP_InitDetection(handle_t hBinding)
Definition: rpcserver.c:697
DWORD WINAPI PNP_AddEmptyLogConf(handle_t hBinding, LPWSTR pDeviceID, DWORD ulPriority, DWORD *pulLogConfTag, DWORD ulFlags)
Definition: rpcserver.c:4161
DWORD WINAPI PNP_GetClassRegProp(handle_t hBinding, LPWSTR pszClassGuid, DWORD ulProperty, DWORD *pulRegDataType, BYTE *Buffer, PNP_RPC_STRING_LEN *pulTransferLen, PNP_RPC_STRING_LEN *pulLength, DWORD ulFlags)
Definition: rpcserver.c:2727
DWORD WINAPI PNP_GetServerSideDeviceInstallFlags(handle_t hBinding, DWORD *pulSSDIFlags, DWORD ulFlags)
Definition: rpcserver.c:4935
DWORD WINAPI PNP_FreeLogConf(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfType, DWORD ulLogConfTag, DWORD ulFlags)
Definition: rpcserver.c:4176
DWORD WINAPI PNP_GetDeviceRegProp(handle_t hBinding, LPWSTR pDeviceID, DWORD ulProperty, DWORD *pulRegDataType, BYTE *Buffer, PNP_PROP_SIZE *pulTransferLen, PNP_PROP_SIZE *pulLength, DWORD ulFlags)
Definition: rpcserver.c:1835
DWORD WINAPI PNP_GetBlockedDriverInfo(handle_t hBinding, BYTE *Buffer, PNP_RPC_BUFFER_SIZE *pulTransferLen, PNP_RPC_BUFFER_SIZE *pulLength, DWORD ulFlags)
Definition: rpcserver.c:4920
DWORD WINAPI PNP_GetInterfaceDeviceListSize(handle_t hBinding, PNP_RPC_BUFFER_SIZE *pulLen, GUID *InterfaceGuid, LPWSTR pszDeviceID, DWORD ulFlags)
Definition: rpcserver.c:2649
DWORD WINAPI PNP_UninstallDevInst(handle_t hBinding, LPWSTR pDeviceID, DWORD ulFlags)
Definition: rpcserver.c:3572
DWORD WINAPI PNP_GetDeviceStatus(handle_t hBinding, LPWSTR pDeviceID, DWORD *pulStatus, DWORD *pulProblem, DWORD ulFlags)
Definition: rpcserver.c:3411
DWORD WINAPI PNP_GetClassInstance(handle_t hBinding, LPWSTR pDeviceId, LPWSTR pszClassInstance, PNP_RPC_STRING_LEN ulLength)
Definition: rpcserver.c:2254
DWORD WINAPI PNP_DeviceInstanceAction(handle_t hBinding, DWORD ulMajorAction, DWORD ulMinorAction, LPWSTR pszDeviceInstance1, LPWSTR pszDeviceInstance2)
Definition: rpcserver.c:3366
DWORD WINAPI PNP_RegisterDriver(handle_t hBinding, LPWSTR pszDeviceID, DWORD ulFlags)
Definition: rpcserver.c:3734
DWORD WINAPI PNP_GetDepth(handle_t hBinding, LPWSTR pszDeviceID, DWORD *pulDepth, DWORD ulFlags)
Definition: rpcserver.c:1792
DWORD WINAPI PNP_HwProfFlags(handle_t hBinding, DWORD ulAction, LPWSTR pDeviceID, DWORD ulConfig, DWORD *pulValue, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName, DWORD ulNameLength, DWORD ulFlags)
Definition: rpcserver.c:3942
DWORD WINAPI PNP_DisableDevInst(handle_t hBinding, LPWSTR pDeviceID, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName, DWORD ulNameLength, DWORD ulFlags)
Definition: rpcserver.c:3542
DWORD WINAPI PNP_GetClassName(handle_t hBinding, LPWSTR pszClassGuid, LPWSTR Buffer, PNP_RPC_STRING_LEN *pulLength, DWORD ulFlags)
Definition: rpcserver.c:2494
DWORD WINAPI PNP_RequestDeviceEject(handle_t hBinding, LPWSTR pszDeviceID, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName, DWORD ulNameLength, DWORD ulFlags)
Definition: rpcserver.c:3806
DWORD WINAPI PNP_GetLogConfPriority(handle_t hBinding, LPWSTR pDeviceID, DWORD ulType, DWORD ulTag, DWORD *pPriority, DWORD ulFlags)
Definition: rpcserver.c:4390
DWORD WINAPI PNP_GetInterfaceDeviceAlias(handle_t hBinding, LPWSTR pszInterfaceDevice, GUID *AliasInterfaceGuid, LPWSTR pszAliasInterfaceDevice, PNP_RPC_STRING_LEN *pulLength, PNP_RPC_STRING_LEN *pulTransferLen, DWORD ulFlags)
Definition: rpcserver.c:2584
DWORD WINAPI PNP_RequestEjectPC(handle_t hBinding)
Definition: rpcserver.c:3910
DWORD WINAPI PNP_CreateDevInst(handle_t hBinding, LPWSTR pszDeviceID, LPWSTR pszParentDeviceID, PNP_RPC_STRING_LEN ulLength, DWORD ulFlags)
Definition: rpcserver.c:3126
DWORD WINAPI PNP_SetDeviceRegProp(handle_t hBinding, LPWSTR pDeviceId, DWORD ulProperty, DWORD ulDataType, BYTE *Buffer, PNP_PROP_SIZE ulLength, DWORD ulFlags)
Definition: rpcserver.c:2112
DWORD WINAPI PNP_AddID(handle_t hBinding, LPWSTR pszDeviceID, LPWSTR pszID, DWORD ulFlags)
Definition: rpcserver.c:3627
DWORD WINAPI PNP_QueryRemove(handle_t hBinding, LPWSTR pszDeviceID, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName, DWORD ulNameLength, DWORD ulFlags)
Definition: rpcserver.c:3757
DWORD WINAPI PNP_GetFirstLogConf(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfType, DWORD *pulLogConfTag, DWORD ulFlags)
Definition: rpcserver.c:4191
DWORD WINAPI PNP_GetNextLogConf(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfType, DWORD ulCurrentTag, DWORD *pulNextTag, DWORD ulFlags)
Definition: rpcserver.c:4285
DWORD WINAPI PNP_GetGlobalState(handle_t hBinding, DWORD *pulState, DWORD ulFlags)
Definition: rpcserver.c:675
CONFIGRET WINAPI PNP_IsDockStationPresent(handle_t hBinding, BOOL *Present)
Definition: rpcserver.c:3854
DWORD WINAPI PNP_RegisterNotification(handle_t hBinding, DWORD_PTR hRecipient, LPWSTR pszName, BYTE *pNotificationFilter, DWORD ulNotificationFilterSize, DWORD ulFlags, PNP_NOTIFY_HANDLE *pNotifyHandle, DWORD ulProcessId, DWORD *pulUnknown9)
Definition: rpcserver.c:4690
DWORD WINAPI PNP_GetHwProfInfo(handle_t hBinding, DWORD ulIndex, HWPROFILEINFO *pHWProfileInfo, DWORD ulProfileInfoSize, DWORD ulFlags)
Definition: rpcserver.c:4026
DWORD WINAPI PNP_SetDeviceProblem(handle_t hBinding, LPWSTR pDeviceID, DWORD ulProblem, DWORD ulFlags)
Definition: rpcserver.c:3489
CONFIGRET WINAPI PNP_RunDetection(handle_t hBinding, DWORD ulFlags)
Definition: rpcserver.c:4679
DWORD WINAPI PNP_GetRootDeviceInstance(handle_t hBinding, LPWSTR pDeviceID, PNP_RPC_STRING_LEN ulLength)
Definition: rpcserver.c:810
DWORD WINAPI PNP_GetDeviceList(handle_t hBinding, LPWSTR pszFilter, LPWSTR Buffer, PNP_RPC_STRING_LEN *pulLength, DWORD ulFlags)
Definition: rpcserver.c:1346
DWORD WINAPI PNP_GetCustomDevProp(handle_t hBinding, LPWSTR pDeviceID, LPWSTR CustomPropName, DWORD *pulRegDataType, BYTE *Buffer, PNP_RPC_STRING_LEN *pulTransferLen, PNP_RPC_STRING_LEN *pulLength, DWORD ulFlags)
Definition: rpcserver.c:4807
DWORD WINAPI PNP_DeleteRegistryKey(handle_t hBinding, LPWSTR pszDeviceID, LPWSTR pszParentKey, LPWSTR pszChildKey, DWORD ulFlags)
Definition: rpcserver.c:2434
DWORD WINAPI PNP_QueryArbitratorFreeData(handle_t hBinding, BYTE *pData, DWORD DataLen, LPWSTR pDeviceID, RESOURCEID ResourceID, DWORD ulFlags)
Definition: rpcserver.c:4647
DWORD WINAPI PNP_ReportLogOn(handle_t hBinding, BOOL Admin, DWORD ProcessId)
Definition: rpcserver.c:712
DWORD WINAPI PNP_GetNextResDes(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfTag, DWORD ulLogConfType, RESOURCEID ResourceID, DWORD ulResourceTag, DWORD *pulNextResType, DWORD *pulNextResTag, DWORD ulFlags)
Definition: rpcserver.c:4444
DWORD WINAPI PNP_ValidateDeviceInstance(handle_t hBinding, LPWSTR pDeviceID, DWORD ulFlags)
Definition: rpcserver.c:767
DWORD WINAPI PNP_QueryArbitratorFreeSize(handle_t hBinding, DWORD *pulSize, LPWSTR pDeviceID, RESOURCEID ResourceID, DWORD ulFlags)
Definition: rpcserver.c:4662
DWORD WINAPI PNP_DeleteClassKey(handle_t hBinding, LPWSTR pszClassGuid, DWORD ulFlags)
Definition: rpcserver.c:2552
DWORD WINAPI PNP_RegisterDeviceClassAssociation(handle_t hBinding, LPWSTR pszDeviceID, GUID *InterfaceGuid, LPWSTR pszReference, LPWSTR pszSymLink, PNP_RPC_STRING_LEN *pulLength, PNP_RPC_STRING_LEN *pulTransferLen, DWORD ulFlags)
Definition: rpcserver.c:2696
#define FIXME(fmt,...)
Definition: debug.h:111
#define UNIMPLEMENTED
Definition: debug.h:115
#define ERR(fmt,...)
Definition: debug.h:110
#define RegCloseKey(hKey)
Definition: registry.h:49
enum _PNP_VETO_TYPE * PPNP_VETO_TYPE
#define CM_DRP_BUSNUMBER
Definition: cfgmgr32.h:703
#define CM_REGISTER_DEVICE_DRIVER_BITS
Definition: cfgmgr32.h:798
#define CM_DRP_LOCATION_INFORMATION
Definition: cfgmgr32.h:689
ULONG_PTR CONFLICT_LIST
Definition: cfgmgr32.h:111
#define CM_DRP_CONFIGFLAGS
Definition: cfgmgr32.h:686
#define CR_INVALID_PROPERTY
Definition: cfgmgr32.h:899
#define CM_DRP_SECURITY_SDS
Definition: cfgmgr32.h:707
#define MAX_PROFILE_LEN
Definition: cfgmgr32.h:54
#define CM_OPEN_CLASS_KEY_INTERFACE
Definition: cfgmgr32.h:773
#define MAX_CLASS_NAME_LEN
Definition: cfgmgr32.h:52
DWORD_PTR RES_DES
Definition: cfgmgr32.h:93
#define CM_CUSTOMDEVPROP_BITS
Definition: cfgmgr32.h:836
#define CR_INVALID_DATA
Definition: cfgmgr32.h:877
#define CM_DRP_REMOVAL_POLICY
Definition: cfgmgr32.h:719
#define CM_GET_DEVICE_INTERFACE_LIST_BITS
Definition: cfgmgr32.h:674
RANGE_ELEMENT * PRANGE_ELEMENT
Definition: cfgmgr32.h:106
#define CM_DRP_ENUMERATOR_NAME
Definition: cfgmgr32.h:704
#define CM_DRP_REMOVAL_POLICY_HW_DEFAULT
Definition: cfgmgr32.h:720
#define CR_INVALID_DEVICE_ID
Definition: cfgmgr32.h:876
#define CM_SET_HW_PROF_FLAGS_BITS
Definition: cfgmgr32.h:816
#define CM_DRP_BUSTYPEGUID
Definition: cfgmgr32.h:701
#define CM_ADD_RANGE_BITS
Definition: cfgmgr32.h:594
DEVNODE * PDEVINST
Definition: cfgmgr32.h:77
#define CR_OUT_OF_MEMORY
Definition: cfgmgr32.h:844
#define CR_INVALID_CONFLICT_LIST
Definition: cfgmgr32.h:903
DWORD_PTR RANGE_LIST
Definition: cfgmgr32.h:102
#define CR_INVALID_LOG_CONF
Definition: cfgmgr32.h:850
#define CM_GETIDLIST_FILTER_BITS
Definition: cfgmgr32.h:669
#define CM_DRP_LOWERFILTERS
Definition: cfgmgr32.h:697
#define CM_DRP_SECURITY
Definition: cfgmgr32.h:705
#define CR_INVALID_PRIORITY
Definition: cfgmgr32.h:885
#define CM_SET_DEVNODE_PROBLEM_BITS
Definition: cfgmgr32.h:808
#define CM_CRP_MAX
Definition: cfgmgr32.h:733
#define RegDisposition_Bits
Definition: cfgmgr32.h:611
#define CM_DRP_MFG
Definition: cfgmgr32.h:687
#define CM_DRP_EXCLUSIVE
Definition: cfgmgr32.h:711
_Null_terminated_ CHAR * DEVINSTID_A
Definition: cfgmgr32.h:79
#define CM_DRP_DRIVER
Definition: cfgmgr32.h:685
#define CM_SETUP_BITS
Definition: cfgmgr32.h:828
DWORD_PTR LOG_CONF
Definition: cfgmgr32.h:90
#define CM_DRP_REMOVAL_POLICY_OVERRIDE
Definition: cfgmgr32.h:721
#define CM_DRP_CAPABILITIES
Definition: cfgmgr32.h:691
_Null_terminated_ WCHAR * DEVINSTID_W
Definition: cfgmgr32.h:80
#define CM_DRP_UPPERFILTERS
Definition: cfgmgr32.h:693
#define CR_FAILURE
Definition: cfgmgr32.h:865
#define CM_REGISTRY_BITS
Definition: cfgmgr32.h:804
#define CM_DRP_CLASSGUID
Definition: cfgmgr32.h:684
#define CR_INVALID_RES_DES
Definition: cfgmgr32.h:849
#define CM_DRP_COMPATIBLEIDS
Definition: cfgmgr32.h:678
ULONG RESOURCEID
Definition: cfgmgr32.h:96
#define CM_REGISTRY_SOFTWARE
Definition: cfgmgr32.h:801
#define CR_INVALID_DEVINST
Definition: cfgmgr32.h:848
#define CM_DRP_DEVICEDESC
Definition: cfgmgr32.h:676
#define CR_INVALID_RESOURCEID
Definition: cfgmgr32.h:855
LOG_CONF * PLOG_CONF
Definition: cfgmgr32.h:91
HMACHINE * PHMACHINE
Definition: cfgmgr32.h:109
#define LOG_CONF_BITS
Definition: cfgmgr32.h:603
CONFLICT_LIST * PCONFLICT_LIST
Definition: cfgmgr32.h:112
#define CM_REENUMERATE_BITS
Definition: cfgmgr32.h:793
#define CM_DRP_CLASS
Definition: cfgmgr32.h:683
DWORD DEVINST
Definition: cfgmgr32.h:76
RES_DES * PRES_DES
Definition: cfgmgr32.h:94
#define CM_DELETE_CLASS_BITS
Definition: cfgmgr32.h:639
CONST VOID * PCVOID
Definition: cfgmgr32.h:44
#define PRIORITY_BIT
Definition: cfgmgr32.h:607
#define CM_DETECT_BITS
Definition: cfgmgr32.h:646
#define CR_ACCESS_DENIED
Definition: cfgmgr32.h:897
#define CR_INVALID_MACHINENAME
Definition: cfgmgr32.h:893
#define CM_RESDES_WIDTH_BITS
Definition: cfgmgr32.h:402
#define CM_DRP_LEGACYBUSTYPE
Definition: cfgmgr32.h:702
#define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME
Definition: cfgmgr32.h:690
#define CR_INVALID_RANGE
Definition: cfgmgr32.h:864
#define CR_INVALID_FLAG
Definition: cfgmgr32.h:846
#define CM_DRP_DEVTYPE
Definition: cfgmgr32.h:709
PRIORITY * PPRIORITY
Definition: cfgmgr32.h:100
ULONG PRIORITY
Definition: cfgmgr32.h:99
#define CM_REGISTRY_USER
Definition: cfgmgr32.h:802
#define CM_LOCATE_DEVNODE_BITS
Definition: cfgmgr32.h:764
#define CM_DRP_FRIENDLYNAME
Definition: cfgmgr32.h:688
#define CM_DRP_INSTALL_STATE
Definition: cfgmgr32.h:722
#define CM_DRP_UI_NUMBER
Definition: cfgmgr32.h:692
#define CM_DRP_CHARACTERISTICS
Definition: cfgmgr32.h:713
ULONG REGDISPOSITION
Definition: cfgmgr32.h:152
#define CR_NO_SUCH_DEVNODE
Definition: cfgmgr32.h:857
#define CM_CREATE_DEVNODE_BITS
Definition: cfgmgr32.h:624
DWORD_PTR RANGE_ELEMENT
Definition: cfgmgr32.h:105
#define CM_OPEN_CLASS_KEY_BITS
Definition: cfgmgr32.h:774
#define CR_BUFFER_SMALL
Definition: cfgmgr32.h:872
#define RegDisposition_OpenAlways
Definition: cfgmgr32.h:609
#define CM_REGISTRY_CONFIG
Definition: cfgmgr32.h:803
#define CR_CALL_NOT_IMPLEMENTED
Definition: cfgmgr32.h:898
RANGE_LIST * PRANGE_LIST
Definition: cfgmgr32.h:103
RETURN_TYPE CONFIGRET
Definition: cfgmgr32.h:74
#define CM_DRP_UI_NUMBER_DESC_FORMAT
Definition: cfgmgr32.h:716
#define CR_INVALID_POINTER
Definition: cfgmgr32.h:845
#define CM_DRP_MAX
Definition: cfgmgr32.h:732
#define CR_SUCCESS
Definition: cfgmgr32.h:842
#define CM_DRP_ADDRESS
Definition: cfgmgr32.h:715
#define CM_QUERY_ARBITRATOR_BITS
Definition: cfgmgr32.h:832
RESOURCEID * PRESOURCEID
Definition: cfgmgr32.h:97
#define CM_REMOVE_BITS
Definition: cfgmgr32.h:780
#define CM_DRP_DEVICE_POWER_DATA
Definition: cfgmgr32.h:718
#define CM_DRP_HARDWAREID
Definition: cfgmgr32.h:677
#define CR_NO_SUCH_REGISTRY_KEY
Definition: cfgmgr32.h:892
#define CM_ADD_ID_BITS
Definition: cfgmgr32.h:616
#define CM_DRP_SERVICE
Definition: cfgmgr32.h:680
#define CR_INVALID_DEVNODE
Definition: cfgmgr32.h:847
#define CR_REGISTRY_ERROR
Definition: cfgmgr32.h:875
#define CR_INVALID_RANGE_LIST
Definition: cfgmgr32.h:863
#define CR_REMOVE_VETOED
Definition: cfgmgr32.h:869
CONFIGRET WINAPI CM_Get_Device_ID_List_SizeW(_Out_ PULONG pulLen, _In_opt_ PCWSTR pszFilter, _In_ ULONG ulFlags)
Definition: cfgmgr.c:3961
struct _INTERNAL_RANGE_LIST * PINTERNAL_RANGE_LIST
CONFIGRET WINAPI CM_Delete_DevNode_Key_Ex(_In_ DEVINST dnDevInst, _In_ ULONG ulHardwareProfile, _In_ ULONG ulFlags, _In_opt_ HANDLE hMachine)
Definition: cfgmgr.c:1595
CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExA(_In_ DEVINSTID_A szDevInstName, _In_ ULONG ulHardwareProfile, _Out_ PULONG pulValue, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:4776
CONFIGRET WINAPI CM_Request_Device_EjectW(_In_ DEVINST dnDevInst, _Out_opt_ PPNP_VETO_TYPE pVetoType, _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName, _In_ ULONG ulNameLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:7457
struct _NOTIFY_DATA * PNOTIFY_DATA
CONFIGRET WINAPI CM_Invert_Range_List(_In_ RANGE_LIST rlhOld, _In_ RANGE_LIST rlhNew, _In_ DWORDLONG ullMaxValue, _In_ ULONG ulFlags)
Definition: cfgmgr.c:5702
struct _INTERNAL_RANGE * PINTERNAL_RANGE
CONFIGRET WINAPI CM_Free_Res_Des_Ex(_Out_ PRES_DES prdResDes, _In_ RES_DES rdResDes, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:2472
static const WCHAR ControlClass[]
Definition: cfgmgr.c:44
CONFIGRET WINAPI CM_Unregister_Device_Interface_ExA(_In_ LPCSTR pszDeviceInterface, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:8436
CONFIGRET WINAPI CM_Enable_DevNode(_In_ DEVINST dnDevInst, _In_ ULONG ulFlags)
Definition: cfgmgr.c:1911
CONFIGRET WINAPI CM_Uninstall_DevNode(_In_ DEVINST dnPhantom, _In_ ULONG ulFlags)
Definition: cfgmgr.c:8326
CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExW(_In_ DEVINST dnDevInst, _In_ ULONG ulProperty, _Out_opt_ PULONG pulRegDataType, _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:3479
CONFIGRET WINAPI CM_Add_Empty_Log_Conf_Ex(_Out_ PLOG_CONF plcLogConf, _In_ DEVINST dnDevInst, _In_ PRIORITY Priority, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:884
CONFIGRET WINAPI CM_Register_Device_Driver(_In_ DEVINST dnDevInst, _In_ ULONG ulFlags)
Definition: cfgmgr.c:7126
CONFIGRET WINAPI CM_Add_ID_ExW(_In_ DEVINST dnDevInst, _In_ PWSTR pszID, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:1038
CONFIGRET WINAPI CM_Disconnect_Machine(_In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:1863
CONFIGRET WINAPI CM_Run_Detection_Ex(_In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:7667
CONFIGRET WINAPI CM_Get_First_Log_Conf_Ex(_Out_opt_ PLOG_CONF plcLogConf, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:4589
CONFIGRET WINAPI CM_Request_Device_EjectA(_In_ DEVINST dnDevInst, _Out_opt_ PPNP_VETO_TYPE pVetoType, _Out_writes_opt_(ulNameLength) LPSTR pszVetoName, _In_ ULONG ulNameLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:7437
CONFIGRET WINAPI CM_Get_DevNode_Status(_Out_ PULONG pulStatus, _Out_ PULONG pulProblemNumber, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags)
Definition: cfgmgr.c:3572
CONFIGRET WINAPI CM_Get_Log_Conf_Priority_Ex(_In_ LOG_CONF lcLogConf, _Out_ PPRIORITY pPriority, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:5008
CONFIGRET WINAPI CM_Open_Class_Key_ExA(_In_opt_ LPGUID pClassGuid, _In_opt_ LPCSTR pszClassName, _In_ REGSAM samDesired, _In_ REGDISPOSITION Disposition, _Out_ PHKEY phkClass, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:6251
CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExW(_Out_ PULONG pulLen, _In_opt_ PCWSTR pszFilter, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:4019
CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExA(_In_ DEVINST dnDevInst, _In_ ULONG ulProperty, _In_reads_bytes_opt_(ulLength) PCVOID Buffer, _In_ ULONG ulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:7876
CONFIGRET WINAPI CM_Query_Resource_Conflict_List(_Out_ PCONFLICT_LIST pclConflictList, _In_ DEVINST dnDevInst, _In_ RESOURCEID ResourceID, _In_ PCVOID ResourceData, _In_ ULONG ResourceLen, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:6931
CONFIGRET WINAPI CM_Get_Global_State_Ex(_Out_ PULONG pulState, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:4690
CONFIGRET WINAPI CM_Register_Device_Driver_Ex(_In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:7142
CONFIGRET WINAPI CM_Query_Arbitrator_Free_Data_Ex(_Out_writes_bytes_(DataLen) PVOID pData, _In_ ULONG DataLen, _In_ DEVINST dnDevInst, _In_ RESOURCEID ResourceID, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:6739
CONFIGRET WINAPI CM_Get_Child(_Out_ PDEVINST pdnDevInst, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags)
Definition: cfgmgr.c:2530
CONFIGRET WINAPI CM_Unregister_Device_Interface_ExW(_In_ LPCWSTR pszDeviceInterface, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:8468
#define CONFLICT_MAGIC
Definition: cfgmgr.c:106
CONFIGRET WINAPI CM_Register_Device_InterfaceW(_In_ DEVINST dnDevInst, _In_ LPGUID InterfaceClassGuid, _In_opt_ LPCWSTR pszReference, _Out_writes_(*pulLength) LPWSTR pszDeviceInterface, _Inout_ PULONG pulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:7225
#define RANGE_LIST_MAGIC
Definition: cfgmgr.c:98
CONFIGRET WINAPI CM_Disable_DevNode(_In_ DEVINST dnDevInst, _In_ ULONG ulFlags)
Definition: cfgmgr.c:1781
CONFIGRET WINAPI CM_Request_Eject_PC_Ex(_In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:7614
CONFIGRET WINAPI CM_Unregister_Device_InterfaceW(_In_ LPCWSTR pszDeviceInterface, _In_ ULONG ulFlags)
Definition: cfgmgr.c:8419
CONFIGRET WINAPI CM_Set_HW_Prof_FlagsA(_In_ DEVINSTID_A szDevInstName, _In_ ULONG ulConfig, _In_ ULONG ulValue, _In_ ULONG ulFlags)
Definition: cfgmgr.c:8103
CONFIGRET WINAPI CM_Get_Device_IDW(_In_ DEVINST dnDevInst, _Out_writes_(BufferLen) PWCHAR Buffer, _In_ ULONG BufferLen, _In_ ULONG ulFlags)
Definition: cfgmgr.c:3676
CONFIGRET WINAPI CM_Merge_Range_List(_In_ RANGE_LIST rlhOld1, _In_ RANGE_LIST rlhOld2, _In_ RANGE_LIST rlhNew, _In_ ULONG ulFlags)
Definition: cfgmgr.c:5998
CONFIGRET WINAPI CM_Delete_Class_Key(_In_ LPGUID ClassGuid, _In_ ULONG ulFlags)
Definition: cfgmgr.c:1507
CONFIGRET WINAPI CMP_WaitServicesAvailable(_In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:825
CONFIGRET WINAPI CM_Remove_SubTree(_In_ DEVINST dnAncestor, _In_ ULONG ulFlags)
Definition: cfgmgr.c:7402
CONFIGRET WINAPI CM_Create_DevNodeA(_Out_ PDEVINST pdnDevInst, _In_ DEVINSTID_A pDeviceID, _In_ DEVINST dnParent, _In_ ULONG ulFlags)
Definition: cfgmgr.c:1310
BOOL IsValidLogConf(_In_opt_ PLOG_CONF_INFO pLogConfInfo)
Definition: cfgmgr.c:414
CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExA(_Out_ PULONG pulLen, _In_ LPGUID InterfaceClassGuid, _In_opt_ DEVINSTID_A pDeviceID, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:4477
CONFIGRET WINAPI CM_Detect_Resource_Conflict(_In_ DEVINST dnDevInst, _In_ RESOURCEID ResourceID, _In_reads_bytes_(ResourceLen) PCVOID ResourceData, _In_ ULONG ResourceLen, _Out_ PBOOL pbConflictDetected, _In_ ULONG ulFlags)
Definition: cfgmgr.c:1732
CONFIGRET WINAPI CM_Free_Resource_Conflict_Handle(_In_ CONFLICT_LIST clConflictList)
Definition: cfgmgr.c:2504
CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex(_Out_ PULONG pulLen, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:4090
CONFIGRET WINAPI CM_Set_HW_Prof_FlagsW(_In_ DEVINSTID_W szDevInstName, _In_ ULONG ulConfig, _In_ ULONG ulValue, _In_ ULONG ulFlags)
Definition: cfgmgr.c:8122
CONFIGRET WINAPI CM_Get_Device_Interface_ListA(_In_ LPGUID InterfaceClassGuid, _In_opt_ DEVINSTID_A pDeviceID, _Out_writes_(BufferLen) PCHAR Buffer, _In_ ULONG BufferLen, _In_ ULONG ulFlags)
Definition: cfgmgr.c:4270
CONFIGRET WINAPI CM_Create_DevNode_ExA(_Out_ PDEVINST pdnDevInst, _In_ DEVINSTID_A pDeviceID, _In_ DEVINST dnParent, _In_ ULONG ulFlags, _In_opt_ HANDLE hMachine)
Definition: cfgmgr.c:1348
CONFIGRET WINAPI CM_Get_Class_Registry_PropertyA(LPGUID ClassGuid, ULONG ulProperty, PULONG pulRegDataType, PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine)
Definition: cfgmgr.c:2897
CONFIGRET WINAPI CM_Get_First_Log_Conf(_Out_opt_ PLOG_CONF plcLogConf, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags)
Definition: cfgmgr.c:4572
CONFIGRET WINAPI CM_Get_Device_Interface_AliasW(_In_ LPCWSTR pszDeviceInterface, _In_ LPGUID AliasInterfaceGuid, _Out_writes_(*pulLength) LPWSTR pszAliasDeviceInterface, _Inout_ PULONG pulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:4163
CONFIGRET WINAPI CM_Reenumerate_DevNode_Ex(_In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:7064
CONFIGRET WINAPI CM_Get_Class_Key_Name_ExA(_In_ LPGUID ClassGuid, _Out_writes_opt_(*pulLength) LPSTR pszKeyName, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:2667
CONFIGRET WINAPI CM_Get_Hardware_Profile_InfoA(_In_ ULONG ulIndex, _Out_ PHWPROFILEINFO_A pHWProfileInfo, _In_ ULONG ulFlags)
Definition: cfgmgr.c:4863
CONFIGRET WINAPI CM_Intersect_Range_List(_In_ RANGE_LIST rlhOld1, _In_ RANGE_LIST rlhOld2, _In_ RANGE_LIST rlhNew, _In_ ULONG ulFlags)
Definition: cfgmgr.c:5684
CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyW(_In_ DEVINST dnDevInst, _In_ ULONG ulProperty, _In_reads_bytes_opt_(ulLength) PCVOID Buffer, _In_ ULONG ulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:7855
CONFIGRET WINAPI CM_Get_Sibling_Ex(_Out_ PDEVINST pdnDevInst, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:5546
struct _LOG_CONF_INFO * PLOG_CONF_INFO
#define NOTIFY_MAGIC
Definition: cfgmgr.c:80
CONFIGRET WINAPI CM_Open_DevNode_Key_Ex(_In_ DEVINST dnDevNode, _In_ REGSAM samDesired, _In_ ULONG ulHardwareProfile, _In_ REGDISPOSITION Disposition, _Out_ PHKEY phkDevice, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:6413
CONFIGRET WINAPI CM_Connect_MachineA(_In_opt_ PCSTR UNCServerName, _Out_ PHMACHINE phMachine)
Definition: cfgmgr.c:1212
WORD WINAPI CM_Get_Version(VOID)
Definition: cfgmgr.c:5628
CONFIGRET WINAPI CM_Add_Res_Des(_Out_opt_ PRES_DES prdResDes, _In_ LOG_CONF lcLogConf, _In_ RESOURCEID ResourceID, _In_reads_bytes_(ResourceLen) PCVOID ResourceData, _In_ ULONG ResourceLen, _In_ ULONG ulFlags)
Definition: cfgmgr.c:1169
CONFIGRET WINAPI CM_Modify_Res_Des_Ex(_Out_ PRES_DES prdResDes, _In_ RES_DES rdResDes, _In_ RESOURCEID ResourceID, _In_reads_bytes_(ResourceLen) PCVOID ResourceData, _In_ ULONG ResourceLen, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:6038
CONFIGRET WINAPI CM_Query_Arbitrator_Free_Size(_Out_ PULONG pulSize, _In_ DEVINST dnDevInst, _In_ RESOURCEID ResourceID, _In_ ULONG ulFlags)
Definition: cfgmgr.c:6808
CONFIGRET WINAPI CM_Get_Device_Interface_List_ExA(_In_ LPGUID InterfaceClassGuid, _In_opt_ DEVINSTID_A pDeviceID, _Out_writes_(BufferLen) PCHAR Buffer, _In_ ULONG BufferLen, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:4312
CONFIGRET WINAPI CM_Delete_Range(_In_ DWORDLONG ullStartValue, _In_ DWORDLONG ullEndValue, _In_ RANGE_LIST rlh, _In_ ULONG ulFlags)
Definition: cfgmgr.c:1714
CONFIGRET WINAPI CM_Query_Remove_SubTree(_In_ DEVINST dnAncestor, _In_ ULONG ulFlags)
Definition: cfgmgr.c:6896
CONFIGRET WINAPI CM_Detect_Resource_Conflict_Ex(_In_ DEVINST dnDevInst, _In_ RESOURCEID ResourceID, _In_reads_bytes_(ResourceLen) PCVOID ResourceData, _In_ ULONG ResourceLen, _Out_ PBOOL pbConflictDetected, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:1759
static const WCHAR BackslashOpenBrace[]
Definition: cfgmgr.c:40
CONFIGRET WINAPI CM_Add_ID_ExA(_In_ DEVINST dnDevInst, _In_ PSTR pszID, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:1010
CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExW(_Out_ PULONG pulLen, _In_ LPGUID InterfaceClassGuid, _In_opt_ DEVINSTID_W pDeviceID, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:4516
CONFIGRET WINAPI CM_Enumerate_Classes(_In_ ULONG ulClassIndex, _Out_ LPGUID ClassGuid, _In_ ULONG ulFlags)
Definition: cfgmgr.c:1992
CONFIGRET WINAPI CM_Get_Class_NameW(_In_ LPGUID ClassGuid, _Out_writes_opt_(*pulLength) PWCHAR Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:2770
CONFIGRET WINAPI CM_Get_HW_Prof_FlagsA(_In_ DEVINSTID_A szDevInstName, _In_ ULONG ulHardwareProfile, _Out_ PULONG pulValue, _In_ ULONG ulFlags)
Definition: cfgmgr.c:4738
CONFIGRET WINAPI CM_Register_Device_Interface_ExA(_In_ DEVINST dnDevInst, _In_ LPGUID InterfaceClassGuid, _In_opt_ LPCSTR pszReference, _Out_writes_(*pulLength) LPSTR pszDeviceInterface, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:7248
CONFIGRET WINAPI CM_Test_Range_Available(_In_ DWORDLONG ullStartValue, _In_ DWORDLONG ullEndValue, _In_ RANGE_LIST rlh, _In_ ULONG ulFlags)
Definition: cfgmgr.c:8309
CONFIGRET WINAPI CM_Create_DevNode_ExW(_Out_ PDEVINST pdnDevInst, _In_ DEVINSTID_W pDeviceID, _In_ DEVINST dnParent, _In_ ULONG ulFlags, _In_opt_ HANDLE hMachine)
Definition: cfgmgr.c:1378
CONFIGRET WINAPI CM_Query_Arbitrator_Free_Data(_Out_writes_bytes_(DataLen) PVOID pData, _In_ ULONG DataLen, _In_ DEVINST dnDevInst, _In_ RESOURCEID ResourceID, _In_ ULONG ulFlags)
Definition: cfgmgr.c:6719
CONFIGRET WINAPI CMP_GetBlockedDriverInfo(_Out_opt_ LPWSTR pszNames, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:466
CONFIGRET WINAPI CM_Get_Class_Registry_PropertyW(LPGUID ClassGuid, ULONG ulProperty, PULONG pulRegDataType, PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine)
Definition: cfgmgr.c:2976
CONFIGRET WINAPI CM_Is_Dock_Station_Present_Ex(_Out_ PBOOL pbPresent, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:5735
CONFIGRET WINAPI CM_Open_Class_Key_ExW(_In_opt_ LPGUID pClassGuid, _In_opt_ LPCWSTR pszClassName, _In_ REGSAM samDesired, _In_ REGDISPOSITION Disposition, _Out_ PHKEY phkClass, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:6288
CONFIGRET WINAPI CM_Get_Device_Interface_List_SizeW(_Out_ PULONG pulLen, _In_ LPGUID InterfaceClassGuid, _In_opt_ DEVINSTID_W pDeviceID, _In_ ULONG ulFlags)
Definition: cfgmgr.c:4458
CONFIGRET WINAPI CM_Set_DevNode_Problem_Ex(_In_ DEVINST dnDevInst, _In_ ULONG ulProblem, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:7772
CONFIGRET WINAPI CM_Query_Arbitrator_Free_Size_Ex(_Out_ PULONG pulSize, _In_ DEVINST dnDevInst, _In_ RESOURCEID ResourceID, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:6827
static const WCHAR DeviceClasses[]
Definition: cfgmgr.c:49
CONFIGRET WINAPI CM_Open_DevNode_Key(_In_ DEVINST dnDevNode, _In_ REGSAM samDesired, _In_ ULONG ulHardwareProfile, _In_ REGDISPOSITION Disposition, _Out_ PHKEY phkDevice, _In_ ULONG ulFlags)
Definition: cfgmgr.c:6392
static CONFIGRET RpcStatusToCmStatus(_In_ RPC_STATUS Status)
Definition: cfgmgr.c:136
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
CONFIGRET WINAPI CM_Enumerate_Enumerators_ExW(_In_ ULONG ulEnumIndex, _Out_writes_(*pulLength) PWCHAR Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:2165
CONFIGRET WINAPI CM_Dup_Range_List(_In_ RANGE_LIST rlhOld, _In_ RANGE_LIST rlhNew, _In_ ULONG ulFlags)
Definition: cfgmgr.c:1894
CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExA(_In_ DEVINST dnDevInst, _In_ ULONG ulProperty, _Out_opt_ PULONG pulRegDataType, _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:3400
struct _INTERNAL_RANGE INTERNAL_RANGE
CONFIGRET WINAPI CM_Add_IDA(_In_ DEVINST dnDevInst, _In_ PSTR pszID, _In_ ULONG ulFlags)
Definition: cfgmgr.c:976
CONFIGRET WINAPI CM_Setup_DevNode(_In_ DEVINST dnDevInst, _In_ ULONG ulFlags)
Definition: cfgmgr.c:8228
CONFIGRET WINAPI CM_Get_Hardware_Profile_Info_ExA(_In_ ULONG ulIndex, _Out_ PHWPROFILEINFO_A pHWProfileInfo, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:4899
CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyA(_In_ DEVINST dnDevInst, _In_ ULONG ulProperty, _In_reads_bytes_opt_(ulLength) PCVOID Buffer, _In_ ULONG ulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:7834
CONFIGRET WINAPI CM_Query_And_Remove_SubTree_ExA(_In_ DEVINST dnAncestor, _Out_opt_ PPNP_VETO_TYPE pVetoType, _Out_writes_opt_(ulNameLength) LPSTR pszVetoName, _In_ ULONG ulNameLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:6601
CONFIGRET WINAPI CM_Get_DevNode_Custom_Property_ExA(_In_ DEVINST dnDevInst, _In_ PCSTR pszCustomPropertyName, _Out_opt_ PULONG pulRegDataType, _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:3183
CONFIGRET WINAPI CM_Get_Device_ID_ExW(_In_ DEVINST dnDevInst, _Out_writes_(BufferLen) PWCHAR Buffer, _In_ ULONG BufferLen, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:3737
BOOL WINAPI CM_Is_Version_Available_Ex(_In_ WORD wVersion, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:5797
CONFIGRET WINAPI CM_Get_Device_IDA(_In_ DEVINST dnDevInst, _Out_writes_(BufferLen) PCHAR Buffer, _In_ ULONG BufferLen, _In_ ULONG ulFlags)
Definition: cfgmgr.c:3658
CONFIGRET WINAPI CM_Locate_DevNodeA(_Out_ PDEVINST pdnDevInst, _In_opt_ DEVINSTID_A pDeviceID, _In_ ULONG ulFlags)
Definition: cfgmgr.c:5845
CONFIGRET WINAPI CM_Request_Device_Eject_ExW(_In_ DEVINST dnDevInst, _Out_opt_ PPNP_VETO_TYPE pVetoType, _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName, _In_ ULONG ulNameLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:7527
BOOL IsValidConflictData(_In_opt_ PCONFLICT_DATA pConflictData)
Definition: cfgmgr.c:438
CONFIGRET WINAPI CM_Free_Res_Des(_Out_ PRES_DES prdResDes, _In_ RES_DES rdResDes, _In_ ULONG ulFlags)
Definition: cfgmgr.c:2455
CONFIGRET WINAPI CM_Get_Global_State(_Out_ PULONG pulState, _In_ ULONG ulFlags)
Definition: cfgmgr.c:4674
CONFIGRET WINAPI CM_Get_DevNode_Custom_Property_ExW(_In_ DEVINST dnDevInst, _In_ PCWSTR pszCustomPropertyName, _Out_opt_ PULONG pulRegDataType, _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:3271
CONFIGRET WINAPI CM_Set_HW_Prof_Ex(_In_ ULONG ulHardwareProfile, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:8055
CONFIGRET WINAPI CM_Get_Next_Res_Des_Ex(_Out_ PRES_DES prdResDes, _In_ RES_DES rdResDes, _In_ RESOURCEID ForResource, _Out_opt_ PRESOURCEID pResourceID, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:5202
CONFIGRET WINAPI CM_Create_DevNodeW(_Out_ PDEVINST pdnDevInst, _In_ DEVINSTID_W pDeviceID, _In_ DEVINST dnParent, _In_ ULONG ulFlags)
Definition: cfgmgr.c:1329
CONFIGRET WINAPI CM_Locate_DevNode_ExA(_Out_ PDEVINST pdnDevInst, _In_opt_ DEVINSTID_A pDeviceID, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:5879
CONFIGRET WINAPI CM_Get_Parent(_Out_ PDEVINST pdnDevInst, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags)
Definition: cfgmgr.c:5297
DWORD WINAPI I_ScPnPGetServiceName(IN SERVICE_STATUS_HANDLE hServiceStatus, OUT LPWSTR lpServiceName, IN DWORD cchServiceName)
Definition: sctrl.c:869
CONFIGRET WINAPI CM_Add_Empty_Log_Conf(_Out_ PLOG_CONF plcLogConf, _In_ DEVINST dnDevInst, _In_ PRIORITY Priority, _In_ ULONG ulFlags)
Definition: cfgmgr.c:865
CONFIGRET WINAPI CM_Get_Device_Interface_ListW(_In_ LPGUID InterfaceClassGuid, _In_opt_ DEVINSTID_W pDeviceID, _Out_writes_(BufferLen) PWCHAR Buffer, _In_ ULONG BufferLen, _In_ ULONG ulFlags)
Definition: cfgmgr.c:4291
CONFIGRET WINAPI CM_Get_Device_ID_Size(_Out_ PULONG pulLen, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags)
Definition: cfgmgr.c:4073
CONFIGRET WINAPI CM_Create_Range_List(_Out_ PRANGE_LIST prlh, _In_ ULONG ulFlags)
Definition: cfgmgr.c:1463
CONFIGRET WINAPI CM_Get_Resource_Conflict_DetailsA(_In_ CONFLICT_LIST clConflictList, _In_ ULONG ulIndex, _Inout_ PCONFLICT_DETAILS_A pConflictDetails)
Definition: cfgmgr.c:5495
CONFIGRET WINAPI CM_Register_Device_InterfaceA(_In_ DEVINST dnDevInst, _In_ LPGUID InterfaceClassGuid, _In_opt_ LPCSTR pszReference, _Out_writes_(*pulLength) LPSTR pszDeviceInterface, _Inout_ PULONG pulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:7202
CONFIGRET WINAPI CM_Get_Child_Ex(_Out_ PDEVINST pdnDevInst, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:2547
CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyW(_In_ DEVINST dnDevInst, _In_ ULONG ulProperty, _Out_opt_ PULONG pulRegDataType, _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:3378
CONFIGRET WINAPI CM_Modify_Res_Des(_Out_ PRES_DES prdResDes, _In_ RES_DES rdResDes, _In_ RESOURCEID ResourceID, _In_reads_bytes_(ResourceLen) PCVOID ResourceData, _In_ ULONG ResourceLen, _In_ ULONG ulFlags)
Definition: cfgmgr.c:6016
CONFIGRET WINAPI CM_Add_IDW(_In_ DEVINST dnDevInst, _In_ PWSTR pszID, _In_ ULONG ulFlags)
Definition: cfgmgr.c:993
CONFIGRET WINAPI CM_Get_Log_Conf_Priority(_In_ LOG_CONF lcLogConf, _Out_ PPRIORITY pPriority, _In_ ULONG ulFlags)
Definition: cfgmgr.c:4991
CONFIGRET WINAPI CM_Reenumerate_DevNode(_In_ DEVINST dnDevInst, _In_ ULONG ulFlags)
Definition: cfgmgr.c:7049
CONFIGRET WINAPI CM_Set_Class_Registry_PropertyA(_In_ LPGUID ClassGuid, _In_ ULONG ulProperty, _In_reads_bytes_opt_(ulLength) PCVOID Buffer, _In_ ULONG ulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:7715
CONFIGRET WINAPI CM_Get_DevNode_Custom_PropertyA(_In_ DEVINST dnDevInst, _In_ PCSTR pszCustomPropertyName, _Out_opt_ PULONG pulRegDataType, _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:3137
static VOID SplitDeviceInstanceId(_In_ PWSTR pszDeviceInstanceId, _Out_ PWSTR pszDeviceId, _Out_ PWSTR pszInstanceId)
Definition: cfgmgr.c:198
CONFIGRET WINAPI CM_Get_Parent_Ex(_Out_ PDEVINST pdnDevInst, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:5314
CONFIGRET WINAPI CM_First_Range(_In_ RANGE_LIST rlh, _Out_ PDWORDLONG pullStart, _Out_ PDWORDLONG pullEnd, _Out_ PRANGE_ELEMENT preElement, _In_ ULONG ulFlags)
Definition: cfgmgr.c:2244
CONFIGRET WINAPI CM_Unregister_Device_InterfaceA(_In_ LPCSTR pszDeviceInterface, _In_ ULONG ulFlags)
Definition: cfgmgr.c:8402
CONFIGRET WINAPI CM_Set_DevNode_Problem(_In_ DEVINST dnDevInst, _In_ ULONG ulProblem, _In_ ULONG ulFlags)
Definition: cfgmgr.c:7755
CONFIGRET WINAPI CM_Register_Device_Interface_ExW(_In_ DEVINST dnDevInst, _In_ LPGUID InterfaceClassGuid, _In_opt_ LPCWSTR pszReference, _Out_writes_(*pulLength) LPWSTR pszDeviceInterface, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:7322
CONFIGRET WINAPI CM_Get_Device_ID_List_ExA(_In_ PCSTR pszFilter, _Out_writes_(BufferLen) PCHAR Buffer, _In_ ULONG BufferLen, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:3823
CONFIGRET WINAPI CM_Get_Device_Interface_List_SizeA(_Out_ PULONG pulLen, _In_ LPGUID InterfaceClassGuid, _In_opt_ DEVINSTID_A pDeviceID, _In_ ULONG ulFlags)
Definition: cfgmgr.c:4439
static const WCHAR CloseBrace[]
Definition: cfgmgr.c:41
CONFIGRET WINAPI CM_Setup_DevNode_Ex(_In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:8244
struct _INTERNAL_RANGE_LIST INTERNAL_RANGE_LIST
CONFIGRET WINAPI CM_Delete_Class_Key_Ex(_In_ LPGUID ClassGuid, _In_ ULONG ulFlags, _In_opt_ HANDLE hMachine)
Definition: cfgmgr.c:1523
CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExW(_In_ LPCWSTR pszDeviceInterface, _In_ LPGUID AliasInterfaceGuid, _Out_writes_(*pulLength) LPWSTR pszAliasDeviceInterface, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:4206
CONFIGRET WINAPI CM_Connect_MachineW(_In_opt_ PCWSTR UNCServerName, _Out_ PHMACHINE phMachine)
Definition: cfgmgr.c:1241
CONFIGRET WINAPI CM_Set_HW_Prof(_In_ ULONG ulHardwareProfile, _In_ ULONG ulFlags)
Definition: cfgmgr.c:8039
static CONFIGRET GetDeviceInstanceKeyPath(_In_ RPC_BINDING_HANDLE BindingHandle, _In_ PWSTR pszDeviceInst, _Out_ PWSTR pszKeyPath, _Out_ PWSTR pszInstancePath, _In_ ULONG ulHardwareProfile, _In_ ULONG ulFlags)
Definition: cfgmgr.c:224
CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExA(_Out_ PULONG pulLen, _In_opt_ PCSTR pszFilter, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:3978
CONFIGRET WINAPI CM_Set_Class_Registry_PropertyW(_In_ LPGUID ClassGuid, _In_ ULONG ulProperty, _In_reads_bytes_opt_(ulLength) PCVOID Buffer, _In_ ULONG ulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:7735
CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExW(_In_ DEVINST dnDevInst, _In_ ULONG ulProperty, _In_reads_bytes_opt_(ulLength) PCVOID Buffer, _In_ ULONG ulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:7962
CONFIGRET WINAPI CM_Get_Next_Res_Des(_Out_ PRES_DES prdResDes, _In_ RES_DES rdResDes, _In_ RESOURCEID ForResource, _Out_opt_ PRESOURCEID pResourceID, _In_ ULONG ulFlags)
Definition: cfgmgr.c:5182
static ULONG GetRegistryPropertyType(_In_ ULONG ulProperty)
Definition: cfgmgr.c:145
CONFIGRET WINAPI CM_Request_Eject_PC(VOID)
Definition: cfgmgr.c:7601
CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExA(_In_ LPCSTR pszDeviceInterface, _In_ LPGUID AliasInterfaceGuid, _Out_writes_(*pulLength) LPSTR pszAliasDeviceInterface, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:4185
CONFIGRET WINAPI CM_Get_Class_Name_ExA(_In_ LPGUID ClassGuid, _Out_writes_opt_(*pulLength) PCHAR Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:2789
static BOOL GuidToString(_In_ LPGUID Guid, _Out_ LPWSTR String)
Definition: cfgmgr.c:113
CONFIGRET WINAPI CM_Get_Device_ID_ListA(_In_ PCSTR pszFilter, _Out_writes_(BufferLen) PCHAR Buffer, _In_ ULONG BufferLen, _In_ ULONG ulFlags)
Definition: cfgmgr.c:3785
CONFIGRET WINAPI CM_Get_Res_Des_Data(_In_ RES_DES rdResDes, _Out_writes_bytes_(BufferLen) PVOID Buffer, _In_ ULONG BufferLen, _In_ ULONG ulFlags)
Definition: cfgmgr.c:5396
BOOL WINAPI CM_Is_Version_Available(_In_ WORD wVersion)
Definition: cfgmgr.c:5782
CONFIGRET WINAPI CM_Get_Res_Des_Data_Size(_Out_ PULONG pulSize, _In_ RES_DES rdResDes, _In_ ULONG ulFlags)
Definition: cfgmgr.c:5433
struct _NOTIFY_DATA NOTIFY_DATA
struct _MACHINE_INFO MACHINE_INFO
CONFIGRET WINAPI CM_Get_Hardware_Profile_InfoW(_In_ ULONG ulIndex, _Out_ PHWPROFILEINFO_W pHWProfileInfo, _In_ ULONG ulFlags)
Definition: cfgmgr.c:4881
CONFIGRET WINAPI CM_Free_Log_Conf_Ex(_In_ LOG_CONF lcLogConfToBeFreed, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:2318
CONFIGRET WINAPI CM_Disable_DevNode_Ex(_In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:1797
CONFIGRET WINAPI CM_Next_Range(_Inout_ PRANGE_ELEMENT preElement, _Out_ PDWORDLONG pullStart, _Out_ PDWORDLONG pullEnd, _In_ ULONG ulFlags)
Definition: cfgmgr.c:6148
CONFIGRET WINAPI CM_Get_Sibling(_Out_ PDEVINST pdnDevInst, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags)
Definition: cfgmgr.c:5529
CONFIGRET WINAPI CM_Query_Remove_SubTree_Ex(_In_ DEVINST dnAncestor, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:6914
CONFIGRET WINAPI CM_Free_Range_List(_In_ RANGE_LIST RangeList, _In_ ULONG ulFlags)
Definition: cfgmgr.c:2407
CONFIGRET WINAPI CM_Get_HW_Prof_FlagsW(_In_ DEVINSTID_W szDevInstName, _In_ ULONG ulHardwareProfile, _Out_ PULONG pulValue, _In_ ULONG ulFlags)
Definition: cfgmgr.c:4757
CONFIGRET WINAPI CM_Delete_DevNode_Key(_In_ DEVINST dnDevInst, _In_ ULONG ulHardwareProfile, _In_ ULONG ulFlags)
Definition: cfgmgr.c:1577
CONFIGRET WINAPI CM_Open_Class_KeyW(_In_opt_ LPGUID pClassGuid, _In_opt_ LPCWSTR pszClassName, _In_ REGSAM samDesired, _In_ REGDISPOSITION Disposition, _Out_ PHKEY phkClass, _In_ ULONG ulFlags)
Definition: cfgmgr.c:6229
CONFIGRET WINAPI CM_Get_Class_Name_ExW(_In_ LPGUID ClassGuid, _Out_writes_opt_(*pulLength) PWCHAR Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:2837
CONFIGRET WINAPI CM_Add_Range(_In_ DWORDLONG ullStartValue, _In_ DWORDLONG ullEndValue, _In_ RANGE_LIST rlh, _In_ ULONG ulFlags)
Definition: cfgmgr.c:1106
CONFIGRET WINAPI CM_Get_Depth_Ex(_Out_ PULONG pulDepth, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:3072
CONFIGRET WINAPI CM_Move_DevNode_Ex(_In_ DEVINST dnFromDevInst, _In_ DEVINST dnToDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:6077
#define LOG_CONF_MAGIC
Definition: cfgmgr.c:71
CONFIGRET WINAPI CMP_Report_LogOn(_In_ DWORD dwMagic, _In_ DWORD dwProcessId)
Definition: cfgmgr.c:710
CONFIGRET WINAPI CM_Get_Device_ID_List_ExW(_In_ PCWSTR pszFilter, _Out_writes_(BufferLen) PWCHAR Buffer, _In_ ULONG BufferLen, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:3888
CONFIGRET WINAPI CM_Get_Next_Log_Conf(_Out_opt_ PLOG_CONF plcLogConf, _In_ LOG_CONF lcLogConf, _In_ ULONG ulFlags)
Definition: cfgmgr.c:5077
CONFIGRET WINAPI CM_Get_Class_NameA(_In_ LPGUID ClassGuid, _Out_writes_opt_(*pulLength) PCHAR Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:2751
CONFIGRET WINAPI CM_Query_And_Remove_SubTreeW(_In_ DEVINST dnAncestor, _Out_opt_ PPNP_VETO_TYPE pVetoType, _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName, _In_ ULONG ulNameLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:6581
CONFIGRET WINAPI CM_Add_Res_Des_Ex(_Out_opt_ PRES_DES prdResDes, _In_ LOG_CONF lcLogConf, _In_ RESOURCEID ResourceID, _In_reads_bytes_(ResourceLen) PCVOID ResourceData, _In_ ULONG ResourceLen, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:1190
struct _CONFLICT_DATA * PCONFLICT_DATA
CONFIGRET WINAPI CM_Uninstall_DevNode_Ex(_In_ DEVINST dnPhantom, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:8342
CONFIGRET WINAPI CMP_Init_Detection(_In_ ULONG ulMagic)
Definition: cfgmgr.c:566
CONFIGRET WINAPI CM_Enumerate_Enumerators_ExA(_In_ ULONG ulEnumIndex, _Out_writes_(*pulLength) PCHAR Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:2114
CONFIGRET WINAPI CM_Get_Device_Interface_AliasA(_In_ LPCSTR pszDeviceInterface, _In_ LPGUID AliasInterfaceGuid, _Out_writes_(*pulLength) LPSTR pszAliasDeviceInterface, _Inout_ PULONG pulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:4141
CONFIGRET WINAPI CM_Remove_SubTree_Ex(_In_ DEVINST dnAncestor, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:7420
CONFIGRET WINAPI CM_Get_Next_Log_Conf_Ex(_Out_opt_ PLOG_CONF plcLogConf, _In_ LOG_CONF lcLogConf, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:5094
CONFIGRET WINAPI CM_Locate_DevNode_ExW(_Out_ PDEVINST pdnDevInst, _In_opt_ DEVINSTID_W pDeviceID, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:5911
CONFIGRET WINAPI CMP_UnregisterNotification(_In_ HDEVNOTIFY hDevNotify)
Definition: cfgmgr.c:758
CONFIGRET WINAPI CM_Get_Hardware_Profile_Info_ExW(_In_ ULONG ulIndex, _Out_ PHWPROFILEINFO_W pHWProfileInfo, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:4941
struct _MACHINE_INFO * PMACHINE_INFO
CONFIGRET WINAPI CM_Get_Resource_Conflict_Count(_In_ CONFLICT_LIST clConflictList, _Out_ PULONG pulCount)
Definition: cfgmgr.c:5468
CONFIGRET WINAPI CM_Find_Range(_Out_ PDWORDLONG pullStart, _In_ DWORDLONG ullStart, _In_ ULONG ulLength, _In_ DWORDLONG ullAlignment, _In_ DWORDLONG ullEnd, _In_ RANGE_LIST rlh, _In_ ULONG ulFlags)
Definition: cfgmgr.c:2223
CONFIGRET WINAPI CM_Free_Log_Conf(_In_ LOG_CONF lcLogConfToBeFreed, _In_ ULONG ulFlags)
Definition: cfgmgr.c:2302
CONFIGRET WINAPI CM_Get_Res_Des_Data_Ex(_In_ RES_DES rdResDes, _Out_writes_bytes_(BufferLen) PVOID Buffer, _In_ ULONG BufferLen, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:5414
CONFIGRET WINAPI CM_Open_Class_KeyA(_In_opt_ LPGUID pClassGuid, _In_opt_ LPCSTR pszClassName, _In_ REGSAM samDesired, _In_ REGDISPOSITION Disposition, _Out_ PHKEY phkClass, _In_ ULONG ulFlags)
Definition: cfgmgr.c:6207
CONFIGRET WINAPI CM_Get_Class_Key_Name_ExW(_In_ LPGUID ClassGuid, _Out_writes_opt_(*pulLength) LPWSTR pszKeyName, _Inout_ PULONG pulLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:2715
CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExW(_In_ DEVINSTID_W szDevInstName, _In_ ULONG ulHardwareProfile, _Out_ PULONG pulValue, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:4810
BOOL IsValidRangeList(_In_opt_ PINTERNAL_RANGE_LIST pRangeList)
Definition: cfgmgr.c:390
CONFIGRET WINAPI CM_Run_Detection(_In_ ULONG ulFlags)
Definition: cfgmgr.c:7653
CONFIGRET WINAPI CM_Free_Res_Des_Handle(_In_ RES_DES rdResDes)
Definition: cfgmgr.c:2490
CONFIGRET WINAPI CM_Query_And_Remove_SubTreeA(_In_ DEVINST dnAncestor, _Out_opt_ PPNP_VETO_TYPE pVetoType, _Out_writes_opt_(ulNameLength) LPSTR pszVetoName, _In_ ULONG ulNameLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:6561
CONFIGRET WINAPI CM_Request_Device_Eject_ExA(_In_ DEVINST dnDevInst, _Out_opt_ PPNP_VETO_TYPE pVetoType, _Out_writes_opt_(ulNameLength) LPSTR pszVetoName, _In_ ULONG ulNameLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:7477
DWORD WINAPI CMP_WaitNoPendingInstallEvents(_In_ DWORD dwTimeout)
Definition: cfgmgr.c:802
CONFIGRET WINAPI CM_Get_Class_Key_NameW(_In_ LPGUID ClassGuid, _Out_writes_opt_(*pulLength) LPWSTR pszKeyName, _Inout_ PULONG pulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:2648
CONFIGRET WINAPI CM_Enumerate_Classes_Ex(_In_ ULONG ulClassIndex, _Out_ LPGUID ClassGuid, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:2009
CONFIGRET WINAPI CM_Get_Depth(_Out_ PULONG pulDepth, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags)
Definition: cfgmgr.c:3055
CONFIGRET WINAPI CM_Query_And_Remove_SubTree_ExW(_In_ DEVINST dnAncestor, _Out_opt_ PPNP_VETO_TYPE pVetoType, _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName, _In_ ULONG ulNameLength, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:6649
CONFIGRET WINAPI CM_Locate_DevNodeW(_Out_ PDEVINST pdnDevInst, _In_opt_ DEVINSTID_W pDeviceID, _In_ ULONG ulFlags)
Definition: cfgmgr.c:5862
CONFIGRET WINAPI CM_Move_DevNode(_In_ DEVINST dnFromDevInst, _In_ DEVINST dnToDevInst, _In_ ULONG ulFlags)
Definition: cfgmgr.c:6060
CONFIGRET WINAPI CM_Get_Class_Key_NameA(_In_ LPGUID ClassGuid, _Out_writes_opt_(*pulLength) LPSTR pszKeyName, _Inout_ PULONG pulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:2629
CONFIGRET WINAPI CM_Enumerate_EnumeratorsW(_In_ ULONG ulEnumIndex, _Out_writes_(*pulLength) PWCHAR Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:2095
CONFIGRET WINAPI CM_Get_Device_ID_ExA(_In_ DEVINST dnDevInst, _Out_writes_(BufferLen) PCHAR Buffer, _In_ ULONG BufferLen, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:3694
CONFIGRET WINAPI CMP_RegisterNotification(_In_ HANDLE hRecipient, _In_ LPVOID lpvNotificationFilter, _In_ ULONG ulFlags, _Out_ PHDEVNOTIFY phDevNotify)
Definition: cfgmgr.c:599
CONFIGRET WINAPI CM_Free_Log_Conf_Handle(_In_ LOG_CONF lcLogConf)
Definition: cfgmgr.c:2385
CONFIGRET WINAPI CM_Is_Dock_Station_Present(_Out_ PBOOL pbPresent)
Definition: cfgmgr.c:5720
CONFIGRET WINAPI CM_Get_Resource_Conflict_DetailsW(_In_ CONFLICT_LIST clConflictList, _In_ ULONG ulIndex, _Inout_ PCONFLICT_DETAILS_W pConflictDetails)
Definition: cfgmgr.c:5512
CONFIGRET WINAPI CM_Enumerate_EnumeratorsA(_In_ ULONG ulEnumIndex, _Out_writes_(*pulLength) PCHAR Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:2076
CONFIGRET WINAPI CM_Get_Device_ID_ListW(_In_ PCWSTR pszFilter, _Out_writes_(BufferLen) PWCHAR Buffer, _In_ ULONG BufferLen, _In_ ULONG ulFlags)
Definition: cfgmgr.c:3804
CONFIGRET WINAPI CM_Get_Device_ID_List_SizeA(_Out_ PULONG pulLen, _In_opt_ PCSTR pszFilter, _In_ ULONG ulFlags)
Definition: cfgmgr.c:3944
CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyA(_In_ DEVINST dnDevInst, _In_ ULONG ulProperty, _Out_opt_ PULONG pulRegDataType, _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:3356
CONFIGRET WINAPI CMP_GetServerSideDeviceInstallFlags(_Out_ PULONG pulSSDIFlags, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:516
WORD WINAPI CM_Get_Version_Ex(_In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:5641
CONFIGRET WINAPI CM_Get_Device_Interface_List_ExW(_In_ LPGUID InterfaceClassGuid, _In_opt_ DEVINSTID_W pDeviceID, _Out_writes_(BufferLen) PWCHAR Buffer, _In_ ULONG BufferLen, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:4377
CONFIGRET WINAPI CM_Enable_DevNode_Ex(_In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:1927
CONFIGRET WINAPI CM_Get_Res_Des_Data_Size_Ex(_Out_ PULONG pulSize, _In_ RES_DES rdResDes, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:5450
CONFIGRET WINAPI CM_Set_HW_Prof_Flags_ExA(_In_ DEVINSTID_A szDevInstName, _In_ ULONG ulConfig, _In_ ULONG ulValue, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:8141
struct _LOG_CONF_INFO LOG_CONF_INFO
CONFIGRET WINAPI CM_Set_HW_Prof_Flags_ExW(_In_ DEVINSTID_W szDevInstName, _In_ ULONG ulConfig, _In_ ULONG ulValue, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
Definition: cfgmgr.c:8175
struct _CONFLICT_DATA CONFLICT_DATA
CONFIGRET WINAPI CM_Get_DevNode_Custom_PropertyW(_In_ DEVINST dnDevInst, _In_ PCWSTR pszCustomPropertyName, _Out_opt_ PULONG pulRegDataType, _Out_writes_bytes_opt_(*pulLength) PVOID Buffer, _Inout_ PULONG pulLength, _In_ ULONG ulFlags)
Definition: cfgmgr.c:3160
Definition: bufpool.h:45
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:175
#define ERROR_SUCCESS
Definition: deptool.c:10
#define MAX_DEVICE_ID_LEN
Definition: devaction.c:40
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define MAX_GUID_STRING_LEN
Definition: apphelp.c:29
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
LONG WINAPI RegConnectRegistryW(LPCWSTR lpMachineName, HKEY hKey, PHKEY phkResult)
Definition: reg.c:874
#define CloseHandle
Definition: compat.h:739
#define wcschr
Definition: compat.h:17
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
#define MAX_PATH
Definition: compat.h:34
#define HeapFree(x, y, z)
Definition: compat.h:735
#define lstrcpyW
Definition: compat.h:749
#define WideCharToMultiByte
Definition: compat.h:111
#define MultiByteToWideChar
Definition: compat.h:110
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define lstrlenW
Definition: compat.h:750
static DWORD DWORD * dwLength
Definition: fusion.c:86
LPWSTR WINAPI pSetupMultiByteToUnicode(LPCSTR lpMultiByteStr, UINT uCodePage)
Definition: misc.c:281
LPVOID WINAPI MyMalloc(DWORD dwSize)
Definition: misc.c:147
DWORD WINAPI pSetupCaptureAndConvertAnsiArg(LPCSTR pSrc, LPWSTR *pDst)
Definition: misc.c:574
BOOL WINAPI pSetupIsUserAdmin(VOID)
Definition: misc.c:1817
VOID WINAPI MyFree(LPVOID lpMem)
Definition: misc.c:128
DWORD WINAPI pSetupStringFromGuid(LPGUID lpGUID, PWSTR pString, DWORD dwStringLen)
Definition: misc.c:1775
RPC_STATUS PnpBindRpc(LPCWSTR pszMachine, RPC_BINDING_HANDLE *BindingHandle)
Definition: rpc.c:28
BOOL PnpGetLocalHandles(RPC_BINDING_HANDLE *BindingHandle, HSTRING_TABLE *StringTable)
Definition: rpc.c:66
RPC_STATUS PnpUnbindRpc(RPC_BINDING_HANDLE *BindingHandle)
Definition: rpc.c:53
HSTRING_TABLE WINAPI pSetupStringTableInitialize(VOID)
Definition: stringtable.c:54
DWORD WINAPI pSetupStringTableAddString(HSTRING_TABLE hStringTable, LPWSTR lpString, DWORD dwFlags)
Definition: stringtable.c:196
LPWSTR WINAPI pSetupStringTableStringFromId(HSTRING_TABLE hStringTable, DWORD dwId)
Definition: stringtable.c:722
VOID WINAPI pSetupStringTableDestroy(HSTRING_TABLE hStringTable)
Definition: stringtable.c:145
BOOL WINAPI pSetupStringTableStringFromIdEx(HSTRING_TABLE hStringTable, DWORD dwId, LPWSTR lpBuffer, LPDWORD lpBufferLength)
Definition: stringtable.c:760
#define INFINITE
Definition: serial.h:102
#define InsertTailList(ListHead, Entry)
#define IsListEmpty(ListHead)
Definition: env_spec_w32.h:954
#define RemoveHeadList(ListHead)
Definition: env_spec_w32.h:964
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
#define _SEH2_END
Definition: filesup.c:22
#define _SEH2_TRY
Definition: filesup.c:19
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
FxAutoRegKey hKey
Status
Definition: gdiplustypes.h:25
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
unsigned long long DWORDLONG
Definition: intsafe.h:93
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_a
Definition: kernel32.h:31
#define debugstr_w
Definition: kernel32.h:32
#define REG_SZ
Definition: layer.c:22
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static PVOID ptr
Definition: dispmode.c:27
static HANDLE hEvent
Definition: comm.c:54
ULONGLONG * PDWORDLONG
Definition: ms-dtyp.idl:93
#define _Out_opt_
Definition: ms_sal.h:346
#define _In_reads_bytes_(size)
Definition: ms_sal.h:321
#define _Inout_
Definition: ms_sal.h:378
#define _Out_writes_bytes_(size)
Definition: ms_sal.h:350
#define _Out_writes_(size)
Definition: ms_sal.h:348
#define _Out_writes_opt_(size)
Definition: ms_sal.h:349
#define _Out_
Definition: ms_sal.h:345
#define _In_
Definition: ms_sal.h:308
#define _In_reads_bytes_opt_(size)
Definition: ms_sal.h:322
#define _In_opt_
Definition: ms_sal.h:309
#define _Out_writes_bytes_opt_(size)
Definition: ms_sal.h:351
_In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Reserved_ ULONG _In_opt_ PUNICODE_STRING _In_ ULONG _Out_opt_ PULONG Disposition
Definition: cmfuncs.h:56
#define SYNCHRONIZE
Definition: nt_native.h:61
#define REG_BINARY
Definition: nt_native.h:1496
#define REG_MULTI_SZ
Definition: nt_native.h:1501
#define REG_NONE
Definition: nt_native.h:1492
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
#define UNICODE_NULL
#define L(x)
Definition: ntvdm.h:50
BYTE * PBYTE
Definition: pedump.c:66
long LONG
Definition: pedump.c:60
struct _PNP_CONFLICT_LIST PNP_CONFLICT_LIST
const unsigned long PNP_MAX_GUID_STRING_LEN
Definition: pnp.idl:12
unsigned long PNP_RPC_BUFFER_SIZE
Definition: pnp.idl:34
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:34
#define RPC_S_OK
Definition: rpcnterr.h:22
RPC_STATUS WINAPI UuidToStringW(UUID *Uuid, RPC_WSTR *StringUuid)
Definition: rpcrt4_main.c:540
RPC_STATUS WINAPI RpcStringFreeW(RPC_WSTR *String)
Definition: rpcrt4_main.c:175
RPC_STATUS WINAPI UuidFromStringW(RPC_WSTR s, UUID *uuid)
Definition: rpcrt4_main.c:614
#define REG_DWORD
Definition: sdbapi.c:596
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define RpcEndExcept
Definition: rpc.h:128
#define RpcTryExcept
Definition: rpc.h:126
#define RpcExcept(expr)
Definition: rpc.h:127
long RPC_STATUS
Definition: rpc.h:52
#define RpcExceptionCode()
Definition: rpc.h:132
#define SP_MAX_MACHINENAME_LENGTH
Definition: setupapi.h:27
#define TRACE(s)
Definition: solgame.cpp:4
ULONG HWPI_ulHWProfile
Definition: cfgmgr32.h:560
DWORD HWPI_dwFlags
Definition: cfgmgr32.h:562
WCHAR HWPI_szFriendlyName[MAX_PROFILE_LEN]
Definition: cfgmgr32.h:561
ULONG ulMagic
Definition: cfgmgr.c:102
PPNP_CONFLICT_LIST pConflictList
Definition: cfgmgr.c:103
LIST_ENTRY ListHead
Definition: cfgmgr.c:95
DWORDLONG ullEnd
Definition: cfgmgr.c:88
DWORDLONG ullStart
Definition: cfgmgr.c:87
struct _INTERNAL_RANGE_LIST * pRangeList
Definition: cfgmgr.c:86
LIST_ENTRY ListEntry
Definition: cfgmgr.c:85
Definition: typedefs.h:120
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
ULONG ulTag
Definition: cfgmgr.c:68
ULONG ulType
Definition: cfgmgr.c:67
DEVINST dnDevInst
Definition: cfgmgr.c:66
ULONG ulMagic
Definition: cfgmgr.c:65
WCHAR szMachineName[SP_MAX_MACHINENAME_LENGTH]
Definition: cfgmgr.c:56
HSTRING_TABLE StringTable
Definition: cfgmgr.c:58
RPC_BINDING_HANDLE BindingHandle
Definition: cfgmgr.c:57
BOOL bLocal
Definition: cfgmgr.c:59
ULONG ulMagic
Definition: cfgmgr.c:76
PVOID hNotifyHandle
Definition: cfgmgr.c:77
DWORD ConflictsListed
Definition: pnp.idl:240
HANDLE WINAPI DECLSPEC_HOTPATCH OpenEventW(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN LPCWSTR lpName)
Definition: synch.c:682
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:790
BOOL WINAPI DECLSPEC_HOTPATCH ReleaseMutex(IN HANDLE hMutex)
Definition: synch.c:618
_In_ ULONG _Out_ HANDLE * BindingHandle
Definition: tdikrnl.h:1147
#define wchar_t
Definition: wchar.h:102
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
uint16_t * PWSTR
Definition: typedefs.h:56
uint32_t * PULONG
Definition: typedefs.h:59
char * PSTR
Definition: typedefs.h:51
const uint16_t * PCWSTR
Definition: typedefs.h:57
uint32_t DWORD_PTR
Definition: typedefs.h:65
unsigned char * LPBYTE
Definition: typedefs.h:53
int32_t INT
Definition: typedefs.h:58
const char * PCSTR
Definition: typedefs.h:52
#define IN
Definition: typedefs.h:39
uint16_t * PWCHAR
Definition: typedefs.h:56
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
char * PCHAR
Definition: typedefs.h:51
_In_z_ PCWSTR _In_ ULONG ulType
Definition: ntuser.h:43
#define CMP_MAGIC
Definition: userinit.c:29
int ret
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT Version
Definition: wdffdo.h:469
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY _In_ WDF_INTERRUPT_PRIORITY Priority
Definition: wdfinterrupt.h:655
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
Definition: wdfmemory.h:254
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
Definition: wdfobject.h:762
SERVICE_STATUS_HANDLE hServiceStatus
Definition: main.c:10
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1412
#define ZeroMemory
Definition: winbase.h:1712
#define CreateMutex
Definition: winbase.h:3756
DWORD WINAPI GetCurrentProcessId(void)
Definition: proc.c:1158
#define WAIT_FAILED
Definition: winbase.h:413
_In_ DWORD nLength
Definition: wincon.h:473
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD dwTimeout
Definition: wincrypt.h:6081
_In_ ULONG _In_ ULONG ulTag
Definition: winddi.h:3942
_Check_return_ _Out_ PULONG pulSize
Definition: winddi.h:2120
BOOL * PBOOL
Definition: windef.h:161
#define WINAPI
Definition: msvc.h:6
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
ACCESS_MASK REGSAM
Definition: winreg.h:69
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
HDEVNOTIFY * PHDEVNOTIFY
Definition: winuser.h:2920
_In_ CONST GUID * InterfaceClassGuid
Definition: iofuncs.h:1136
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
unsigned char BYTE
Definition: xxhash.c:193