📄 cfgmgr.c
字号:
* CM_Enumerate_Enumerators_ExW [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Enumerate_Enumerators_ExW(
ULONG ulEnumIndex, PWCHAR Buffer, PULONG pulLength, ULONG ulFlags,
HMACHINE hMachine)
{
RPC_BINDING_HANDLE BindingHandle = NULL;
TRACE("%lu %p %p %lx %lx\n", ulEnumIndex, Buffer, pulLength, ulFlags,
hMachine);
if (Buffer == NULL || pulLength == NULL)
return CR_INVALID_POINTER;
if (ulFlags != 0)
return CR_INVALID_FLAG;
*Buffer = UNICODE_NULL;
if (hMachine != NULL)
{
BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
if (BindingHandle == NULL)
return CR_FAILURE;
}
else
{
if (!PnpGetLocalHandles(&BindingHandle, NULL))
return CR_FAILURE;
}
return PNP_EnumerateSubKeys(BindingHandle,
PNP_BRANCH_ENUM,
ulEnumIndex,
Buffer,
*pulLength,
pulLength,
ulFlags);
}
/***********************************************************************
* CM_Free_Log_Conf [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Free_Log_Conf(
LOG_CONF lcLogConfToBeFreed, ULONG ulFlags)
{
TRACE("%lx %lx\n", lcLogConfToBeFreed, ulFlags);
return CM_Free_Log_Conf_Ex(lcLogConfToBeFreed, ulFlags, NULL);
}
/***********************************************************************
* CM_Free_Log_Conf_Ex [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Free_Log_Conf_Ex(
LOG_CONF lcLogConfToBeFreed, ULONG ulFlags, HMACHINE hMachine)
{
RPC_BINDING_HANDLE BindingHandle = NULL;
HSTRING_TABLE StringTable = NULL;
LPWSTR lpDevInst;
PLOG_CONF_INFO pLogConfInfo;
TRACE("%lx %lx %lx\n", lcLogConfToBeFreed, ulFlags, hMachine);
if (!IsUserAdmin())
return CR_ACCESS_DENIED;
pLogConfInfo = (PLOG_CONF_INFO)lcLogConfToBeFreed;
if (pLogConfInfo == NULL || pLogConfInfo->ulMagic != LOG_CONF_MAGIC)
return CR_INVALID_LOG_CONF;
if (ulFlags != 0)
return CR_INVALID_FLAG;
if (hMachine != NULL)
{
BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
if (BindingHandle == NULL)
return CR_FAILURE;
StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
if (StringTable == 0)
return CR_FAILURE;
}
else
{
if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
return CR_FAILURE;
}
lpDevInst = StringTableStringFromId(StringTable, pLogConfInfo->dnDevInst);
if (lpDevInst == NULL)
return CR_INVALID_DEVNODE;
return PNP_FreeLogConf(BindingHandle, lpDevInst, pLogConfInfo->ulFlags,
pLogConfInfo->ulTag, 0);
}
/***********************************************************************
* CM_Free_Log_Conf_Handle [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Free_Log_Conf_Handle(
LOG_CONF lcLogConf)
{
PLOG_CONF_INFO pLogConfInfo;
TRACE("%lx\n", lcLogConf);
pLogConfInfo = (PLOG_CONF_INFO)lcLogConf;
if (pLogConfInfo == NULL || pLogConfInfo->ulMagic != LOG_CONF_MAGIC)
return CR_INVALID_LOG_CONF;
HeapFree(GetProcessHeap(), 0, pLogConfInfo);
return CR_SUCCESS;
}
/***********************************************************************
* CM_Get_Child [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Get_Child(
PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags)
{
TRACE("%p %p %lx\n", pdnDevInst, dnDevInst, ulFlags);
return CM_Get_Child_Ex(pdnDevInst, dnDevInst, ulFlags, NULL);
}
/***********************************************************************
* CM_Get_Child_Ex [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Get_Child_Ex(
PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
{
WCHAR szRelatedDevInst[MAX_DEVICE_ID_LEN];
RPC_BINDING_HANDLE BindingHandle = NULL;
HSTRING_TABLE StringTable = NULL;
LPWSTR lpDevInst;
DWORD dwIndex;
CONFIGRET ret;
TRACE("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine);
if (pdnDevInst == NULL)
return CR_INVALID_POINTER;
if (dnDevInst == 0)
return CR_INVALID_DEVINST;
if (ulFlags != 0)
return CR_INVALID_FLAG;
*pdnDevInst = -1;
if (hMachine != NULL)
{
BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
if (BindingHandle == NULL)
return CR_FAILURE;
StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
if (StringTable == 0)
return CR_FAILURE;
}
else
{
if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
return CR_FAILURE;
}
lpDevInst = StringTableStringFromId(StringTable, dnDevInst);
if (lpDevInst == NULL)
return CR_INVALID_DEVNODE;
ret = PNP_GetRelatedDeviceInstance(BindingHandle,
PNP_DEVICE_CHILD,
lpDevInst,
szRelatedDevInst,
MAX_DEVICE_ID_LEN,
0);
if (ret != CR_SUCCESS)
return ret;
TRACE("szRelatedDevInst: %s\n", debugstr_w(szRelatedDevInst));
dwIndex = StringTableAddString(StringTable, szRelatedDevInst, 1);
if (dwIndex == -1)
return CR_FAILURE;
*pdnDevInst = dwIndex;
return CR_SUCCESS;
}
/***********************************************************************
* CM_Get_Class_Key_NameA [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Get_Class_Key_NameA(
LPGUID ClassGuid, LPSTR pszKeyName, PULONG pulLength, ULONG ulFlags)
{
TRACE("%p %p %p %lx\n",
ClassGuid, pszKeyName, pulLength, ulFlags);
return CM_Get_Class_Key_Name_ExA(ClassGuid, pszKeyName, pulLength,
ulFlags, NULL);
}
/***********************************************************************
* CM_Get_Class_Key_NameW [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Get_Class_Key_NameW(
LPGUID ClassGuid, LPWSTR pszKeyName, PULONG pulLength, ULONG ulFlags)
{
TRACE("%p %p %p %lx\n",
ClassGuid, pszKeyName, pulLength, ulFlags);
return CM_Get_Class_Key_Name_ExW(ClassGuid, pszKeyName, pulLength,
ulFlags, NULL);
}
/***********************************************************************
* CM_Get_Class_Key_Name_ExA [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Get_Class_Key_Name_ExA(
LPGUID ClassGuid, LPSTR pszKeyName, PULONG pulLength, ULONG ulFlags,
HMACHINE hMachine)
{
WCHAR szBuffer[MAX_GUID_STRING_LEN];
CONFIGRET ret = CR_SUCCESS;
ULONG ulLength;
ULONG ulOrigLength;
TRACE("%p %p %p %lx %lx\n",
ClassGuid, pszKeyName, pulLength, ulFlags, hMachine);
if (ClassGuid == NULL || pszKeyName == NULL || pulLength == NULL)
return CR_INVALID_POINTER;
ulOrigLength = *pulLength;
*pulLength = 0;
ulLength = MAX_GUID_STRING_LEN;
ret = CM_Get_Class_Key_Name_ExW(ClassGuid, szBuffer, &ulLength,
ulFlags, hMachine);
if (ret == CR_SUCCESS)
{
if (WideCharToMultiByte(CP_ACP,
0,
szBuffer,
ulLength,
pszKeyName,
ulOrigLength,
NULL,
NULL) == 0)
ret = CR_FAILURE;
else
*pulLength = lstrlenA(pszKeyName) + 1;
}
return CR_SUCCESS;
}
/***********************************************************************
* CM_Get_Class_Key_Name_ExW [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Get_Class_Key_Name_ExW(
LPGUID ClassGuid, LPWSTR pszKeyName, PULONG pulLength, ULONG ulFlags,
HMACHINE hMachine)
{
TRACE("%p %p %p %lx %lx\n",
ClassGuid, pszKeyName, pulLength, ulFlags, hMachine);
if (ClassGuid == NULL || pszKeyName == NULL || pulLength == NULL)
return CR_INVALID_POINTER;
if (ulFlags != 0)
return CR_INVALID_FLAG;
if (*pulLength < MAX_GUID_STRING_LEN)
{
*pulLength = 0;
return CR_BUFFER_SMALL;
}
if (!GuidToString(ClassGuid, pszKeyName))
return CR_INVALID_DATA;
*pulLength = MAX_GUID_STRING_LEN;
return CR_SUCCESS;
}
/***********************************************************************
* CM_Get_Class_NameA [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Get_Class_NameA(
LPGUID ClassGuid, PCHAR Buffer, PULONG pulLength, ULONG ulFlags)
{
TRACE("%p %p %p %lx\n", ClassGuid, Buffer, pulLength, ulFlags);
return CM_Get_Class_Name_ExA(ClassGuid, Buffer, pulLength, ulFlags,
NULL);
}
/***********************************************************************
* CM_Get_Class_NameW [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Get_Class_NameW(
LPGUID ClassGuid, PWCHAR Buffer, PULONG pulLength, ULONG ulFlags)
{
TRACE("%p %p %p %lx\n", ClassGuid, Buffer, pulLength, ulFlags);
return CM_Get_Class_Name_ExW(ClassGuid, Buffer, pulLength, ulFlags,
NULL);
}
/***********************************************************************
* CM_Get_Class_Name_ExA [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Get_Class_Name_ExA(
LPGUID ClassGuid, PCHAR Buffer, PULONG pulLength, ULONG ulFlags,
HMACHINE hMachine)
{
WCHAR szBuffer[MAX_CLASS_NAME_LEN];
CONFIGRET ret = CR_SUCCESS;
ULONG ulLength;
ULONG ulOrigLength;
TRACE("%p %p %p %lx %lx\n",
ClassGuid, Buffer, pulLength, ulFlags, hMachine);
if (ClassGuid == NULL || Buffer == NULL || pulLength == NULL)
return CR_INVALID_POINTER;
ulOrigLength = *pulLength;
*pulLength = 0;
ulLength = MAX_CLASS_NAME_LEN;
ret = CM_Get_Class_Name_ExW(ClassGuid, szBuffer, &ulLength,
ulFlags, hMachine);
if (ret == CR_SUCCESS)
{
if (WideCharToMultiByte(CP_ACP,
0,
szBuffer,
ulLength,
Buffer,
ulOrigLength,
NULL,
NULL) == 0)
ret = CR_FAILURE;
else
*pulLength = lstrlenA(Buffer) + 1;
}
return ret;
}
/***********************************************************************
* CM_Get_Class_Name_ExW [SETUPAPI.@]
*/
CONFIGRET WINAPI
CM_Get_Class_Name_ExW(
LPGUID ClassGuid, PWCHAR Buffer, PULONG pulLength, ULONG ulFlags,
HMACHINE hMachine)
{
WCHAR szGuidString[MAX_GUID_STRING_LEN];
RPC_BINDING_HANDLE BindingHandle = NULL;
TRACE("%p %p %p %lx %lx\n",
ClassGuid, Buffer, pulLength, ulFlags, hMachine);
if (ClassGuid == NULL || Buffer == NULL || pulLength == NULL)
return CR_INVALID_POINTER;
if (ulFlags != 0)
return CR_INVALID_FLAG;
if (!GuidToString(ClassGuid, szGuidString))
return CR_INVALID_DATA;
TRACE("Guid %s\n", debugstr_w(szGuidString));
if (hMachine != NULL)
{
BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
if (BindingHandle == NULL)
return CR_FAILURE;
}
else
{
if (!PnpGetLocalHandles(&BindingHandle, NULL))
return CR_FAILURE;
}
return PNP_GetClassName(BindingHandle,
szGuidString,
Buffer,
pulLength,
ulFlags);
}
/***********************************************************************
* CM_Get_Depth [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Get_Depth(
PULONG pulDepth, DEVINST dnDevInst, ULONG ulFlags)
{
TRACE("%p %lx %lx\n", pulDepth, dnDevInst, ulFlags);
return CM_Get_Depth_Ex(pulDepth, dnDevInst, ulFlags, NULL);
}
/***********************************************************************
* CM_Get_Depth_Ex [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Get_Depth_Ex(
PULONG pulDepth, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
{
RPC_BINDING_HANDLE BindingHandle = NULL;
HSTRING_TABLE StringTable = NULL;
LPWSTR lpDevInst;
TRACE("%p %lx %lx %lx\n",
pulDepth, dnDevInst, ulFlags, hMachine);
if (pulDepth == NULL)
return CR_INVALID_POINTER;
if (dnDevInst == 0)
return CR_INVALID_DEVINST;
if (ulFlags != 0)
return CR_INVALID_FLAG;
if (hMachine != NULL)
{
BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
if (BindingHandle == NULL)
return CR_FAILURE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -