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,
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;
440 wcscpy(szKeyName,
L"System\\CurrentControlSet\\Enum\\");
441 wcscat(szKeyName, pszDeviceID);
452 switch (ulLogConfType)
456 pszSubKeyName =
L"LogConf";
461 pszSubKeyName =
L"Control";
465 DPRINT1(
"Unsupported configuration type!\n");
501 switch (ulLogConfType)
504 pszValueName =
L"BootConfig";
509 pszValueName =
L"AllocConfig";
514 pszValueName =
L"ForcedConfig";
519 pszValueName =
L"FilteredConfigVector";
524 pszValueName =
L"BasicConfigVector";
529 pszValueName =
L"OverrideConfigVector";
534 DPRINT1(
"Unsupported configuration type!\n");
551 if (*ppBuffer ==
NULL)
591 DPRINT1(
"AllocateAndInitializeSid failed\n");
599 DPRINT1(
"RpcImpersonateClient failed (Status 0x%08lx)\n", RpcStatus);
626 DPRINT1(
"PNP_NOTIFY_HANDLE_rundown(%p)\n", pHandle);
663 DPRINT(
"PNP_GetVersion(%p %p)\n",
682 DPRINT(
"PNP_GetGlobalState(%p %p 0x%08lx)\n",
702 DPRINT(
"PNP_InitDetection(%p)\n",
722 DPRINT(
"PNP_ReportLogOn(%p %u, %u)\n",
778 DPRINT(
"PNP_ValidateDeviceInstance(%p %S 0x%08lx)\n",
790 DPRINT(
"Could not open the Device Key!\n");
798 if (hDeviceKey !=
NULL)
801 DPRINT(
"PNP_ValidateDeviceInstance() done (returns %lx)\n",
ret);
819 DPRINT(
"PNP_GetRootDeviceInstance(%p %S %lu)\n",
838 DPRINT(
"PNP_GetRootDeviceInstance() done (returns %lx)\n",
ret);
849 DWORD ulRelationship,
862 DPRINT(
"PNP_GetRelatedDeviceInstance(%p %lu %S %p %p 0x%lx)\n",
863 hBinding, ulRelationship, pDeviceID, pRelatedDeviceId,
869 if (ulRelationship == PNP_GET_PARENT_DEVICE_INSTANCE)
889 else if (ulRelationship == PNP_GET_SIBLING_DEVICE_INSTANCE)
899 PlugPlayData.
Relation = ulRelationship;
905 (
PVOID)&PlugPlayData,
912 DPRINT(
"PNP_GetRelatedDeviceInstance() done (returns %lx)\n",
ret);
941 DPRINT(
"PNP_EnumerateSubKeys(%p %lu %lu %p %lu %p 0x%08lx)\n",
943 pulRequiredLen, ulFlags);
947 case PNP_ENUMERATOR_SUBKEYS:
951 case PNP_CLASS_SUBKEYS:
959 *pulRequiredLen = ulLength;
977 DPRINT(
"PNP_EnumerateSubKeys() done (returns %lx)\n",
ret);
1016 PlugPlayData.
Buffer = pszBuffer;
1019 (
PVOID)&PlugPlayData,
1041 WCHAR szPathBuffer[512];
1044 DWORD dwValues,
dwSize, dwIndex, dwUsedLength, dwPathLength;
1051 L"System\\CurrentControlSet\\Services",
1057 DPRINT(
"Failed to open the services key (Error %lu)\n", dwError);
1068 DPRINT(
"Failed to open the service key (Error %lu)\n", dwError);
1080 DPRINT(
"Failed to open the service enum key (Error %lu)\n", dwError);
1095 DPRINT(
"RegQueryValueExW failed (Error %lu)\n", dwError);
1099 DPRINT(
"dwValues %lu\n", dwValues);
1104 for (dwIndex = 0; dwIndex < dwValues; dwIndex++)
1108 dwSize =
sizeof(szPathBuffer);
1118 DPRINT(
"Path: %S\n", szPathBuffer);
1120 dwPathLength =
wcslen(szPathBuffer) + 1;
1121 if (dwUsedLength + dwPathLength + 1 > *pulLength)
1127 wcscpy(pPtr, szPathBuffer);
1128 dwUsedLength += dwPathLength;
1129 pPtr += dwPathLength;
1138 if (hServiceKey !=
NULL)
1145 *pulLength = dwUsedLength + 1;
1161 WCHAR szPathBuffer[512];
1163 DWORD dwInstanceLength, dwPathLength, dwUsedLength;
1164 DWORD dwIndex, dwError;
1176 DPRINT(
"Failed to open the device key (Error %lu)\n", dwError);
1183 for (dwIndex = 0; ; dwIndex++)
1197 wsprintf(szPathBuffer,
L"%s\\%s", pszDevice, szInstanceBuffer);
1198 DPRINT(
"Path: %S\n", szPathBuffer);
1200 dwPathLength =
wcslen(szPathBuffer) + 1;
1201 if (dwUsedLength + dwPathLength + 1 > *pulLength)
1207 wcscpy(pPtr, szPathBuffer);
1208 dwUsedLength += dwPathLength;
1209 pPtr += dwPathLength;
1217 *pulLength = dwUsedLength + 1;
1232 WCHAR szPathBuffer[512];
1233 HKEY hEnumeratorKey;
1235 DWORD dwIndex, dwDeviceLength, dwUsedLength, dwRemainingLength, dwPathLength;
1247 DPRINT(
"Failed to open the enumerator key (Error %lu)\n", dwError);
1252 dwRemainingLength = *pulLength;
1255 for (dwIndex = 0; ; dwIndex++)
1269 wsprintf(szPathBuffer,
L"%s\\%s", pszEnumerator, szDeviceBuffer);
1270 DPRINT(
"Path: %S\n", szPathBuffer);
1272 dwPathLength = dwRemainingLength;
1279 dwUsedLength += dwPathLength - 1;
1280 dwRemainingLength -= dwPathLength - 1;
1281 pPtr += dwPathLength - 1;
1287 *pulLength = dwUsedLength + 1;
1303 DWORD dwIndex, dwEnumeratorLength, dwUsedLength, dwRemainingLength, dwPathLength;
1308 dwRemainingLength = *pulLength;
1311 for (dwIndex = 0; ; dwIndex++)
1317 &dwEnumeratorLength,
1322 dwPathLength = dwRemainingLength;
1329 dwUsedLength += dwPathLength - 1;
1330 dwRemainingLength -= dwPathLength - 1;
1331 pPtr += dwPathLength - 1;
1335 *pulLength = dwUsedLength + 1;
1358 DPRINT(
"PNP_GetDeviceList(%p %S %p %p 0x%08lx)\n",
1364 if (pulLength ==
NULL)
1368 (pszFilter ==
NULL))
1453 (
PVOID)&PlugPlayData,
1481 L"System\\CurrentControlSet\\Services",
1487 DPRINT(
"Failed to open the services key (Error %lu)\n", dwError);
1498 DPRINT(
"Failed to open the service key (Error %lu)\n", dwError);
1510 DPRINT(
"Failed to open the service enum key (Error %lu)\n", dwError);
1525 DPRINT(
"RegQueryValueExW failed (Error %lu)\n", dwError);
1544 DPRINT(
"RegQueryInfoKeyW failed (Error %lu)\n", dwError);
1548 DPRINT(
"dwValues %lu dwMaxValueLength %lu\n", dwValues, dwMaxValueLength /
sizeof(
WCHAR));
1551 *pulLength = dwValues * dwMaxValueLength /
sizeof(
WCHAR) + 2;
1557 if (hServiceKey !=
NULL)
1574 DWORD dwSubKeys, dwMaxSubKeyLength;
1585 DPRINT(
"Failed to open the device key (Error %lu)\n", dwError);
1604 DPRINT(
"RegQueryInfoKeyW failed (Error %lu)\n", dwError);
1606 dwMaxSubKeyLength = 0;
1613 *pulLength = dwSubKeys * (
wcslen(pszDevice) + 1 + dwMaxSubKeyLength + 1);
1626 WCHAR szPathBuffer[512];
1627 HKEY hEnumeratorKey;
1628 DWORD dwIndex, dwDeviceLength, dwBufferLength;
1642 DPRINT(
"Failed to open the enumerator key (Error %lu)\n", dwError);
1646 for (dwIndex = 0; ; dwIndex++)
1660 wsprintf(szPathBuffer,
L"%s\\%s", pszEnumerator, szDeviceBuffer);
1661 DPRINT(
"Path: %S\n", szPathBuffer);
1670 *pulLength += dwBufferLength;
1686 DWORD dwIndex, dwEnumeratorLength, dwBufferLength;
1690 for (dwIndex = 0; ; dwIndex++)
1696 &dwEnumeratorLength,
1707 *pulLength += dwBufferLength;
1728 DPRINT(
"PNP_GetDeviceListSize(%p %S %p 0x%08lx)\n",
1729 hBinding, pszFilter, pulLength, ulFlags);
1734 if (pulLength ==
NULL)
1738 (pszFilter ==
NULL))
1805 DPRINT(
"PNP_GetDepth(%p %S %p 0x%08lx)\n",
1806 hBinding, pszDeviceID, pulDepth, ulFlags);
1815 (
PVOID)&PlugPlayData,
1819 *pulDepth = PlugPlayData.
Depth;
1826 DPRINT(
"PNP_GetDepth() done (returns %lx)\n",
ret);
1839 DWORD *pulRegDataType,
1854 DPRINT(
"PNP_GetDeviceRegProp(%p %S %lu %p %p %p %p 0x%08lx)\n",
1856 pulTransferLen, pulLength, ulFlags);
1858 if (pulTransferLen ==
NULL || pulLength ==
NULL)
1877 if (*pulLength < *pulTransferLen)
1878 *pulLength = *pulTransferLen;
1880 *pulTransferLen = 0;
1885 lpValueName =
L"DeviceDesc";
1889 lpValueName =
L"HardwareID";
1893 lpValueName =
L"CompatibleIDs";
1897 lpValueName =
L"Service";
1901 lpValueName =
L"Class";
1905 lpValueName =
L"ClassGUID";
1909 lpValueName =
L"Driver";
1913 lpValueName =
L"ConfigFlags";
1917 lpValueName =
L"Mfg";
1921 lpValueName =
L"FriendlyName";
1925 lpValueName =
L"LocationInformation";
1930 *pulRegDataType =
REG_SZ;
1934 lpValueName =
L"Capabilities";
1942 lpValueName =
L"UpperFilters";
1946 lpValueName =
L"LowerFilters";
1966 *pulRegDataType =
REG_SZ;
1970 lpValueName =
L"Security";
1974 lpValueName =
L"DeviceType";
1978 lpValueName =
L"Exclusive";
1982 lpValueName =
L"DeviceCharacteristics";
1991 lpValueName =
L"UINumberDescFormat";
2010 lpValueName =
L"RemovalPolicy";
2019#if (WINVER >= _WIN32_WINNT_WS03)
2026#if (WINVER >= _WIN32_WINNT_WIN7)
2029 *pulRegDataType =
REG_SZ;
2038 DPRINT(
"Value name: %S\n", lpValueName);
2084 (
PVOID)&PlugPlayData,
2088 *pulLength = PlugPlayData.BufferSize;
2103 DPRINT(
"PNP_GetDeviceRegProp() done (returns %lx)\n",
ret);
2128 DPRINT(
"PNP_SetDeviceRegProp(%p %S %lu %lu %p %lu 0x%08lx)\n",
2138 lpValueName =
L"DeviceDesc";
2142 lpValueName =
L"HardwareID";
2146 lpValueName =
L"CompatibleIDs";
2150 lpValueName =
L"Service";
2154 lpValueName =
L"Class";
2158 lpValueName =
L"ClassGUID";
2162 lpValueName =
L"Driver";
2166 lpValueName =
L"ConfigFlags";
2170 lpValueName =
L"Mfg";
2174 lpValueName =
L"FriendlyName";
2178 lpValueName =
L"LocationInformation";
2182 lpValueName =
L"UpperFilters";
2186 lpValueName =
L"LowerFilters";
2190 lpValueName =
L"Security";
2194 lpValueName =
L"DeviceType";
2198 lpValueName =
L"Exclusive";
2202 lpValueName =
L"DeviceCharacteristics";
2206 lpValueName =
L"UINumberDescFormat";
2210 lpValueName =
L"RemovalPolicy";
2217 DPRINT(
"Value name: %S\n", lpValueName);
2245 DPRINT(
"PNP_SetDeviceRegProp() done (returns %lx)\n",
ret);
2260 WCHAR szClassGuid[40];
2261 WCHAR szClassInstance[5];
2263 HKEY hClassInstanceKey;
2264 ULONG ulTransferLength, ulDataLength;
2265 DWORD dwDataType, dwDisposition,
i;
2269 DPRINT(
"PNP_GetClassInstance(%p %S %p %lu)\n",
2270 hBinding, pDeviceId, pszClassInstance, ulLength);
2275 ulTransferLength = ulLength;
2280 (
BYTE *)pszClassInstance,
2287 ulTransferLength =
sizeof(szClassGuid);
2288 ulDataLength =
sizeof(szClassGuid);
2293 (
BYTE *)szClassGuid,
2299 DPRINT1(
"PNP_GetDeviceRegProp() failed (Error %lu)\n",
ret);
2310 DPRINT1(
"RegOpenKeyExW() failed (Error %lu)\n", dwError);
2315 for (
i = 0;
i < 10000;
i++)
2339 ulDataLength = (
wcslen(pszClassInstance) + 1) *
sizeof(
WCHAR);
2344 (
BYTE *)pszClassInstance,
2349 DPRINT1(
"PNP_SetDeviceRegProp() failed (Error %lu)\n",
ret);
2360 if (hDeviceClassKey !=
NULL)
2383 DPRINT(
"PNP_CreateKey(%p %S 0x%lx 0x%08lx)\n",
2384 hBinding, pszSubKey, samDesired, ulFlags);
2404 L"Device Parameters",
2421 if (hParametersKey !=
NULL)
2424 if (hDeviceKey !=
NULL)
2451 DWORD *pulClassCount,
2460 DPRINT(
"PNP_GetClassCount(%p %p 0x%08lx)\n",
2509 DPRINT(
"PNP_GetClassName(%p %S %p %p 0x%08lx)\n",
2512 lstrcpyW(szKeyName,
L"System\\CurrentControlSet\\Control\\Class\\");
2543 DPRINT(
"PNP_GetClassName() done (returns %lx)\n",
ret);
2561 DPRINT(
"PNP_DeleteClassKey(%p %S 0x%08lx)\n",
2575 DPRINT(
"PNP_DeleteClassKey() done (returns %lx)\n",
ret);
2586 LPWSTR pszInterfaceDevice,
2587 GUID *AliasInterfaceGuid,
2588 LPWSTR pszAliasInterfaceDevice,
2615 DPRINT(
"PNP_GetInterfaceDeviceList(%p %p %S %p %p 0x%08lx)\n",
2624 PlugPlayData.
Flags = ulFlags;
2630 (
PVOID)&PlugPlayData,
2641 DPRINT(
"PNP_GetInterfaceDeviceList() done (returns %lx)\n",
ret);
2662 DPRINT(
"PNP_GetInterfaceDeviceListSize(%p %p %p %S 0x%08lx)\n",
2674 PlugPlayData.
Flags = ulFlags;
2677 (
PVOID)&PlugPlayData,
2688 DPRINT(
"PNP_GetInterfaceDeviceListSize() done (returns %lx)\n",
ret);
2716 LPWSTR pszInterfaceDevice,
2731 DWORD *pulRegDataType,
2745 DPRINT(
"PNP_GetClassRegProp(%p %S %lu %p %p %p %p 0x%08lx)\n",
2746 hBinding, pszClassGuid, ulProperty, pulRegDataType,
2747 Buffer, pulTransferLen, pulLength, ulFlags);
2749 if (pulTransferLen ==
NULL || pulLength ==
NULL)
2761 if (*pulLength < *pulTransferLen)
2762 *pulLength = *pulTransferLen;
2764 *pulTransferLen = 0;
2769 lpValueName =
L"Security";
2773 lpValueName =
L"DeviceType";
2777 lpValueName =
L"Exclusive";
2781 lpValueName =
L"DeviceCharacteristics";
2789 DPRINT(
"Value name: %S\n", lpValueName);
2836 *pulTransferLen = *pulLength;
2838 if (hPropKey !=
NULL)
2841 if (hInstKey !=
NULL)
2844 DPRINT(
"PNP_GetClassRegProp() done (returns %lx)\n",
ret);
2870 DPRINT(
"PNP_SetClassRegProp(%p %S %lu %lu %p %lu 0x%08lx)\n",
2871 hBinding, pszClassGuid, ulProperty, ulDataType,
2872 Buffer, ulLength, ulFlags);
2880 lpValueName =
L"Security";
2884 lpValueName =
L"DeviceType";
2888 lpValueName =
L"Exclusive";
2892 lpValueName =
L"DeviceCharacteristics";
2944 if (hPropKey !=
NULL)
2947 if (hInstKey !=
NULL)
2963 HKEY hKeyEnumerator;
3017 DPRINT1(
"Instance %S already exists!\n", szInstance);
3044 DWORD dwPhantomValue = 1;
3049 (
PBYTE)&dwPhantomValue,
3050 sizeof(dwPhantomValue));
3082 DWORD dwInstanceNumber;
3091 dwInstanceNumber = 0;
3094 if (dwInstanceNumber >= 10000)
3097 swprintf(szGeneratedInstance,
L"Root\\%ls\\%04lu",
3098 pszDeviceID, dwInstanceNumber);
3110 if (
wcslen(szGeneratedInstance) > ulLength)
3116 wcscpy(pszDeviceID, szGeneratedInstance);
3129 LPWSTR pszParentDeviceID,
3139 DPRINT(
"PNP_CreateDevInst(%p %S %S %lu 0x%08lx)\n",
3140 hBinding, pszParentDeviceID, pszDeviceID, ulLength, ulFlags);
3145 if (pszDeviceID ==
NULL || pszParentDeviceID ==
NULL)
3198 sizeof(ControlData));
3221 DPRINT(
"PNP_CreateDevInst() done (returns %lx)\n",
ret);
3235 DWORD ulStatus, ulProblem;
3240 DPRINT1(
"SetupDeviceInstance(%S 0x%08lx)\n",
3241 pszDeviceInstance, ulMinorAction);
3261 dwSize =
sizeof(dwDisableCount);
3269 (dwDisableCount > 0))
3303 if (hDeviceKey !=
NULL)
3318 DPRINT(
"Enable device instance %S\n", pszDeviceInstance);
3338 DPRINT1(
"ReenumerateDeviceInstance(%S 0x%08lx)\n",
3339 pszDeviceInstance, ulMinorAction);
3346 DPRINT1(
"CM_REENUMERATE_RETRY_INSTALLATION not implemented!\n");
3351 EnumerateDeviceData.
Flags = 0;
3354 &EnumerateDeviceData,
3368 DWORD ulMajorAction,
3369 DWORD ulMinorAction,
3370 LPWSTR pszDeviceInstance1,
3371 LPWSTR pszDeviceInstance2)
3377 DPRINT(
"PNP_DeviceInstanceAction(%p %lu 0x%08lx %S %S)\n",
3378 hBinding, ulMajorAction, ulMinorAction,
3379 pszDeviceInstance1, pszDeviceInstance2);
3381 switch (ulMajorAction)
3383 case PNP_DEVINST_SETUP:
3388 case PNP_DEVINST_ENABLE:
3392 case PNP_DEVINST_REENUMERATE:
3398 DPRINT1(
"Unknown device action %lu: not implemented\n", ulMajorAction);
3402 DPRINT(
"PNP_DeviceInstanceAction() done (returns %lx)\n",
ret);
3418 DWORD ulDataType, ulTransferLength, ulLength;
3419 DWORD ulCapabilities, ulConfigFlags;
3425 DPRINT(
"PNP_GetDeviceStatus(%p %S %p %p 0x%08lx)\n",
3426 hBinding, pDeviceID, pulStatus, pulProblem, ulFlags);
3431 if ((pulStatus ==
NULL) || (pulProblem ==
NULL))
3442 ulTransferLength =
sizeof(ulCapabilities);
3443 ulLength =
sizeof(ulCapabilities);
3448 (
PBYTE)&ulCapabilities,
3459 ulTransferLength =
sizeof(ulConfigFlags);
3460 ulLength =
sizeof(ulConfigFlags);
3465 (
PBYTE)&ulConfigFlags,
3495 ULONG ulOldStatus, ulOldProblem;
3500 DPRINT1(
"PNP_SetDeviceProblem(%p %S %lu 0x%08lx)\n",
3501 hBinding, pDeviceID, ulProblem, ulFlags);
3516 (ulOldProblem != 0) &&
3517 (ulOldProblem != ulProblem))
3552 DPRINT1(
"PNP_DisableDevInst(%p %S %p %p %lu 0x%08lx)\n",
3553 hBinding, pDeviceID, pVetoType, pszVetoName, ulNameLength, ulFlags);
3589 lpPtr = lpDeviceIdList;
3593 if (0 ==
_wcsicmp(lpPtr, lpDeviceId))
3611 dwLen =
wcslen(lpDeviceId);
3612 dwPos = (*lpDeviceIdListSize /
sizeof(
WCHAR)) - 1;
3614 wcscpy(&lpDeviceIdList[dwPos], lpDeviceId);
3616 dwPos += (dwLen + 1);
3618 lpDeviceIdList[dwPos] = 0;
3620 *lpDeviceIdListSize = dwPos *
sizeof(
WCHAR);
3636 DWORD dwDeviceIdListSize;
3637 DWORD dwNewDeviceIdSize;
3642 DPRINT(
"PNP_AddID(%p %S %S 0x%08lx)\n",
3643 hBinding, pszDeviceID, pszID, ulFlags);
3651 DPRINT(
"Failed to open the device key!\n");
3664 DPRINT(
"Failed to query the desired ID string!\n");
3669 dwNewDeviceIdSize =
lstrlenW(pszDeviceID);
3670 if (!dwNewDeviceIdSize)
3676 dwDeviceIdListSize += (dwNewDeviceIdSize + 2) *
sizeof(
WCHAR);
3679 if (!pszDeviceIdList)
3681 DPRINT(
"Failed to allocate memory for the desired ID string!\n");
3693 DPRINT(
"Failed to query the desired ID string!\n");
3701 DPRINT(
"Device ID was found in the ID string!\n");
3716 DPRINT(
"Failed to set the desired ID string!\n");
3722 if (pszDeviceIdList)
3725 DPRINT(
"PNP_AddID() done (returns %lx)\n",
ret);
3739 DPRINT(
"PNP_RegisterDriver(%p %S 0x%lx)\n",
3769 DPRINT1(
"PNP_QueryRemove(%p %S %p %p %lu 0x%lx)\n",
3770 hBinding, pszDeviceID, pVetoType, pszVetoName,
3771 ulNameLength, ulFlags);
3780 if (pVetoType !=
NULL)
3783 if (pszVetoName !=
NULL && ulNameLength > 0)
3789 PlugPlayData.
VetoName = pszVetoName;
3795 sizeof(PlugPlayData));
3818 DPRINT1(
"PNP_RequestDeviceEject(%p %S %p %p %lu 0x%lx)\n",
3819 hBinding, pszDeviceID, pVetoType, pszVetoName,
3820 ulNameLength, ulFlags);
3828 if (pVetoType !=
NULL)
3831 if (pszVetoName !=
NULL && ulNameLength > 0)
3837 PlugPlayData.
VetoName = pszVetoName;
3843 sizeof(PlugPlayData));
3866 DPRINT1(
"PNP_IsDockStationPresent(%p %p)\n",
3895 else if (dwValue != 0)
3901 DPRINT1(
"PNP_IsDockStationPresent() done (returns %lx)\n",
ret);
3931 szDockDeviceInstance,
3961 DPRINT(
"PNP_HwProfFlags() called\n");
3969 L"System\\CurrentControlSet\\HardwareProfiles\\Current\\System\\CurrentControlSet\\Enum");
3974 L"System\\CurrentControlSet\\HardwareProfiles\\%04lu\\System\\CurrentControlSet\\Enum",
3985 if (ulAction == PNP_GET_HWPROFFLAGS)
4011 else if (ulAction == PNP_SET_HWPROFFLAGS)
4030 DWORD ulProfileInfoSize,
4033 WCHAR szProfileName[5];
4037 DWORD dwDisposition;
4044 DPRINT(
"PNP_GetHwProfInfo() called\n");
4046 if (ulProfileInfoSize == 0)
4065 L"System\\CurrentControlSet\\Control\\IDConfigDB",
4081 L"Hardware Profiles",
4095 if (ulIndex == (
ULONG)-1)
4145 if (hKeyProfile !=
NULL)
4148 if (hKeyProfiles !=
NULL)
4151 if (hKeyConfig !=
NULL)
4165 DWORD *pulLogConfTag,
4179 DWORD ulLogConfType,
4194 DWORD ulLogConfType,
4195 DWORD *pulLogConfTag,
4199 DWORD RegDataType = 0;
4200 ULONG ulDataSize = 0;
4204 DPRINT(
"PNP_GetFirstLogConf(%p %S %lu %p 0x%08lx)\n",
4205 hBinding, pDeviceID, ulLogConfType, pulLogConfTag, ulFlags);
4207 if (pulLogConfTag ==
NULL)
4210 *pulLogConfTag = (
DWORD)0;
4223 DPRINT1(
"OpenConfigurationKey() failed (Error %lu)\n",
ret);
4235 DPRINT1(
"GetConfigurationData() failed (Error %lu)\n",
ret);
4240 DPRINT1(
"Data size %lu\n", ulDataSize);
4241 if (ulDataSize == 0 || lpData ==
NULL)
4243 DPRINT1(
"No config data available!\n");
4256 DPRINT1(
"No resource descriptors!\n");
4263 DPRINT1(
"FIXME: REG_RESOURCE_REQUIREMENTS_LIST\n");
4273 if (hConfigKey !=
NULL)
4276 DPRINT(
"PNP_GetFirstLogConf() returns %lu\n",
ret);
4288 DWORD ulLogConfType,
4294 DWORD RegDataType = 0;
4295 ULONG ulDataSize = 0;
4299 DPRINT(
"PNP_GetNextLogConf(%p %S %lu %ul %p 0x%08lx)\n",
4300 hBinding, pDeviceID, ulLogConfType, ulCurrentTag, pulNextTag, ulFlags);
4302 if (pulNextTag ==
NULL)
4305 *pulNextTag = (
DWORD)0;
4318 DPRINT1(
"OpenConfigurationKey() failed (Error %lu)\n",
ret);
4330 DPRINT1(
"GetConfigurationData() failed (Error %lu)\n",
ret);
4335 DPRINT(
"Data size %lu\n", ulDataSize);
4337 if (ulDataSize == 0 || lpData ==
NULL)
4339 DPRINT1(
"No config data available!\n");
4365 DPRINT1(
"FIXME: REG_RESOURCE_REQUIREMENTS_LIST\n");
4372 *pulNextTag = ulCurrentTag + 1;
4378 if (hConfigKey !=
NULL)
4381 DPRINT(
"PNP_GetNextLogConf() returns %lu\n",
ret);
4410 DWORD ulLogConfType,
4412 DWORD *pulResourceTag,
4429 DWORD ulLogConfType,
4431 DWORD ulResourceTag,
4432 DWORD *pulPreviousResType,
4433 DWORD *pulPreviousResTag,
4448 DWORD ulLogConfType,
4450 DWORD ulResourceTag,
4451 DWORD *pulNextResType,
4452 DWORD *pulNextResTag,
4456 DWORD RegDataType = 0;
4457 ULONG ulDataSize = 0;
4461 DPRINT1(
"PNP_GetNextResDes(%p %S 0x%lx %lu %lu %ul %p %p 0x%08lx)\n",
4462 hBinding, pDeviceID, ulLogConfTag, ulLogConfType, ResourceID,
4463 ulResourceTag, pulNextResType, pulNextResTag, ulFlags);
4465 if (pulNextResType ==
NULL)
4468 *pulNextResType = 0;
4481 DPRINT1(
"OpenConfigurationKey() failed (Error %lu)\n",
ret);
4493 DPRINT1(
"GetConfigurationData() failed (Error %lu)\n",
ret);
4498 DPRINT1(
"Data size %lu\n", ulDataSize);
4500 if (ulDataSize == 0 || lpData ==
NULL)
4502 DPRINT1(
"No config data available!\n");
4510 DPRINT1(
"FIXME: REG_RESOURCE_LIST\n");
4517 DPRINT1(
"FIXME: REG_RESOURCE_REQUIREMENTS_LIST\n");
4527 if (hConfigKey !=
NULL)
4530 DPRINT1(
"PNP_GetNextResDes() returns %lu\n",
ret);
4543 DWORD ulLogConfType,
4545 DWORD ulResourceTag,
4562 DWORD ulLogConfType,
4564 DWORD ulResourceTag,
4580 DWORD ulLogConfType,
4583 DWORD ulResourceTag,
4602 BOOL *pbConflictDetected,
4605 DPRINT(
"PNP_DetectResourceConflict()\n");
4607 if (pbConflictDetected !=
NULL)
4608 *pbConflictDetected =
FALSE;
4637 DWORD ulHardwareProfile,
4694 BYTE *pNotificationFilter,
4695 DWORD ulNotificationFilterSize,
4705 DPRINT1(
"PNP_RegisterNotification(%p %p '%S' %p %lu 0x%lx %p %lx %p)\n",
4706 hBinding, hRecipient, pszName, pNotificationFilter,
4707 ulNotificationFilterSize, ulFlags, pNotifyHandle, ulProcessId, pulUnknown9);
4709 if (pNotifyHandle ==
NULL)
4712 *pNotifyHandle =
NULL;
4714 if (pNotificationFilter ==
NULL ||
4715 pulUnknown9 ==
NULL)
4727 DPRINT1(
"DBT_DEVTYP_DEVICEINTERFACE\n");
4735 if (pNotifyData ==
NULL)
4738 if (pszName !=
NULL)
4753 DPRINT(
"pNotifyData: %p\n", pNotifyData);
4758 DPRINT1(
"DBT_DEVTYP_HANDLE\n");
4765 if (ulFlags & DEVICE_NOTIFY_ALL_INTERFACE_CLASSES)
4787 DPRINT1(
"PNP_UnregisterNotification(%p %p)\n",
4798 *pNotifyHandle =
NULL;
4811 DWORD *pulRegDataType,
4824 DPRINT(
"PNP_GetCustomDevProp() called\n");
4826 if (pulTransferLen ==
NULL || pulLength ==
NULL)
4841 if (*pulLength < *pulTransferLen)
4842 *pulLength = *pulTransferLen;
4844 *pulTransferLen = 0;
4858 L"Device Parameters",
4889 *pulTransferLen = *pulLength;
4891 if (hParamKey !=
NULL)
4894 if (hDeviceKey !=
NULL)
4897 DPRINT(
"PNP_GetCustomDevProp() done (returns %lx)\n",
ret);
4937 DWORD *pulSSDIFlags,
4942 DPRINT1(
"PNP_GetServerSideDeviceInstallFlags(%p %p %lu)\n",
4945 if (pulSSDIFlags ==
NULL)
4965 LPWSTR PropertyCultureName,
4983 LPWSTR PropertyCultureName,
5003 LPWSTR PropertyCultureName,
UINT32 void void ** ReturnValue
struct NOTIFY_ENTRY * PNOTIFY_ENTRY
DWORD WINAPI PNP_RegisterServiceNotification(handle_t hBinding)
DWORD WINAPI PNP_GetVersion(handle_t hBinding, WORD *pVersion)
DWORD WINAPI PNP_GetInterfaceDeviceList(handle_t hBinding, GUID *InterfaceGuid, LPWSTR pszDeviceID, BYTE *Buffer, PNP_RPC_BUFFER_SIZE *pulLength, DWORD ulFlags)
DWORD WINAPI PNP_SetHwProf(handle_t hBinding, DWORD ulHardwareProfile, DWORD ulFlags)
DWORD WINAPI PNP_UnregisterNotification(handle_t hBinding, PNP_NOTIFY_HANDLE *pNotifyHandle)
static CONFIGRET GetDeviceInstanceListSize(_In_ LPCWSTR pszDevice, _Out_ PULONG pulLength)
DWORD WINAPI PNP_InstallDevInst(handle_t hBinding)
DWORD WINAPI PNP_DriverStoreDeleteDriverPackage(handle_t hBinding)
static CONFIGRET GetServiceInstanceListSize(_In_ PWSTR pszService, _Out_ PDWORD pulLength)
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)
DWORD WINAPI PNP_Connect(handle_t hBinding)
DWORD WINAPI PNP_GetRelatedDeviceInstance(handle_t hBinding, DWORD ulRelationship, LPWSTR pDeviceID, LPWSTR pRelatedDeviceId, PNP_RPC_STRING_LEN *pulLength, DWORD ulFlags)
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_SetActiveService(handle_t hBinding, LPWSTR pszFilter, DWORD ulFlags)
DWORD WINAPI PNP_UnregisterDeviceClassAssociation(handle_t hBinding, LPWSTR pszInterfaceDevice, DWORD ulFlags)
DWORD WINAPI PNP_DetectResourceConflict(handle_t hBinding, LPWSTR pDeviceID, RESOURCEID ResourceID, BYTE *ResourceData, PNP_RPC_BUFFER_SIZE ResourceLen, BOOL *pbConflictDetected, DWORD ulFlags)
static CONFIGRET WINAPI NtStatusToCrError(NTSTATUS Status)
DWORD WINAPI PNP_GetDeviceListSize(handle_t hBinding, LPWSTR pszFilter, PNP_RPC_BUFFER_SIZE *pulLength, DWORD ulFlags)
DWORD WINAPI PNP_InitDetection(handle_t hBinding)
DWORD WINAPI PNP_AddEmptyLogConf(handle_t hBinding, LPWSTR pDeviceID, DWORD ulPriority, DWORD *pulLogConfTag, DWORD ulFlags)
DWORD WINAPI PNP_ApplyPowerSettings(handle_t hBinding)
DWORD WINAPI PNP_GetClassCount(handle_t hBinding, DWORD *pulClassCount, DWORD ulFlags)
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)
DWORD WINAPI PNP_GetServerSideDeviceInstallFlags(handle_t hBinding, DWORD *pulSSDIFlags, DWORD ulFlags)
DWORD WINAPI PNP_FreeLogConf(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfType, DWORD ulLogConfTag, DWORD ulFlags)
LIST_ENTRY NotificationListHead
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)
DWORD WINAPI PNP_GetBlockedDriverInfo(handle_t hBinding, BYTE *Buffer, PNP_RPC_BUFFER_SIZE *pulTransferLen, PNP_RPC_BUFFER_SIZE *pulLength, DWORD ulFlags)
DWORD WINAPI PNP_GetInterfaceDeviceListSize(handle_t hBinding, PNP_RPC_BUFFER_SIZE *pulLen, GUID *InterfaceGuid, LPWSTR pszDeviceID, DWORD ulFlags)
static WCHAR szRootDeviceInstanceID[]
DWORD WINAPI PNP_UninstallDevInst(handle_t hBinding, LPWSTR pDeviceID, DWORD ulFlags)
static VOID AppendDeviceId(LPWSTR lpDeviceIdList, LPDWORD lpDeviceIdListSize, LPWSTR lpDeviceId)
DWORD WINAPI PNP_GetDeviceStatus(handle_t hBinding, LPWSTR pDeviceID, DWORD *pulStatus, DWORD *pulProblem, DWORD ulFlags)
DWORD WINAPI PNP_GetClassInstance(handle_t hBinding, LPWSTR pDeviceId, LPWSTR pszClassInstance, PNP_RPC_STRING_LEN ulLength)
static BOOL CheckForDeviceId(LPWSTR lpDeviceIdList, LPWSTR lpDeviceId)
DWORD WINAPI PNP_DeviceInstanceAction(handle_t hBinding, DWORD ulMajorAction, DWORD ulMinorAction, LPWSTR pszDeviceInstance1, LPWSTR pszDeviceInstance2)
static CONFIGRET GetAllInstanceListSize(_Out_ PULONG pulLength)
VOID __RPC_USER PNP_NOTIFY_HANDLE_rundown(PNP_NOTIFY_HANDLE pHandle)
DWORD WINAPI PNP_RegisterDriver(handle_t hBinding, LPWSTR pszDeviceID, DWORD ulFlags)
static CONFIGRET GenerateDeviceID(_Inout_ LPWSTR pszDeviceID, _In_ PNP_RPC_STRING_LEN ulLength)
DWORD WINAPI PNP_GetDepth(handle_t hBinding, LPWSTR pszDeviceID, DWORD *pulDepth, DWORD ulFlags)
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)
static CONFIGRET SetDeviceStatus(_In_ LPWSTR pszDeviceID, _In_ DWORD ulStatus, _In_ DWORD ulProblem)
DWORD WINAPI PNP_DisableDevInst(handle_t hBinding, LPWSTR pDeviceID, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName, DWORD ulNameLength, DWORD ulFlags)
static CONFIGRET GetConfigurationData(_In_ HKEY hKey, _In_ ULONG ulLogConfType, _Out_ PULONG pulRegDataType, _Out_ PULONG pulDataSize, _Out_ LPBYTE *ppBuffer)
static CONFIGRET OpenConfigurationKey(_In_ LPCWSTR pszDeviceID, _In_ DWORD ulLogConfType, _Out_ PHKEY phKey)
DWORD WINAPI PNP_GetClassName(handle_t hBinding, LPWSTR pszClassGuid, LPWSTR Buffer, PNP_RPC_STRING_LEN *pulLength, DWORD ulFlags)
DWORD WINAPI PNP_RequestDeviceEject(handle_t hBinding, LPWSTR pszDeviceID, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName, DWORD ulNameLength, DWORD ulFlags)
DWORD WINAPI PNP_GetObjectProp(handle_t hBinding, LPWSTR ObjectName, DWORD ObjectType, LPWSTR PropertyCultureName, const DEVPROPKEY *PropertyKey, DEVPROPTYPE *PropertyType, PNP_PROP_SIZE *PropertySize, PNP_PROP_SIZE *TransferLen, BYTE *PropertyBuffer, DWORD Flags)
DWORD WINAPI PNP_GetLogConfPriority(handle_t hBinding, LPWSTR pDeviceID, DWORD ulType, DWORD ulTag, DWORD *pPriority, DWORD ulFlags)
static CONFIGRET SetupDeviceInstance(_In_ LPWSTR pszDeviceInstance, _In_ DWORD ulMinorAction)
DWORD WINAPI PNP_GetObjectPropKeys(handle_t hBinding, LPWSTR ObjectName, DWORD ObjectType, LPWSTR PropertyCultureName, PNP_PROP_COUNT *PropertyCount, PNP_PROP_COUNT *TransferLen, DEVPROPKEY *PropertyKeys, DWORD Flags)
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)
static CONFIGRET GetDeviceStatus(_In_ LPWSTR pszDeviceID, _Out_ DWORD *pulStatus, _Out_ DWORD *pulProblem)
DWORD WINAPI RpcServerThread(LPVOID lpParameter)
static CONFIGRET GetDeviceInstanceList(_In_ PWSTR pszDevice, _Inout_ PWSTR pszBuffer, _Inout_ PDWORD pulLength)
CONFIGRET GetEnumeratorInstanceList(_In_ PWSTR pszEnumerator, _Inout_ PWSTR pszBuffer, _Inout_ PDWORD pulLength)
static CONFIGRET ClearDeviceStatus(_In_ LPWSTR pszDeviceID, _In_ DWORD ulStatus, _In_ DWORD ulProblem)
DWORD WINAPI PNP_RequestEjectPC(handle_t hBinding)
DWORD WINAPI PNP_DeleteServiceDevices(handle_t hBinding)
DWORD WINAPI PNP_CreateDevInst(handle_t hBinding, LPWSTR pszDeviceID, LPWSTR pszParentDeviceID, PNP_RPC_STRING_LEN ulLength, DWORD ulFlags)
static CONFIGRET GetRelationsInstanceList(_In_ PWSTR pszDevice, _In_ DWORD ulFlags, _Inout_ PWSTR pszBuffer, _Inout_ PDWORD pulLength)
DWORD WINAPI PNP_SetDeviceRegProp(handle_t hBinding, LPWSTR pDeviceId, DWORD ulProperty, DWORD ulDataType, BYTE *Buffer, PNP_PROP_SIZE ulLength, DWORD ulFlags)
static CONFIGRET GetAllInstanceList(_Inout_ PWSTR pszBuffer, _Inout_ PDWORD pulLength)
DWORD WINAPI PNP_AddID(handle_t hBinding, LPWSTR pszDeviceID, LPWSTR pszID, DWORD ulFlags)
DWORD WINAPI PNP_QueryRemove(handle_t hBinding, LPWSTR pszDeviceID, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName, DWORD ulNameLength, DWORD ulFlags)
DWORD WINAPI PNP_GetFirstLogConf(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfType, DWORD *pulLogConfTag, DWORD ulFlags)
static BOOL IsPresentDeviceInstanceID(_In_ LPWSTR pszDeviceInstanceID)
DWORD WINAPI PNP_SetClassRegProp(handle_t hBinding, LPWSTR pszClassGuid, DWORD ulProperty, DWORD ulDataType, BYTE *Buffer, PNP_PROP_SIZE ulLength, DWORD ulFlags)
static VOID SplitDeviceInstanceID(IN LPWSTR pszDeviceInstanceID, OUT LPWSTR pszEnumerator, OUT LPWSTR pszDevice, OUT LPWSTR pszInstance)
DWORD WINAPI PNP_GetNextLogConf(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfType, DWORD ulCurrentTag, DWORD *pulNextTag, DWORD ulFlags)
DWORD WINAPI PNP_GetGlobalState(handle_t hBinding, DWORD *pulState, DWORD ulFlags)
CONFIGRET WINAPI PNP_IsDockStationPresent(handle_t hBinding, BOOL *Present)
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)
DWORD WINAPI PNP_GetHwProfInfo(handle_t hBinding, DWORD ulIndex, HWPROFILEINFO *pHWProfileInfo, DWORD ulProfileInfoSize, DWORD ulFlags)
DWORD WINAPI PNP_FreeResDes(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfTag, DWORD ulLogConfType, RESOURCEID ResourceID, DWORD ulResourceTag, DWORD *pulPreviousResType, DWORD *pulPreviousResTag, 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)
DWORD WINAPI PNP_SetDeviceProblem(handle_t hBinding, LPWSTR pDeviceID, DWORD ulProblem, DWORD ulFlags)
CONFIGRET WINAPI PNP_RunDetection(handle_t hBinding, DWORD ulFlags)
static CONFIGRET ReenumerateDeviceInstance(_In_ LPWSTR pszDeviceInstance, _In_ ULONG ulMinorAction)
static CONFIGRET GetServiceInstanceList(_In_ PWSTR pszService, _Inout_ PWSTR pszBuffer, _Inout_ PDWORD pulLength)
DWORD WINAPI PNP_CreateKey(handle_t hBinding, LPWSTR pszSubKey, DWORD samDesired, DWORD ulFlags)
DWORD WINAPI PNP_GetResDesDataSize(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfTag, DWORD ulLogConfType, RESOURCEID ResourceID, DWORD ulResourceTag, DWORD *pulSize, DWORD ulFlags)
DWORD WINAPI PNP_GetRootDeviceInstance(handle_t hBinding, LPWSTR pDeviceID, PNP_RPC_STRING_LEN ulLength)
DWORD WINAPI PNP_GetDeviceList(handle_t hBinding, LPWSTR pszFilter, LPWSTR Buffer, PNP_RPC_STRING_LEN *pulLength, DWORD ulFlags)
DWORD WINAPI PNP_SetObjectProp(handle_t hBinding, LPWSTR ObjectName, DWORD ObjectType, LPWSTR PropertyCultureName, const DEVPROPKEY *PropertyKey, DEVPROPTYPE PropertyType, PNP_PROP_SIZE PropertySize, BYTE *PropertyBuffer, DWORD Flags)
static BOOL IsCallerInteractive(_In_ handle_t hBinding)
static CONFIGRET GetRelationsInstanceListSize(_In_ PWSTR pszDevice, _In_ DWORD ulFlags, _Inout_ PDWORD pulLength)
static CONFIGRET EnableDeviceInstance(_In_ LPWSTR pszDeviceInstance)
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)
DWORD WINAPI PNP_DeleteRegistryKey(handle_t hBinding, LPWSTR pszDeviceID, LPWSTR pszParentKey, LPWSTR pszChildKey, DWORD ulFlags)
DWORD WINAPI PNP_Disconnect(handle_t hBinding)
DWORD WINAPI PNP_QueryArbitratorFreeData(handle_t hBinding, BYTE *pData, DWORD DataLen, LPWSTR pDeviceID, RESOURCEID ResourceID, DWORD ulFlags)
static CONFIGRET DisableDeviceInstance(_In_ LPWSTR pszDeviceInstance, _Inout_opt_ PPNP_VETO_TYPE pVetoType, _Inout_opt_ LPWSTR pszVetoName, _In_ DWORD ulNameLength)
DWORD WINAPI PNP_ReportLogOn(handle_t hBinding, BOOL Admin, DWORD ProcessId)
static BOOL IsRootDeviceInstanceID(_In_ PWSTR pszDeviceInstanceID)
DWORD WINAPI PNP_GetNextResDes(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfTag, DWORD ulLogConfType, RESOURCEID ResourceID, DWORD ulResourceTag, DWORD *pulNextResType, DWORD *pulNextResTag, DWORD ulFlags)
DWORD WINAPI PNP_GetResDesData(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfTag, DWORD ulLogConfType, RESOURCEID ResourceID, DWORD ulResourceTag, BYTE *Buffer, PNP_RPC_BUFFER_SIZE BufferLen, DWORD ulFlags)
DWORD WINAPI PNP_ValidateDeviceInstance(handle_t hBinding, LPWSTR pDeviceID, DWORD ulFlags)
DWORD WINAPI PNP_ModifyResDes(handle_t hBinding, LPWSTR pDeviceID, DWORD ulLogConfTag, DWORD ulLogConfType, RESOURCEID CurrentResourceID, RESOURCEID NewResourceID, DWORD ulResourceTag, BYTE *ResourceData, PNP_RPC_BUFFER_SIZE ResourceLen, DWORD ulFlags)
DWORD WINAPI PNP_QueryArbitratorFreeSize(handle_t hBinding, DWORD *pulSize, LPWSTR pDeviceID, RESOURCEID ResourceID, DWORD ulFlags)
static CONFIGRET GetEnumeratorInstanceListSize(_In_ LPCWSTR pszEnumerator, _Out_ PULONG pulLength)
DWORD WINAPI PNP_DriverStoreAddDriverPackage(handle_t hBinding)
DWORD WINAPI PNP_DeleteClassKey(handle_t hBinding, LPWSTR pszClassGuid, DWORD ulFlags)
static BOOL IsValidDeviceInstanceID(_In_ PWSTR pszDeviceInstanceID)
DWORD WINAPI PNP_GetVersionInternal(handle_t hBinding, WORD *pwVersion)
static CONFIGRET CreateDeviceInstance(_In_ LPWSTR pszDeviceID, _In_ BOOL bPhantomDevice)
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)
static HANDLE hServicesKey
static SID_IDENTIFIER_AUTHORITY NtAuthority
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
#define RegCloseKey(hKey)
#define CM_PROB_FAILED_INSTALL
enum _PNP_VETO_TYPE * PPNP_VETO_TYPE
#define CM_REGISTER_DEVICE_DRIVER_BITS
#define CM_DRP_LOCATION_INFORMATION
#define CM_DRP_CONFIGFLAGS
#define CR_INVALID_PROPERTY
#define FILTERED_LOG_CONF
#define CM_SETUP_DOWNLOAD
#define CM_CUSTOMDEVPROP_BITS
#define CM_DRP_REMOVAL_POLICY
#define CM_DRP_ENUMERATOR_NAME
#define CM_ADD_ID_COMPATIBLE
#define CM_DRP_REMOVAL_POLICY_HW_DEFAULT
#define CR_INVALID_DEVICE_ID
#define CM_DRP_BUSTYPEGUID
#define CR_NO_MORE_LOG_CONF
#define CR_INVALID_LOG_CONF
#define CM_GETIDLIST_FILTER_BITS
#define CM_DRP_LOWERFILTERS
#define CM_SET_DEVNODE_PROBLEM_BITS
#define CR_NO_SUCH_DEVINST
#define CM_GETIDLIST_FILTER_REMOVALRELATIONS
#define CM_DRP_LOCATION_PATHS
#define CM_DRP_REMOVAL_POLICY_OVERRIDE
#define CM_DRP_CAPABILITIES
#define CM_DRP_UPPERFILTERS
#define CM_SETUP_WRITE_LOG_CONFS
#define CM_DRP_COMPATIBLEIDS
#define CR_INVALID_DEVINST
#define CM_DRP_DEVICEDESC
#define CM_REENUMERATE_BITS
#define CM_GETIDLIST_FILTER_EJECTRELATIONS
#define CM_REENUMERATE_RETRY_INSTALLATION
#define CM_DRP_LEGACYBUSTYPE
#define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME
#define CM_SET_DEVNODE_PROBLEM_OVERRIDE
#define CM_DELETE_CLASS_SUBKEYS
#define CM_GLOBAL_STATE_SERVICES_AVAILABLE
#define CM_GETIDLIST_FILTER_ENUMERATOR
#define CR_ALREADY_SUCH_DEVINST
#define CM_GLOBAL_STATE_CAN_DO_UI
#define CM_GETIDLIST_FILTER_BUSRELATIONS
#define CM_DRP_FRIENDLYNAME
#define CM_DRP_INSTALL_STATE
#define OVERRIDE_LOG_CONF
#define CM_DRP_CHARACTERISTICS
#define CR_NO_SUCH_DEVNODE
#define CM_CREATE_DEVNODE_BITS
#define CM_DRP_BASE_CONTAINERID
#define CM_GETIDLIST_FILTER_POWERRELATIONS
#define CR_CALL_NOT_IMPLEMENTED
#define CM_DEVCAP_REMOVABLE
#define CM_CREATE_DEVNODE_GENERATE_ID
#define CM_DRP_UI_NUMBER_DESC_FORMAT
#define CR_INVALID_POINTER
#define CM_GETIDLIST_FILTER_SERVICE
#define CM_CRP_CHARACTERISTICS
#define CM_CREATE_DEVNODE_PHANTOM
#define CM_GETIDLIST_FILTER_NONE
#define CM_DRP_DEVICE_POWER_DATA
#define CM_DRP_HARDWAREID
#define CR_NO_SUCH_REGISTRY_KEY
#define CR_INVALID_DEVNODE
#define CR_REGISTRY_ERROR
#define DBT_DEVTYP_HANDLE
struct _DEV_BROADCAST_DEVICEINTERFACE_W DEV_BROADCAST_DEVICEINTERFACE_W
struct _DEV_BROADCAST_HANDLE DEV_BROADCAST_HANDLE
#define DBT_DEVTYP_DEVICEINTERFACE
struct _DEV_BROADCAST_HANDLE * PDEV_BROADCAST_HANDLE
struct _DEV_BROADCAST_DEVICEINTERFACE_W * PDEV_BROADCAST_DEVICEINTERFACE_W
#define MAX_DEVICE_ID_LEN
#define NT_SUCCESS(StatCode)
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)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
BOOL WINAPI CheckTokenMembership(IN HANDLE ExistingTokenHandle, IN PSID SidToCheck, OUT PBOOL IsMember)
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
BOOL WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority, BYTE nSubAuthorityCount, DWORD nSubAuthority0, DWORD nSubAuthority1, DWORD nSubAuthority2, DWORD nSubAuthority3, DWORD nSubAuthority4, DWORD nSubAuthority5, DWORD nSubAuthority6, DWORD nSubAuthority7, PSID *pSid)
BOOL WINAPI OpenThreadToken(HANDLE ThreadHandle, DWORD DesiredAccess, BOOL OpenAsSelf, HANDLE *TokenHandle)
PVOID WINAPI FreeSid(PSID pSid)
#define ERROR_NO_MORE_ITEMS
#define HeapFree(x, y, z)
static DWORD DWORD * dwLength
static void cleanup(void)
HANDLE WINAPI OpenProcess(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN DWORD dwProcessId)
DWORD WINAPI SHDeleteKeyW(HKEY hKey, LPCWSTR lpszSubKey)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define InitializeListHead(ListHead)
IN PLARGE_INTEGER IN PLARGE_INTEGER PEPROCESS ProcessId
_In_ WDFDEVICE _In_ PWDF_DEVICE_INTERFACE_PROPERTY_DATA _In_ ULONG _Out_ PVOID _Out_ PULONG _Out_ PDEVPROPTYPE PropertyType
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
_In_ BOOL _In_ HANDLE hProcess
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
#define PNP_PROPERTY_UI_NUMBER
#define PNP_SET_DEVICE_STATUS
#define PNP_PROPERTY_REMOVAL_POLICY
#define PNP_PROPERTY_POWER_DATA
#define PNP_PROPERTY_ENUMERATOR_NAME
#define PNP_PROPERTY_PHYSICAL_DEVICE_OBJECT_NAME
@ PlugPlayControlEnumerateDevice
@ PlugPlayControlProperty
@ PlugPlayControlQueryDeviceRelations
@ PlugPlayControlGetRelatedDevice
@ PlugPlayControlDeviceStatus
@ PlugPlayControlQueryAndRemoveDevice
@ PlugPlayControlGetDeviceDepth
@ PlugPlayControlInitializeDevice
@ PlugPlayControlGetInterfaceDeviceList
@ PlugPlayControlStartDevice
@ PlugPlayControlRetrieveDock
#define PNP_PROPERTY_INSTALL_STATE
#define PNP_PROPERTY_LOCATION_PATHS
#define PNP_PROPERTY_REMOVAL_POLICY_HARDWARE_DEFAULT
#define PNP_CLEAR_DEVICE_STATUS
#define PNP_PROPERTY_LEGACYBUSTYPE
#define PNP_GET_DEVICE_STATUS
#define PNP_PROPERTY_BUSTYPEGUID
#define PNP_PROPERTY_ADDRESS
#define PNP_PROPERTY_BUSNUMBER
#define PNP_PROPERTY_CONTAINERID
#define PROCESS_ALL_ACCESS
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define KEY_CREATE_SUB_KEY
#define REG_OPTION_NON_VOLATILE
#define REG_CREATED_NEW_KEY
#define REG_RESOURCE_LIST
#define KEY_ENUMERATE_SUB_KEYS
#define REG_RESOURCE_REQUIREMENTS_LIST
#define UNREFERENCED_PARAMETER(P)
#define STATUS_PLUGPLAY_QUERY_VETOED
#define STATUS_NOT_IMPLEMENTED
NTSTATUS NTAPI NtPlugPlayControl(IN PLUGPLAY_CONTROL_CLASS PlugPlayControlClass, IN OUT PVOID Buffer, IN ULONG BufferLength)
unsigned long PNP_PROP_COUNT
unsigned long PNP_RPC_BUFFER_SIZE
unsigned long PNP_RPC_STRING_LEN
unsigned long PNP_PROP_SIZE
static const WCHAR szName[]
#define CONFIGFLAG_MANUAL_INSTALL
#define CONFIGFLAG_FAILEDINSTALL
#define REGSTR_PATH_CLASS
RPC_STATUS WINAPI RpcRevertToSelf(void)
RPC_STATUS WINAPI RpcImpersonateClient(RPC_BINDING_HANDLE BindingHandle)
RPC_STATUS WINAPI RpcServerListen(UINT MinimumCallThreads, UINT MaxCalls, UINT DontWait)
RPC_STATUS WINAPI RpcServerRegisterIf(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, RPC_MGR_EPV *MgrEpv)
RPC_STATUS WINAPI RpcServerUseProtseqEpW(RPC_WSTR Protseq, UINT MaxCalls, RPC_WSTR Endpoint, LPVOID SecurityDescriptor)
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_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 midl_user_allocate
#define STATUS_BUFFER_TOO_SMALL
CHAR HWPI_szFriendlyName[MAX_PROFILE_LEN]
UNICODE_STRING DeviceInstance
UNICODE_STRING DeviceInstance
UNICODE_STRING DeviceInstance
UNICODE_STRING DeviceInstance
UNICODE_STRING DeviceInstance
UNICODE_STRING DeviceInstance
UNICODE_STRING DeviceInstance
UNICODE_STRING DeviceInstance
ULONG DeviceInstanceLength
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
#define RtlZeroMemory(Destination, Length)
#define STATUS_ACCESS_DENIED
#define STATUS_INVALID_PARAMETER
#define STATUS_NO_SUCH_DEVICE
#define STATUS_OBJECT_NAME_NOT_FOUND
_In_z_ PCWSTR _In_ ULONG ulType
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ ULONG _Out_ PVOID PropertyBuffer
DWORD WINAPI GetLastError(void)
HANDLE WINAPI GetCurrentThread(void)
_In_ ULONG _In_ ULONG ulTag
_Check_return_ _Out_ PULONG pulSize
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_CONFIG
static const GUID InterfaceGuid
_Must_inspect_result_ _In_ ULONG Flags
_In_ PVOID _Out_opt_ PULONG_PTR _Outptr_opt_ PCUNICODE_STRING * ObjectName
_In_ CONST DEVPROPKEY * PropertyKey
#define SECURITY_INTERACTIVE_RID
#define SECURITY_NT_AUTHORITY
#define TOKEN_ASSIGN_PRIMARY