}
+/***********************************************************************
+ * CMP_WaitServicesAvailable [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CMP_WaitServicesAvailable(HMACHINE hMachine)
+{
+ RPC_BINDING_HANDLE BindingHandle = NULL;
+ CONFIGRET ret = CR_SUCCESS;
+ WORD Version;
+
+ if (!PnpGetLocalHandles(&BindingHandle, NULL))
+ return CR_FAILURE;
+
+ RpcTryExcept
+ {
+ ret = PNP_GetVersion(BindingHandle, &Version);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ ret = RpcStatusToCmStatus(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return ret;
+}
+
+
/***********************************************************************
* CM_Add_Empty_Log_Conf [SETUPAPI.@]
*/
}
+/***********************************************************************
+ * CM_Add_Res_Des [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Add_Res_Des(
+ PRES_DES prdResDes, LOG_CONF lcLogConf, RESOURCEID ResourceID,
+ PCVOID ResourceData, ULONG ResourceLen, ULONG ulFlags)
+{
+ TRACE("%p %p %lu %p %lu %lx\n", prdResDes, lcLogConf, ResourceID,
+ ResourceData, ResourceLen, ulFlags);
+ return CM_Add_Res_Des_Ex(prdResDes, lcLogConf, ResourceID, ResourceData,
+ ResourceLen, ulFlags, NULL);
+}
+
+
+/***********************************************************************
+ * CM_Add_Res_Des_Ex [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Add_Res_Des_Ex(
+ PRES_DES prdResDes, LOG_CONF lcLogConf, RESOURCEID ResourceID,
+ PCVOID ResourceData, ULONG ResourceLen, ULONG ulFlags, HMACHINE hMachine)
+{
+ FIXME("%p %p %lu %p %lu %lx %p\n", prdResDes, lcLogConf, ResourceID,
+ ResourceData, ResourceLen, ulFlags, hMachine);
+
+ return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
/***********************************************************************
* CM_Connect_MachineA [SETUPAPI.@]
*/
}
+/***********************************************************************
+ * CM_Free_Res_Des [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Free_Res_Des(
+ PRES_DES prdResDes, RES_DES rdResDes, ULONG ulFlags)
+{
+ TRACE("%p %p %lx\n", prdResDes, rdResDes, ulFlags);
+ return CM_Free_Res_Des_Ex(prdResDes, rdResDes, ulFlags, NULL);
+}
+
+
+/***********************************************************************
+ * CM_Free_Res_Des_Ex [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Free_Res_Des_Ex(
+ PRES_DES prdResDes, RES_DES rdResDes, ULONG ulFlags,
+ HMACHINE hMachine)
+{
+ FIXME("%p %p %lx %lx\n", prdResDes, rdResDes, ulFlags, hMachine);
+
+ return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/***********************************************************************
+ * CM_Free_Res_Des_Handle [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Free_Res_Des_Handle(
+ RES_DES rdResDes)
+{
+ FIXME("%p\n", rdResDes);
+
+ return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
/***********************************************************************
* CM_Get_Child [SETUPAPI.@]
*/
WCHAR szBufferW[MAX_DEVICE_ID_LEN];
CONFIGRET ret = CR_SUCCESS;
- FIXME("%lx %p %ld %ld %lx\n",
+ TRACE("%lx %p %ld %ld %lx\n",
dnDevInst, Buffer, BufferLen, ulFlags, hMachine);
if (Buffer == NULL)
LPWSTR pszFilterW = NULL;
CONFIGRET ret = CR_SUCCESS;
- FIXME("%p %p %ld %ld %lx\n",
+ TRACE("%p %p %ld %ld %lx\n",
pszFilter, Buffer, BufferLen, ulFlags, hMachine);
BufferW = MyMalloc(BufferLen * sizeof(WCHAR));
PCWSTR pszFilter, PWCHAR Buffer, ULONG BufferLen, ULONG ulFlags,
HMACHINE hMachine)
{
- FIXME("%p %p %ld %ld %lx\n",
+ RPC_BINDING_HANDLE BindingHandle = NULL;
+ CONFIGRET ret;
+
+ TRACE("%p %p %ld %ld %lx\n",
pszFilter, Buffer, BufferLen, ulFlags, hMachine);
- memset(Buffer,0,2);
- return CR_SUCCESS;
+
+ if (Buffer == NULL || BufferLen == 0)
+ return CR_INVALID_POINTER;
+
+ if (ulFlags & ~CM_GETIDLIST_FILTER_BITS)
+ return CR_INVALID_FLAG;
+
+ if (hMachine != NULL)
+ {
+ BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
+ if (BindingHandle == NULL)
+ return CR_FAILURE;
+ }
+ else
+ {
+ if (!PnpGetLocalHandles(&BindingHandle, NULL))
+ return CR_FAILURE;
+ }
+
+ *Buffer = 0;
+
+ RpcTryExcept
+ {
+ ret = PNP_GetDeviceList(BindingHandle,
+ (LPWSTR)pszFilter,
+ Buffer,
+ &BufferLen,
+ ulFlags);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ ret = RpcStatusToCmStatus(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return ret;
}
}
+/***********************************************************************
+ * CM_Get_Device_Interface_AliasA [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Get_Device_Interface_AliasA(
+ LPCSTR pszDeviceInterface, LPGUID AliasInterfaceGuid,
+ LPSTR pszAliasDeviceInterface, PULONG pulLength, ULONG ulFlags)
+{
+ TRACE("%p %p %p %p %lu\n", pszDeviceInterface, AliasInterfaceGuid,
+ pszAliasDeviceInterface, pulLength, ulFlags);
+
+ return CM_Get_Device_Interface_Alias_ExA(pszDeviceInterface,
+ AliasInterfaceGuid, pszAliasDeviceInterface, pulLength,
+ ulFlags, NULL);
+}
+
+
+/***********************************************************************
+ * CM_Get_Device_Interface_AliasW [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Get_Device_Interface_AliasW(
+ LPCWSTR pszDeviceInterface, LPGUID AliasInterfaceGuid,
+ LPWSTR pszAliasDeviceInterface, PULONG pulLength, ULONG ulFlags)
+{
+ TRACE("%p %p %p %p %lu\n", pszDeviceInterface, AliasInterfaceGuid,
+ pszAliasDeviceInterface, pulLength, ulFlags);
+
+ return CM_Get_Device_Interface_Alias_ExW(pszDeviceInterface,
+ AliasInterfaceGuid, pszAliasDeviceInterface, pulLength,
+ ulFlags, NULL);
+}
+
+
+/***********************************************************************
+ * CM_Get_Device_Interface_Alias_ExA [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExA(
+ LPCSTR pszDeviceInterface, LPGUID AliasInterfaceGuid, LPSTR pszAliasDeviceInterface,
+ PULONG pulLength, ULONG ulFlags, HMACHINE hMachine)
+{
+ FIXME("%p %p %p %p %lu %lx\n", pszDeviceInterface, AliasInterfaceGuid,
+ pszAliasDeviceInterface, pulLength, ulFlags, hMachine);
+
+ return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/***********************************************************************
+ * CM_Get_Device_Interface_Alias_ExW [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExW(
+ LPCWSTR pszDeviceInterface, LPGUID AliasInterfaceGuid, LPWSTR pszAliasDeviceInterface,
+ PULONG pulLength, ULONG ulFlags, HMACHINE hMachine)
+{
+ RPC_BINDING_HANDLE BindingHandle = NULL;
+ ULONG ulTransferLength;
+ CONFIGRET ret = CR_SUCCESS;
+
+ TRACE("%p %p %p %p %lu %lx\n", pszDeviceInterface, AliasInterfaceGuid,
+ pszAliasDeviceInterface, pulLength, ulFlags, hMachine);
+
+ if (pszDeviceInterface == NULL ||
+ AliasInterfaceGuid == NULL ||
+ pszAliasDeviceInterface == NULL ||
+ pulLength == NULL)
+ return CR_INVALID_POINTER;
+
+ if (ulFlags != 0)
+ return CR_INVALID_FLAG;
+
+ if (hMachine != NULL)
+ {
+ BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
+ if (BindingHandle == NULL)
+ return CR_FAILURE;
+ }
+ else
+ {
+ if (!PnpGetLocalHandles(&BindingHandle, NULL))
+ return CR_FAILURE;
+ }
+
+ ulTransferLength = *pulLength;
+
+ RpcTryExcept
+ {
+ ret = PNP_GetInterfaceDeviceAlias(BindingHandle,
+ (LPWSTR)pszDeviceInterface,
+ AliasInterfaceGuid,
+ pszAliasDeviceInterface,
+ pulLength,
+ &ulTransferLength,
+ 0);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ ret = RpcStatusToCmStatus(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return ret;
+}
+
+
/***********************************************************************
* CM_Get_First_Log_Conf [SETUPAPI.@]
*/
if (ret != CR_SUCCESS)
return ret;
- pLogConfInfo = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_CONF_INFO));
- if (pLogConfInfo == NULL)
- return CR_OUT_OF_MEMORY;
+ if (plcLogConf)
+ {
+ pLogConfInfo = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_CONF_INFO));
+ if (pLogConfInfo == NULL)
+ return CR_OUT_OF_MEMORY;
- pLogConfInfo->ulMagic = LOG_CONF_MAGIC;
- pLogConfInfo->dnDevInst = dnDevInst;
- pLogConfInfo->ulFlags = ulFlags;
- pLogConfInfo->ulTag = ulTag;
+ pLogConfInfo->ulMagic = LOG_CONF_MAGIC;
+ pLogConfInfo->dnDevInst = dnDevInst;
+ pLogConfInfo->ulFlags = ulFlags;
+ pLogConfInfo->ulTag = ulTag;
- *plcLogConf = (LOG_CONF)pLogConfInfo;
+ *plcLogConf = (LOG_CONF)pLogConfInfo;
+ }
return CR_SUCCESS;
}
}
+/***********************************************************************
+ * CM_Get_Next_Re_Des [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Get_Next_Res_Des(
+ PRES_DES prdResDes, RES_DES rdResDes, RESOURCEID ForResource,
+ PRESOURCEID pResourceID, ULONG ulFlags)
+{
+ TRACE("%p %p %lu %p %lx\n", prdResDes, rdResDes, ForResource,
+ pResourceID, ulFlags);
+ return CM_Get_Next_Res_Des_Ex(prdResDes, rdResDes, ForResource,
+ pResourceID, ulFlags, NULL);
+}
+
+
+/***********************************************************************
+ * CM_Get_Next_Re_Des_Ex [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Get_Next_Res_Des_Ex(
+ PRES_DES prdResDes, RES_DES rdResDes, RESOURCEID ForResource,
+ PRESOURCEID pResourceID, ULONG ulFlags, HMACHINE hMachine)
+{
+ FIXME("%p %p %lu %p %lx %lx\n", prdResDes, rdResDes, ForResource,
+ pResourceID, ulFlags, hMachine);
+
+ return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
/***********************************************************************
* CM_Get_Parent [SETUPAPI.@]
*/
}
+/***********************************************************************
+ * CM_Get_Res_Des_Data [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Get_Res_Des_Data(
+ RES_DES rdResDes, PVOID Buffer, ULONG BufferLen, ULONG ulFlags)
+{
+ TRACE("%p %p %l %lx\n", rdResDes, Buffer, BufferLen, ulFlags);
+ return CM_Get_Res_Des_Data_Ex(rdResDes, Buffer, BufferLen, ulFlags, NULL);
+}
+
+
+/***********************************************************************
+ * CM_Get_Res_Des_Data_Ex [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Get_Res_Des_Data_Ex(
+ RES_DES rdResDes, PVOID Buffer, ULONG BufferLen, ULONG ulFlags,
+ HMACHINE hMachine)
+{
+ FIXME("%p %p %l %lx %lx\n", rdResDes, Buffer, BufferLen, ulFlags, hMachine);
+ return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/***********************************************************************
+ * CM_Get_Res_Des_Size [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Get_Res_Des_Data_Size(
+ PULONG pulSize, RES_DES rdResDes, ULONG ulFlags)
+{
+ TRACE("%p %p %lx\n", pulSize, rdResDes, ulFlags);
+ return CM_Get_Res_Des_Data_Size_Ex(pulSize, rdResDes, ulFlags, NULL);
+}
+
+
+/***********************************************************************
+ * CM_Get_Res_Des_Size_Ex [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Get_Res_Des_Data_Size_Ex(
+ PULONG pulSize, RES_DES rdResDes, ULONG ulFlags, HMACHINE hMachine)
+{
+ TRACE("%p %p %lx %lx\n", pulSize, rdResDes, ulFlags, hMachine);
+ return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
/***********************************************************************
* CM_Get_Sibling [SETUPAPI.@]
*/
}
+/***********************************************************************
+ * CM_Is_Version_Available_Ex [SETUPAPI.@]
+ */
+BOOL WINAPI CM_Is_Version_Available(
+ WORD wVersion)
+{
+ TRACE("%hu\n", wVersion);
+ return CM_Is_Version_Available_Ex(wVersion, NULL);
+}
+
+
+/***********************************************************************
+ * CM_Is_Version_Available_Ex [SETUPAPI.@]
+ */
+BOOL WINAPI CM_Is_Version_Available_Ex(
+ WORD wVersion, HMACHINE hMachine)
+{
+ RPC_BINDING_HANDLE BindingHandle = NULL;
+ WORD wServerVersion;
+ CONFIGRET ret;
+
+ TRACE("%hu %lx\n", wVersion, hMachine);
+
+ if (wVersion <= 0x400)
+ return TRUE;
+
+ if (hMachine != NULL)
+ {
+ BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
+ if (BindingHandle == NULL)
+ return FALSE;
+ }
+ else
+ {
+ if (!PnpGetLocalHandles(&BindingHandle, NULL))
+ return FALSE;
+ }
+
+ RpcTryExcept
+ {
+ ret = PNP_GetVersion(BindingHandle, &wServerVersion);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ ret = RpcStatusToCmStatus(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ if (ret != CR_SUCCESS)
+ return FALSE;
+
+ return (wServerVersion >= wVersion);
+}
+
+
/***********************************************************************
* CM_Locate_DevNodeA [SETUPAPI.@]
*/
}
+/***********************************************************************
+ * CM_Modify_Res_Des [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Modify_Res_Des(
+ PRES_DES prdResDes, RES_DES rdResDes, RESOURCEID ResourceID,
+ PCVOID ResourceData, ULONG ResourceLen, ULONG ulFlags)
+{
+ TRACE("%p %p %lx %p %lu %lx", prdResDes, rdResDes, ResourceID, ResourceData,
+ ResourceLen, ulFlags);
+ return CM_Modify_Res_Des_Ex(prdResDes, rdResDes, ResourceID, ResourceData,
+ ResourceLen, ulFlags, NULL);
+}
+
+
+/***********************************************************************
+ * CM_Modify_Res_Des_Ex [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Modify_Res_Des_Ex(
+ PRES_DES prdResDes, RES_DES rdResDes, RESOURCEID ResourceID, PCVOID ResourceData,
+ ULONG ResourceLen, ULONG ulFlags, HMACHINE hMachine)
+{
+ FIXME("%p %p %lx %p %lu %lx %lx", prdResDes, rdResDes, ResourceID, ResourceData,
+ ResourceLen, ulFlags, hMachine);
+ return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
/***********************************************************************
* CM_Move_DevNode [SETUPAPI.@]
*/
}
+/***********************************************************************
+ * CM_Query_Remove_SubTree [SETUPAPI.@]
+ *
+ * This function is obsolete in Windows XP and above.
+ */
+CONFIGRET WINAPI CM_Query_Remove_SubTree(
+ DEVINST dnAncestor, ULONG ulFlags)
+{
+ TRACE("%lx %lx\n", dnAncestor, ulFlags);
+ return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/***********************************************************************
+ * CM_Query_Remove_SubTree_Ex [SETUPAPI.@]
+ *
+ * This function is obsolete in Windows XP and above.
+ */
+CONFIGRET WINAPI CM_Query_Remove_SubTree_Ex(
+ DEVINST dnAncestor, ULONG ulFlags, HMACHINE hMachine)
+{
+ TRACE("%lx %lx %lx\n", dnAncestor, ulFlags, hMachine);
+ return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
/***********************************************************************
* CM_Reenumerate_DevNode [SETUPAPI.@]
*/
}
+/***********************************************************************
+ * CM_Remove_SubTree [SETUPAPI.@]
+ *
+ * This function is obsolete in Windows XP and above.
+ */
+CONFIGRET WINAPI CM_Remove_SubTree(
+ DEVINST dnAncestor, ULONG ulFlags)
+{
+ TRACE("%lx %lx\n", dnAncestor, ulFlags);
+ return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/***********************************************************************
+ * CM_Remove_SubTree_Ex [SETUPAPI.@]
+ *
+ * This function is obsolete in Windows XP and above.
+ */
+CONFIGRET WINAPI CM_Remove_SubTree_Ex(
+ DEVINST dnAncestor, ULONG ulFlags, HMACHINE hMachine)
+{
+ TRACE("%lx %lx %lx\n", dnAncestor, ulFlags, hMachine);
+ return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
/***********************************************************************
* CM_Request_Eject_PC [SETUPAPI.@]
*/
}
+/***********************************************************************
+ * CM_Set_HW_Prof [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Set_HW_Prof(
+ ULONG ulHardwareProfile, ULONG ulFlags)
+{
+ TRACE("%lu %lu\n", ulHardwareProfile, ulFlags);
+ return CM_Set_HW_Prof_Ex(ulHardwareProfile, ulFlags, NULL);
+}
+
+
+/***********************************************************************
+ * CM_Set_HW_Prof_Ex [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Set_HW_Prof_Ex(
+ ULONG ulHardwareProfile, ULONG ulFlags, HMACHINE hMachine)
+{
+ RPC_BINDING_HANDLE BindingHandle = NULL;
+ CONFIGRET ret;
+
+ TRACE("%lu %lu %lx\n", ulHardwareProfile, ulFlags, hMachine);
+
+ if (!IsUserAdmin())
+ return CR_ACCESS_DENIED;
+
+ if (ulFlags != 0)
+ return CR_INVALID_FLAG;
+
+ if (hMachine != NULL)
+ {
+ BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
+ if (BindingHandle == NULL)
+ return CR_FAILURE;
+ }
+ else
+ {
+ if (!PnpGetLocalHandles(&BindingHandle, NULL))
+ return CR_FAILURE;
+ }
+
+ RpcTryExcept
+ {
+ ret = PNP_SetHwProf(BindingHandle, ulHardwareProfile, ulFlags);
+ }
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ {
+ ret = RpcStatusToCmStatus(RpcExceptionCode());
+ }
+ RpcEndExcept;
+
+ return ret;
+}
+
+
/***********************************************************************
* CM_Set_HW_Prof_FlagsA [SETUPAPI.@]
*/