53 DPRINT(
"RpcServerThread() called\n");
64 RegisteredProtSeq =
TRUE;
66 DPRINT1(
"RpcServerUseProtseqEpW() failed (Status %lx)\n",
Status);
75 RegisteredProtSeq =
TRUE;
77 DPRINT1(
"RpcServerUseProtseqEpW() failed (Status %lx)\n",
Status);
80 if (RegisteredProtSeq ==
FALSE)
88 DPRINT1(
"RpcServerRegisterIf() failed (Status %lx)\n",
Status);
102 DPRINT1(
"*** Other devices won't be installed correctly. If something\n");
103 DPRINT1(
"*** doesn't work, try to reboot to get a new chance.\n");
105 DPRINT(
"RpcServerThread() done\n");
164 wcscpy(szLocalDeviceInstanceID, pszDeviceInstanceID);
170 lpEnumerator = szLocalDeviceInstanceID;
186 if (lpEnumerator !=
NULL)
187 wcscpy(pszEnumerator, lpEnumerator);
189 if (lpDevice !=
NULL)
190 wcscpy(pszDevice, lpDevice);
192 if (lpInstance !=
NULL)
193 wcscpy(pszInstance, lpInstance);
208 DPRINT1(
"ClearDeviceStatus(%S 0x%lx 0x%lx)\n",
209 pszDeviceID, ulStatus, ulProblem);
218 (
PVOID)&PlugPlayData,
238 DPRINT(
"GetDeviceStatus(%S %p %p)\n",
239 pszDeviceID, pulStatus, pulProblem);
246 (
PVOID)&PlugPlayData,
250 *pulStatus = PlugPlayData.DeviceStatus;
251 *pulProblem = PlugPlayData.DeviceProblem;
273 DPRINT1(
"SetDeviceStatus(%S 0x%lx 0x%lx)\n",
274 pszDeviceID, ulStatus, ulProblem);
283 (
PVOID)&PlugPlayData,
304 DPRINT1(
"DisableDeviceInstance(%S %p %p %lu)\n",
305 pszDeviceInstance, pVetoType, pszVetoName, ulNameLength);
310 QueryRemoveData.
Flags = 0;
312 QueryRemoveData.
VetoName = pszVetoName;
324 if (pVetoType !=
NULL)
325 *pVetoType = QueryRemoveData.
VetoType;
343 INT nPartLength[3] = {0, 0, 0};
347 DPRINT(
"IsValidDeviceInstanceID(%S)\n",
348 pszDeviceInstanceID);
350 if (pszDeviceInstanceID ==
NULL)
352 DPRINT(
"Device instance ID is NULL!\n");
356 p = pszDeviceInstanceID;
364 DPRINT(
"Too many separators: %d\n", nParts);
370 nPartLength[nParts]++;
385 DPRINT(
"Invalid number of separtors: %d\n", nParts);
389 if ((nPartLength[0] == 0) ||
390 (nPartLength[1] == 0) ||
391 (nPartLength[2] == 0))
393 DPRINT(
"Invalid part lengths: %d %d %d\n",
394 nPartLength[0], nPartLength[1], nPartLength[2]);
398 DPRINT(
"Valid device instance ID!\n");
421 DWORD ulStatus, ulProblem;
438 wcscpy(szKeyName,
L"System\\CurrentControlSet\\Enum\\");
439 wcscat(szKeyName, pszDeviceID);
482 switch (ulLogConfType)
485 pszValueName =
L"BootConfig";
490 pszValueName =
L"AllocConfig";
495 pszValueName =
L"ForcedConfig";
500 pszValueName =
L"FilteredConfigVector";
505 pszValueName =
L"BasicConfigVector";
510 pszValueName =
L"OverrideConfigVector";
515 DPRINT1(
"Unsupported configuration type!\n");
532 if (*ppBuffer ==
NULL)
557 DPRINT1(
"PNP_NOTIFY_HANDLE_rundown(%p)\n", pHandle);
594 DPRINT(
"PNP_GetVersion(%p %p)\n",
614 DPRINT(
"PNP_GetGlobalState(%p %p 0x%08lx)\n",
631 DPRINT(
"PNP_InitDetection(%p)\n",
652 DPRINT(
"PNP_ReportLogOn(%p %u, %u)\n",
704 DPRINT(
"PNP_ValidateDeviceInstance(%p %S 0x%08lx)\n",
716 DPRINT(
"Could not open the Device Key!\n");
724 if (hDeviceKey !=
NULL)
727 DPRINT(
"PNP_ValidateDeviceInstance() done (returns %lx)\n",
ret);
745 DPRINT(
"PNP_GetRootDeviceInstance(%p %S %lu)\n",
764 DPRINT(
"PNP_GetRootDeviceInstance() done (returns %lx)\n",
ret);
775 DWORD ulRelationship,
788 DPRINT(
"PNP_GetRelatedDeviceInstance(%p %lu %S %p %p 0x%lx)\n",
789 hBinding, ulRelationship, pDeviceID, pRelatedDeviceId,
795 if (ulRelationship == PNP_GET_PARENT_DEVICE_INSTANCE)
815 else if (ulRelationship == PNP_GET_SIBLING_DEVICE_INSTANCE)
825 PlugPlayData.
Relation = ulRelationship;
831 (
PVOID)&PlugPlayData,
838 DPRINT(
"PNP_GetRelatedDeviceInstance() done (returns %lx)\n",
ret);
841 DPRINT(
"RelatedDevice: %wZ\n", &PlugPlayData.RelatedDeviceInstance);
867 DPRINT(
"PNP_EnumerateSubKeys(%p %lu %lu %p %lu %p 0x%08lx)\n",
869 pulRequiredLen, ulFlags);
873 case PNP_ENUMERATOR_SUBKEYS:
877 case PNP_CLASS_SUBKEYS:
885 *pulRequiredLen = ulLength;
903 DPRINT(
"PNP_EnumerateSubKeys() done (returns %lx)\n",
ret);
942 PlugPlayData.
Buffer = pszBuffer;
945 (
PVOID)&PlugPlayData,
949 *pulLength = PlugPlayData.BufferSize /
sizeof(
WCHAR);
967 WCHAR szPathBuffer[512];
970 DWORD dwValues,
dwSize, dwIndex, dwUsedLength, dwPathLength;
977 L"System\\CurrentControlSet\\Services",
983 DPRINT(
"Failed to open the services key (Error %lu)\n", dwError);
994 DPRINT(
"Failed to open the service key (Error %lu)\n", dwError);
1006 DPRINT(
"Failed to open the service enum key (Error %lu)\n", dwError);
1021 DPRINT(
"RegQueryValueExW failed (Error %lu)\n", dwError);
1025 DPRINT(
"dwValues %lu\n", dwValues);
1030 for (dwIndex = 0; dwIndex < dwValues; dwIndex++)
1034 dwSize =
sizeof(szPathBuffer);
1044 DPRINT(
"Path: %S\n", szPathBuffer);
1046 dwPathLength =
wcslen(szPathBuffer) + 1;
1047 if (dwUsedLength + dwPathLength + 1 > *pulLength)
1053 wcscpy(pPtr, szPathBuffer);
1054 dwUsedLength += dwPathLength;
1055 pPtr += dwPathLength;
1064 if (hServiceKey !=
NULL)
1071 *pulLength = dwUsedLength + 1;
1087 WCHAR szPathBuffer[512];
1089 DWORD dwInstanceLength, dwPathLength, dwUsedLength;
1090 DWORD dwIndex, dwError;
1102 DPRINT(
"Failed to open the device key (Error %lu)\n", dwError);
1109 for (dwIndex = 0; ; dwIndex++)
1123 wsprintf(szPathBuffer,
L"%s\\%s", pszDevice, szInstanceBuffer);
1124 DPRINT(
"Path: %S\n", szPathBuffer);
1126 dwPathLength =
wcslen(szPathBuffer) + 1;
1127 if (dwUsedLength + dwPathLength + 1 > *pulLength)
1133 wcscpy(pPtr, szPathBuffer);
1134 dwUsedLength += dwPathLength;
1135 pPtr += dwPathLength;
1143 *pulLength = dwUsedLength + 1;
1158 WCHAR szPathBuffer[512];
1159 HKEY hEnumeratorKey;
1161 DWORD dwIndex, dwDeviceLength, dwUsedLength, dwRemainingLength, dwPathLength;
1173 DPRINT(
"Failed to open the enumerator key (Error %lu)\n", dwError);
1178 dwRemainingLength = *pulLength;
1181 for (dwIndex = 0; ; dwIndex++)
1195 wsprintf(szPathBuffer,
L"%s\\%s", pszEnumerator, szDeviceBuffer);
1196 DPRINT(
"Path: %S\n", szPathBuffer);
1198 dwPathLength = dwRemainingLength;
1205 dwUsedLength += dwPathLength - 1;
1206 dwRemainingLength -= dwPathLength - 1;
1207 pPtr += dwPathLength - 1;
1213 *pulLength = dwUsedLength + 1;
1229 DWORD dwIndex, dwEnumeratorLength, dwUsedLength, dwRemainingLength, dwPathLength;
1234 dwRemainingLength = *pulLength;
1237 for (dwIndex = 0; ; dwIndex++)
1243 &dwEnumeratorLength,
1248 dwPathLength = dwRemainingLength;
1255 dwUsedLength += dwPathLength - 1;
1256 dwRemainingLength -= dwPathLength - 1;
1257 pPtr += dwPathLength - 1;
1261 *pulLength = dwUsedLength + 1;
1284 DPRINT(
"PNP_GetDeviceList(%p %S %p %p 0x%08lx)\n",
1290 if (pulLength ==
NULL)
1294 (pszFilter ==
NULL))
1379 (
PVOID)&PlugPlayData,
1383 *pulLength = PlugPlayData.BufferSize /
sizeof(
WCHAR);
1407 L"System\\CurrentControlSet\\Services",
1413 DPRINT(
"Failed to open the services key (Error %lu)\n", dwError);
1424 DPRINT(
"Failed to open the service key (Error %lu)\n", dwError);
1436 DPRINT(
"Failed to open the service enum key (Error %lu)\n", dwError);
1451 DPRINT(
"RegQueryValueExW failed (Error %lu)\n", dwError);
1470 DPRINT(
"RegQueryInfoKeyW failed (Error %lu)\n", dwError);
1474 DPRINT(
"dwValues %lu dwMaxValueLength %lu\n", dwValues, dwMaxValueLength /
sizeof(
WCHAR));
1477 *pulLength = dwValues * dwMaxValueLength /
sizeof(
WCHAR) + 2;
1483 if (hServiceKey !=
NULL)
1500 DWORD dwSubKeys, dwMaxSubKeyLength;
1511 DPRINT(
"Failed to open the device key (Error %lu)\n", dwError);
1530 DPRINT(
"RegQueryInfoKeyW failed (Error %lu)\n", dwError);
1532 dwMaxSubKeyLength = 0;
1539 *pulLength = dwSubKeys * (
wcslen(pszDevice) + 1 + dwMaxSubKeyLength + 1);
1552 WCHAR szPathBuffer[512];
1553 HKEY hEnumeratorKey;
1554 DWORD dwIndex, dwDeviceLength, dwBufferLength;
1568 DPRINT(
"Failed to open the enumerator key (Error %lu)\n", dwError);
1572 for (dwIndex = 0; ; dwIndex++)
1586 wsprintf(szPathBuffer,
L"%s\\%s", pszEnumerator, szDeviceBuffer);
1587 DPRINT(
"Path: %S\n", szPathBuffer);
1596 *pulLength += dwBufferLength;
1612 DWORD dwIndex, dwEnumeratorLength, dwBufferLength;
1616 for (dwIndex = 0; ; dwIndex++)
1622 &dwEnumeratorLength,
1633 *pulLength += dwBufferLength;
1654 DPRINT(
"PNP_GetDeviceListSize(%p %S %p 0x%08lx)\n",
1655 hBinding, pszFilter, pulLength, ulFlags);
1660 if (pulLength ==
NULL)
1664 (pszFilter ==
NULL))
1731 DPRINT(
"PNP_GetDepth(%p %S %p 0x%08lx)\n",
1732 hBinding, pszDeviceID, pulDepth, ulFlags);
1741 (
PVOID)&PlugPlayData,
1745 *pulDepth = PlugPlayData.Depth;
1752 DPRINT(
"PNP_GetDepth() done (returns %lx)\n",
ret);
1765 DWORD *pulRegDataType,
1780 DPRINT(
"PNP_GetDeviceRegProp(%p %S %lu %p %p %p %p 0x%08lx)\n",
1782 pulTransferLen, pulLength, ulFlags);
1784 if (pulTransferLen ==
NULL || pulLength ==
NULL)
1803 if (*pulLength < *pulTransferLen)
1804 *pulLength = *pulTransferLen;
1806 *pulTransferLen = 0;
1811 lpValueName =
L"DeviceDesc";
1815 lpValueName =
L"HardwareID";
1819 lpValueName =
L"CompatibleIDs";
1823 lpValueName =
L"Service";
1827 lpValueName =
L"Class";
1831 lpValueName =
L"ClassGUID";
1835 lpValueName =
L"Driver";
1839 lpValueName =
L"ConfigFlags";
1843 lpValueName =
L"Mfg";
1847 lpValueName =
L"FriendlyName";
1851 lpValueName =
L"LocationInformation";
1856 *pulRegDataType =
REG_SZ;
1860 lpValueName =
L"Capabilities";
1868 lpValueName =
L"UpperFilters";
1872 lpValueName =
L"LowerFilters";
1892 *pulRegDataType =
REG_SZ;
1896 lpValueName =
L"Security";
1900 lpValueName =
L"DeviceType";
1904 lpValueName =
L"Exclusive";
1908 lpValueName =
L"DeviceCharacteristics";
1917 lpValueName =
L"UINumberDescFormat";
1936 lpValueName =
L"RemovalPolicy";
1945 #if (WINVER >= _WIN32_WINNT_WS03) 1952 #if (WINVER >= _WIN32_WINNT_WIN7) 1955 *pulRegDataType =
REG_SZ;
1964 DPRINT(
"Value name: %S\n", lpValueName);
2010 (
PVOID)&PlugPlayData,
2014 *pulLength = PlugPlayData.BufferSize;
2029 DPRINT(
"PNP_GetDeviceRegProp() done (returns %lx)\n",
ret);
2054 DPRINT(
"PNP_SetDeviceRegProp(%p %S %lu %lu %p %lu 0x%08lx)\n",
2064 lpValueName =
L"DeviceDesc";
2068 lpValueName =
L"HardwareID";
2072 lpValueName =
L"CompatibleIDs";
2076 lpValueName =
L"Service";
2080 lpValueName =
L"Class";
2084 lpValueName =
L"ClassGUID";
2088 lpValueName =
L"Driver";
2092 lpValueName =
L"ConfigFlags";
2096 lpValueName =
L"Mfg";
2100 lpValueName =
L"FriendlyName";
2104 lpValueName =
L"LocationInformation";
2108 lpValueName =
L"UpperFilters";
2112 lpValueName =
L"LowerFilters";
2116 lpValueName =
L"Security";
2120 lpValueName =
L"DeviceType";
2124 lpValueName =
L"Exclusive";
2128 lpValueName =
L"DeviceCharacteristics";
2132 lpValueName =
L"UINumberDescFormat";
2136 lpValueName =
L"RemovalPolicy";
2143 DPRINT(
"Value name: %S\n", lpValueName);
2171 DPRINT(
"PNP_SetDeviceRegProp() done (returns %lx)\n",
ret);
2186 WCHAR szClassGuid[40];
2187 WCHAR szClassInstance[5];
2189 HKEY hClassInstanceKey;
2190 ULONG ulTransferLength, ulDataLength;
2191 DWORD dwDataType, dwDisposition,
i;
2195 DPRINT(
"PNP_GetClassInstance(%p %S %p %lu)\n",
2196 hBinding, pDeviceId, pszClassInstance, ulLength);
2201 ulTransferLength = ulLength;
2206 (
BYTE *)pszClassInstance,
2213 ulTransferLength =
sizeof(szClassGuid);
2214 ulDataLength =
sizeof(szClassGuid);
2219 (
BYTE *)szClassGuid,
2225 DPRINT1(
"PNP_GetDeviceRegProp() failed (Error %lu)\n",
ret);
2236 DPRINT1(
"RegOpenKeyExW() failed (Error %lu)\n", dwError);
2241 for (
i = 0;
i < 10000;
i++)
2265 ulDataLength = (
wcslen(pszClassInstance) + 1) *
sizeof(
WCHAR);
2270 (
BYTE *)pszClassInstance,
2275 DPRINT1(
"PNP_SetDeviceRegProp() failed (Error %lu)\n",
ret);
2286 if (hDeviceClassKey !=
NULL)
2309 DPRINT(
"PNP_CreateKey(%p %S 0x%lx 0x%08lx)\n",
2310 hBinding, pszSubKey, samDesired, ulFlags);
2330 L"Device Parameters",
2347 if (hParametersKey !=
NULL)
2350 if (hDeviceKey !=
NULL)
2377 DWORD *pulClassCount,
2386 DPRINT(
"PNP_GetClassCount(%p %p 0x%08lx)\n",
2435 DPRINT(
"PNP_GetClassName(%p %S %p %p 0x%08lx)\n",
2438 lstrcpyW(szKeyName,
L"System\\CurrentControlSet\\Control\\Class\\");
2469 DPRINT(
"PNP_GetClassName() done (returns %lx)\n",
ret);
2487 DPRINT(
"PNP_DeleteClassKey(%p %S 0x%08lx)\n",
2501 DPRINT(
"PNP_DeleteClassKey() done (returns %lx)\n",
ret);
2512 LPWSTR pszInterfaceDevice,
2513 GUID *AliasInterfaceGuid,
2514 LPWSTR pszAliasInterfaceDevice,
2541 DPRINT(
"PNP_GetInterfaceDeviceList(%p %p %S %p %p 0x%08lx)\n",
2550 PlugPlayData.
Flags = ulFlags;
2556 (
PVOID)&PlugPlayData,
2560 *pulLength = PlugPlayData.BufferSize;
2567 DPRINT(
"PNP_GetInterfaceDeviceList() done (returns %lx)\n",
ret);
2588 DPRINT(
"PNP_GetInterfaceDeviceListSize(%p %p %p %S 0x%08lx)\n",
2600 PlugPlayData.
Flags = ulFlags;
2603 (
PVOID)&PlugPlayData,
2607 *pulLen = PlugPlayData.BufferSize;
2614 DPRINT(
"PNP_GetInterfaceDeviceListSize() done (returns %lx)\n",
ret);
2642 LPWSTR pszInterfaceDevice,
2657 DWORD *pulRegDataType,
2671 DPRINT(
"PNP_GetClassRegProp(%p %S %lu %p %p %p %p 0x%08lx)\n",
2672 hBinding, pszClassGuid, ulProperty, pulRegDataType,
2673 Buffer, pulTransferLen, pulLength, ulFlags);
2675 if (pulTransferLen ==
NULL || pulLength ==
NULL)
2687 if (*pulLength < *pulTransferLen)
2688 *pulLength = *pulTransferLen;
2690 *pulTransferLen = 0;
2695 lpValueName =
L"Security";
2699 lpValueName =
L"DeviceType";
2703 lpValueName =
L"Exclusive";
2707 lpValueName =
L"DeviceCharacteristics";
2715 DPRINT(
"Value name: %S\n", lpValueName);
2762 *pulTransferLen = *pulLength;
2764 if (hPropKey !=
NULL)
2767 if (hInstKey !=
NULL)
2770 DPRINT(
"PNP_GetClassRegProp() done (returns %lx)\n",
ret);
2796 DPRINT(
"PNP_SetClassRegProp(%p %S %lu %lu %p %lu 0x%08lx)\n",
2797 hBinding, pszClassGuid, ulProperty, ulDataType,
2798 Buffer, ulLength, ulFlags);
2806 lpValueName =
L"Security";
2810 lpValueName =
L"DeviceType";
2814 lpValueName =
L"Exclusive";
2818 lpValueName =
L"DeviceCharacteristics";
2870 if (hPropKey !=
NULL)
2873 if (hInstKey !=
NULL)
2889 HKEY hKeyEnumerator;
2943 DPRINT1(
"Instance %S already exists!\n", szInstance);
2970 DWORD dwPhantomValue = 1;
2975 (
PBYTE)&dwPhantomValue,
2976 sizeof(dwPhantomValue));
3008 DWORD dwInstanceNumber;
3017 dwInstanceNumber = 0;
3020 if (dwInstanceNumber >= 10000)
3023 swprintf(szGeneratedInstance,
L"Root\\%ls\\%04lu",
3024 pszDeviceID, dwInstanceNumber);
3036 if (
wcslen(szGeneratedInstance) > ulLength)
3042 wcscpy(pszDeviceID, szGeneratedInstance);
3055 LPWSTR pszParentDeviceID,
3065 DPRINT(
"PNP_CreateDevInst(%p %S %S %lu 0x%08lx)\n",
3066 hBinding, pszParentDeviceID, pszDeviceID, ulLength, ulFlags);
3071 if (pszDeviceID ==
NULL || pszParentDeviceID ==
NULL)
3124 sizeof(ControlData));
3147 DPRINT(
"PNP_CreateDevInst() done (returns %lx)\n",
ret);
3161 DWORD ulStatus, ulProblem;
3166 DPRINT1(
"SetupDeviceInstance(%S 0x%08lx)\n",
3167 pszDeviceInstance, ulMinorAction);
3187 dwSize =
sizeof(dwDisableCount);
3195 (dwDisableCount > 0))
3229 if (hDeviceKey !=
NULL)
3244 DPRINT(
"Enable device instance %S\n", pszDeviceInstance);
3264 DPRINT1(
"ReenumerateDeviceInstance(%S 0x%08lx)\n",
3265 pszDeviceInstance, ulMinorAction);
3272 DPRINT1(
"CM_REENUMERATE_RETRY_INSTALLATION not implemented!\n");
3277 EnumerateDeviceData.
Flags = 0;
3280 &EnumerateDeviceData,
3294 DWORD ulMajorAction,
3295 DWORD ulMinorAction,
3296 LPWSTR pszDeviceInstance1,
3297 LPWSTR pszDeviceInstance2)
3303 DPRINT(
"PNP_DeviceInstanceAction(%p %lu 0x%08lx %S %S)\n",
3304 hBinding, ulMajorAction, ulMinorAction,
3305 pszDeviceInstance1, pszDeviceInstance2);
3307 switch (ulMajorAction)
3309 case PNP_DEVINST_SETUP:
3314 case PNP_DEVINST_ENABLE:
3318 case PNP_DEVINST_REENUMERATE:
3324 DPRINT1(
"Unknown device action %lu: not implemented\n", ulMajorAction);
3328 DPRINT(
"PNP_DeviceInstanceAction() done (returns %lx)\n",
ret);
3344 DWORD ulDataType, ulTransferLength, ulLength;
3345 DWORD ulCapabilities, ulConfigFlags;
3351 DPRINT(
"PNP_GetDeviceStatus(%p %S %p %p 0x%08lx)\n",
3352 hBinding, pDeviceID, pulStatus, pulProblem, ulFlags);
3357 if ((pulStatus ==
NULL) || (pulProblem ==
NULL))
3368 ulTransferLength =
sizeof(ulCapabilities);
3369 ulLength =
sizeof(ulCapabilities);
3374 (
PBYTE)&ulCapabilities,
3385 ulTransferLength =
sizeof(ulConfigFlags);
3386 ulLength =
sizeof(ulConfigFlags);
3391 (
PBYTE)&ulConfigFlags,
3421 ULONG ulOldStatus, ulOldProblem;
3426 DPRINT1(
"PNP_SetDeviceProblem(%p %S %lu 0x%08lx)\n",
3427 hBinding, pDeviceID, ulProblem, ulFlags);
3442 (ulOldProblem != 0) &&
3443 (ulOldProblem != ulProblem))
3478 DPRINT1(
"PNP_DisableDevInst(%p %S %p %p %lu 0x%08lx)\n",
3479 hBinding, pDeviceID, pVetoType, pszVetoName, ulNameLength, ulFlags);
3515 lpPtr = lpDeviceIdList;
3519 if (0 ==
_wcsicmp(lpPtr, lpDeviceId))
3537 dwLen =
wcslen(lpDeviceId);
3538 dwPos = (*lpDeviceIdListSize /
sizeof(
WCHAR)) - 1;
3540 wcscpy(&lpDeviceIdList[dwPos], lpDeviceId);
3542 dwPos += (dwLen + 1);
3544 lpDeviceIdList[dwPos] = 0;
3546 *lpDeviceIdListSize = dwPos *
sizeof(
WCHAR);
3562 DWORD dwDeviceIdListSize;
3563 DWORD dwNewDeviceIdSize;
3568 DPRINT(
"PNP_AddID(%p %S %S 0x%08lx)\n",
3569 hBinding, pszDeviceID, pszID, ulFlags);
3577 DPRINT(
"Failed to open the device key!\n");
3590 DPRINT(
"Failed to query the desired ID string!\n");
3595 dwNewDeviceIdSize =
lstrlenW(pszDeviceID);
3596 if (!dwNewDeviceIdSize)
3602 dwDeviceIdListSize += (dwNewDeviceIdSize + 2) *
sizeof(
WCHAR);
3605 if (!pszDeviceIdList)
3607 DPRINT(
"Failed to allocate memory for the desired ID string!\n");
3619 DPRINT(
"Failed to query the desired ID string!\n");
3627 DPRINT(
"Device ID was found in the ID string!\n");
3642 DPRINT(
"Failed to set the desired ID string!\n");
3648 if (pszDeviceIdList)
3651 DPRINT(
"PNP_AddID() done (returns %lx)\n",
ret);
3665 DPRINT(
"PNP_RegisterDriver(%p %S 0x%lx)\n",
3695 DPRINT1(
"PNP_QueryRemove(%p %S %p %p %lu 0x%lx)\n",
3696 hBinding, pszDeviceID, pVetoType, pszVetoName,
3697 ulNameLength, ulFlags);
3706 if (pVetoType !=
NULL)
3709 if (pszVetoName !=
NULL && ulNameLength > 0)
3715 PlugPlayData.
VetoName = pszVetoName;
3721 sizeof(PlugPlayData));
3744 DPRINT1(
"PNP_RequestDeviceEject(%p %S %p %p %lu 0x%lx)\n",
3745 hBinding, pszDeviceID, pVetoType, pszVetoName,
3746 ulNameLength, ulFlags);
3754 if (pVetoType !=
NULL)
3757 if (pszVetoName !=
NULL && ulNameLength > 0)
3763 PlugPlayData.
VetoName = pszVetoName;
3769 sizeof(PlugPlayData));
3792 DPRINT1(
"PNP_IsDockStationPresent(%p %p)\n",
3821 else if (dwValue != 0)
3827 DPRINT1(
"PNP_IsDockStationPresent() done (returns %lx)\n",
ret);
3857 szDockDeviceInstance,
3887 DPRINT(
"PNP_HwProfFlags() called\n");
3895 L"System\\CurrentControlSet\\HardwareProfiles\\Current\\System\\CurrentControlSet\\Enum");
3900 L"System\\CurrentControlSet\\HardwareProfiles\\%04lu\\System\\CurrentControlSet\\Enum",
3911 if (ulAction == PNP_GET_HWPROFFLAGS)
3937 else if (ulAction == PNP_SET_HWPROFFLAGS)
3956 DWORD ulProfileInfoSize,
3959 WCHAR szProfileName[5];
3963 DWORD dwDisposition;
3970 DPRINT(
"PNP_GetHwProfInfo() called\n");
3972 if (ulProfileInfoSize == 0)
3991 L"System\\CurrentControlSet\\Control\\IDConfigDB",
4007 L"Hardware Profiles",
4071 if (hKeyProfile !=
NULL)
4074 if (hKeyProfiles !=
NULL)
4077 if (hKeyConfig !=
NULL)
4091 DWORD *pulLogConfTag,
4105 DWORD ulLogConfType,
4120 DWORD ulLogConfType,
4121 DWORD *pulLogConfTag,
4125 DWORD RegDataType = 0;
4126 ULONG ulDataSize = 0;
4130 DPRINT(
"PNP_GetFirstLogConf(%p %S %lu %p 0x%08lx)\n",
4131 hBinding, pDeviceID, ulLogConfType, pulLogConfTag, ulFlags);
4133 if (pulLogConfTag ==
NULL)
4136 *pulLogConfTag = (
DWORD)0;
4148 DPRINT1(
"OpenConfigurationKey() failed (Error %lu)\n",
ret);
4160 DPRINT1(
"GetConfigurationData() failed (Error %lu)\n",
ret);
4165 DPRINT(
"Data size %lu\n", ulDataSize);
4166 if (ulDataSize == 0 || lpData ==
NULL)
4168 DPRINT1(
"No config data available!\n");
4176 DPRINT(
"REG_RESOURCE_LIST\n");
4181 DPRINT1(
"No resource descriptors!\n");
4186 DPRINT(
"lpData %p\n", lpData);
4190 DPRINT(
"Offset (Tag): 0x%08lx\n", *pulLogConfTag);
4194 DPRINT1(
"FIXME: REG_RESOURCE_REQUIREMENTS_LIST\n");
4204 if (hConfigKey !=
NULL)
4207 DPRINT(
"PNP_GetFirstLogConf() returns %lu\n",
ret);
4219 DWORD ulLogConfType,
4225 DWORD RegDataType = 0;
4226 ULONG ulDataSize = 0;
4230 DPRINT(
"PNP_GetNextLogConf(%p %S %lu %ul %p 0x%08lx)\n",
4231 hBinding, pDeviceID, ulLogConfType, ulCurrentTag, pulNextTag, ulFlags);
4233 if (pulNextTag ==
NULL)
4236 *pulNextTag = (
DWORD)0;
4248 DPRINT1(
"OpenConfigurationKey() failed (Error %lu)\n",
ret);
4260 DPRINT1(
"GetConfigurationData() failed (Error %lu)\n",
ret);
4265 DPRINT(
"Data size %lu\n", ulDataSize);
4267 if (ulDataSize == 0 || lpData ==
NULL)
4269 DPRINT1(
"No config data available!\n");
4277 DPRINT1(
"FIXME: REG_RESOURCE_LIST\n");
4284 DPRINT1(
"FIXME: REG_RESOURCE_REQUIREMENTS_LIST\n");
4294 if (hConfigKey !=
NULL)
4297 DPRINT(
"PNP_GetNextLogConf() returns %lu\n",
ret);
4326 DWORD ulLogConfType,
4328 DWORD *pulResourceTag,
4345 DWORD ulLogConfType,
4347 DWORD ulResourceTag,
4348 DWORD *pulPreviousResType,
4349 DWORD *pulPreviousResTag,
4364 DWORD ulLogConfType,
4366 DWORD ulResourceTag,
4367 DWORD *pulNextResType,
4368 DWORD *pulNextResTag,
4372 DWORD RegDataType = 0;
4373 ULONG ulDataSize = 0;
4377 DPRINT1(
"PNP_GetNextResDes(%p %S 0x%lx %lu %lu %ul %p %p 0x%08lx)\n",
4378 hBinding, pDeviceID, ulLogConfTag, ulLogConfType, ResourceID,
4379 ulResourceTag, pulNextResType, pulNextResTag, ulFlags);
4381 if (pulNextResType ==
NULL)
4384 *pulNextResType = 0;
4396 DPRINT1(
"OpenConfigurationKey() failed (Error %lu)\n",
ret);
4408 DPRINT1(
"GetConfigurationData() failed (Error %lu)\n",
ret);
4413 DPRINT1(
"Data size %lu\n", ulDataSize);
4415 if (ulDataSize == 0 || lpData ==
NULL)
4417 DPRINT1(
"No config data available!\n");
4425 DPRINT1(
"FIXME: REG_RESOURCE_LIST\n");
4432 DPRINT1(
"FIXME: REG_RESOURCE_REQUIREMENTS_LIST\n");
4442 if (hConfigKey !=
NULL)
4445 DPRINT1(
"PNP_GetNextResDes() returns %lu\n",
ret);
4458 DWORD ulLogConfType,
4460 DWORD ulResourceTag,
4477 DWORD ulLogConfType,
4479 DWORD ulResourceTag,
4495 DWORD ulLogConfType,
4498 DWORD ulResourceTag,
4517 BOOL *pbConflictDetected,
4520 DPRINT(
"PNP_DetectResourceConflict()\n");
4522 if (pbConflictDetected !=
NULL)
4523 *pbConflictDetected =
FALSE;
4552 DWORD ulHardwareProfile,
4609 BYTE *pNotificationFilter,
4610 DWORD ulNotificationFilterSize,
4620 DPRINT1(
"PNP_RegisterNotification(%p %lx '%S' %p %lu 0x%lx %p %lx %p)\n",
4621 hBinding, ulUnknown2, pszName, pNotificationFilter,
4622 ulNotificationFilterSize, ulFlags, pNotifyHandle, ulUnknown8, pulUnknown9);
4624 if (pNotifyHandle ==
NULL)
4627 *pNotifyHandle =
NULL;
4629 if (pNotificationFilter ==
NULL ||
4630 pulUnknown9 ==
NULL)
4642 DPRINT1(
"DBT_DEVTYP_DEVICEINTERFACE\n");
4650 if (pNotifyData ==
NULL)
4653 if (pszName !=
NULL)
4668 DPRINT(
"pNotifyData: %p\n", pNotifyData);
4673 DPRINT1(
"DBT_DEVTYP_HANDLE\n");
4680 if (ulFlags & DEVICE_NOTIFY_ALL_INTERFACE_CLASSES)
4702 DPRINT1(
"PNP_UnregisterNotification(%p %p)\n",
4713 *pNotifyHandle =
NULL;
4726 DWORD *pulRegDataType,
4739 DPRINT(
"PNP_GetCustomDevProp() called\n");
4741 if (pulTransferLen ==
NULL || pulLength ==
NULL)
4756 if (*pulLength < *pulTransferLen)
4757 *pulLength = *pulTransferLen;
4759 *pulTransferLen = 0;
4773 L"Device Parameters",
4804 *pulTransferLen = *pulLength;
4806 if (hParamKey !=
NULL)
4809 if (hDeviceKey !=
NULL)
4812 DPRINT(
"PNP_GetCustomDevProp() done (returns %lx)\n",
ret);
4852 DWORD *pulSSDIFlags,
4857 DPRINT1(
"PNP_GetServerSideDeviceInstallFlags(%p %p %lu)\n",
4860 if (pulSSDIFlags ==
NULL)
4880 LPWSTR PropertyCultureName,
4898 LPWSTR PropertyCultureName,
4918 LPWSTR PropertyCultureName,
#define CR_NO_SUCH_REGISTRY_KEY
DWORD WINAPI PNP_GetInterfaceDeviceList(handle_t hBinding, GUID *InterfaceGuid, LPWSTR pszDeviceID, BYTE *Buffer, PNP_RPC_BUFFER_SIZE *pulLength, DWORD ulFlags)
struct _CM_RESOURCE_LIST * PCM_RESOURCE_LIST
#define PNP_PROPERTY_POWER_DATA
static const WCHAR szName[]
IN PLARGE_INTEGER IN PLARGE_INTEGER PEPROCESS ProcessId
#define CR_INVALID_DEVINST
DWORD WINAPI PNP_GetDepth(handle_t hBinding, LPWSTR pszDeviceID, DWORD *pulDepth, DWORD ulFlags)
#define CM_DEVCAP_REMOVABLE
#define PROCESS_ALL_ACCESS
DWORD WINAPI PNP_DeleteRegistryKey(handle_t hBinding, LPWSTR pszDeviceID, LPWSTR pszParentKey, LPWSTR pszChildKey, DWORD ulFlags)
#define CM_REGISTER_DEVICE_DRIVER_BITS
unsigned long PNP_RPC_BUFFER_SIZE
DWORD WINAPI PNP_GetFirstLogConf(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfType, DWORD *pulLogConfTag, DWORD ulFlags)
#define ERROR_NO_MORE_ITEMS
DWORD WINAPI PNP_GetResDesDataSize(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfTag, DWORD ulLogConfType, RESOURCEID ResourceID, DWORD ulResourceTag, DWORD *pulSize, DWORD ulFlags)
IN BOOLEAN OUT PSTR Buffer
#define CM_CREATE_DEVNODE_GENERATE_ID
#define UNREFERENCED_PARAMETER(P)
#define STATUS_INVALID_PARAMETER
#define DBT_DEVTYP_DEVICEINTERFACE
static VOID SplitDeviceInstanceID(IN LPWSTR pszDeviceInstanceID, OUT LPWSTR pszEnumerator, OUT LPWSTR pszDevice, OUT LPWSTR pszInstance)
#define CM_DRP_REMOVAL_POLICY_HW_DEFAULT
#define CM_DELETE_CLASS_SUBKEYS
#define CM_DRP_FRIENDLYNAME
DWORD WINAPI PNP_GetNextLogConf(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfType, DWORD ulCurrentTag, DWORD *pulNextTag, DWORD ulFlags)
#define CM_DRP_LEGACYBUSTYPE
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
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)
#define CM_GETIDLIST_FILTER_NONE
static CONFIGRET SetupDeviceInstance(_In_ LPWSTR pszDeviceInstance, _In_ DWORD ulMinorAction)
static CONFIGRET GetServiceInstanceListSize(_In_ PWSTR pszService, _Out_ PDWORD pulLength)
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
static BOOL IsValidDeviceInstanceID(_In_ PWSTR pszDeviceInstanceID)
static CONFIGRET WINAPI NtStatusToCrError(NTSTATUS Status)
static CONFIGRET GetAllInstanceList(_Inout_ PWSTR pszBuffer, _Inout_ PDWORD pulLength)
#define CM_GETIDLIST_FILTER_SERVICE
DWORD WINAPI PNP_CreateDevInst(handle_t hBinding, LPWSTR pszDeviceID, LPWSTR pszParentDeviceID, PNP_RPC_STRING_LEN ulLength, DWORD ulFlags)
_Check_return_ _Out_ PULONG pulSize
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
DWORD WINAPI GetLastError(VOID)
static CONFIGRET GetAllInstanceListSize(_Out_ PULONG pulLength)
#define TOKEN_ASSIGN_PRIMARY
_In_ BOOL _In_ HANDLE hProcess
DWORD WINAPI PNP_ReportLogOn(handle_t hBinding, BOOL Admin, DWORD ProcessId)
#define PNP_SET_DEVICE_STATUS
#define CM_DRP_BUSTYPEGUID
DWORD WINAPI PNP_GetNextResDes(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfTag, DWORD ulLogConfType, RESOURCEID ResourceID, DWORD ulResourceTag, DWORD *pulNextResType, DWORD *pulNextResTag, DWORD ulFlags)
#define CR_ALREADY_SUCH_DEVINST
#define CM_DRP_COMPATIBLEIDS
DWORD WINAPI PNP_DriverStoreDeleteDriverPackage(handle_t hBinding)
UNICODE_STRING DeviceInstance
CONFIGRET GetEnumeratorInstanceList(_In_ PWSTR pszEnumerator, _Inout_ PWSTR pszBuffer, _Inout_ PDWORD pulLength)
struct _DEV_BROADCAST_DEVICEINTERFACE_W DEV_BROADCAST_DEVICEINTERFACE_W
_In_ PVOID _Out_opt_ PULONG_PTR _Outptr_opt_ PCUNICODE_STRING * ObjectName
#define InsertTailList(ListHead, Entry)
DWORD WINAPI PNP_RequestEjectPC(handle_t hBinding)
#define HKEY_CURRENT_CONFIG
static CONFIGRET GetDeviceInstanceListSize(_In_ LPCWSTR pszDevice, _Out_ PULONG pulLength)
#define CM_GETIDLIST_FILTER_BUSRELATIONS
#define CM_DRP_REMOVAL_POLICY
DWORD WINAPI PNP_DeleteServiceDevices(handle_t hBinding)
DWORD WINAPI PNP_GetServerSideDeviceInstallFlags(handle_t hBinding, DWORD *pulSSDIFlags, DWORD ulFlags)
DWORD WINAPI PNP_UnregisterDeviceClassAssociation(handle_t hBinding, LPWSTR pszInterfaceDevice, DWORD ulFlags)
#define CM_SETUP_WRITE_LOG_CONFS
#define REG_RESOURCE_REQUIREMENTS_LIST
#define CM_GETIDLIST_FILTER_EJECTRELATIONS
#define CM_SET_DEVNODE_PROBLEM_BITS
#define CM_ADD_ID_COMPATIBLE
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)
#define CM_CRP_CHARACTERISTICS
struct _DEV_BROADCAST_DEVICEINTERFACE_W * PDEV_BROADCAST_DEVICEINTERFACE_W
#define STATUS_BUFFER_TOO_SMALL
#define CR_INVALID_DEVICE_ID
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
#define CM_SET_DEVNODE_PROBLEM_OVERRIDE
DWORD WINAPI PNP_GetDeviceStatus(handle_t hBinding, LPWSTR pDeviceID, DWORD *pulStatus, DWORD *pulProblem, DWORD ulFlags)
#define STATUS_PLUGPLAY_QUERY_VETOED
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)
#define CM_DRP_UPPERFILTERS
return STATUS_NOT_IMPLEMENTED
DWORD WINAPI PNP_GetClassCount(handle_t hBinding, DWORD *pulClassCount, DWORD ulFlags)
#define CM_SETUP_DOWNLOAD
static CONFIGRET GetDeviceStatus(_In_ LPWSTR pszDeviceID, _Out_ DWORD *pulStatus, _Out_ DWORD *pulProblem)
#define CM_REENUMERATE_BITS
UINT32 void void ** ReturnValue
static CONFIGRET OpenConfigurationKey(_In_ LPCWSTR pszDeviceID, _Out_ PHKEY phKey)
DWORD WINAPI PNP_FreeLogConf(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfType, DWORD ulLogConfTag, DWORD ulFlags)
#define CM_DRP_LOWERFILTERS
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)
#define CR_NO_MORE_LOG_CONF
void __RPC_USER midl_user_free(void __RPC_FAR *ptr)
DWORD WINAPI PNP_FreeResDes(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfTag, DWORD ulLogConfType, RESOURCEID ResourceID, DWORD ulResourceTag, DWORD *pulPreviousResType, DWORD *pulPreviousResTag, DWORD ulFlags)
static VOID AppendDeviceId(LPWSTR lpDeviceIdList, LPDWORD lpDeviceIdListSize, LPWSTR lpDeviceId)
RPC_STATUS WINAPI RpcServerListen(UINT MinimumCallThreads, UINT MaxCalls, UINT DontWait)
DWORD WINAPI PNP_GetVersion(handle_t hBinding, WORD *pVersion)
#define FILTERED_LOG_CONF
DWORD WINAPI PNP_QueryRemove(handle_t hBinding, LPWSTR pszDeviceID, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName, DWORD ulNameLength, DWORD ulFlags)
DWORD WINAPI PNP_InstallDevInst(handle_t hBinding)
#define CM_DRP_ENUMERATOR_NAME
CONFIGRET WINAPI PNP_IsDockStationPresent(handle_t hBinding, BOOL *Present)
DWORD WINAPI PNP_CreateKey(handle_t hBinding, LPWSTR pszSubKey, DWORD samDesired, DWORD ulFlags)
DWORD WINAPI PNP_AddResDes(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfTag, DWORD ulLogConfType, RESOURCEID ResourceID, DWORD *pulResourceTag, BYTE *ResourceData, PNP_RPC_BUFFER_SIZE ResourceLen, DWORD ulFlags)
static CONFIGRET GetRelationsInstanceListSize(_In_ PWSTR pszDevice, _In_ DWORD ulFlags, _Inout_ PDWORD pulLength)
static BOOL IsPresentDeviceInstanceID(_In_ LPWSTR pszDeviceInstanceID)
DWORD WINAPI PNP_SetActiveService(handle_t hBinding, LPWSTR pszFilter, DWORD ulFlags)
DWORD WINAPI PNP_DetectResourceConflict(handle_t hBinding, LPWSTR pDeviceID, RESOURCEID ResourceID, BYTE *ResourceData, PNP_RPC_BUFFER_SIZE ResourceLen, BOOL *pbConflictDetected, DWORD ulFlags)
#define PNP_PROPERTY_BUSTYPEGUID
#define CR_INVALID_PROPERTY
#define PNP_PROPERTY_REMOVAL_POLICY_HARDWARE_DEFAULT
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)
DWORD WINAPI PNP_QueryArbitratorFreeData(handle_