CM_Get_Device_Interface_ListW 함수(cfgmgr32.h)
CM_Get_Device_Interface_List 함수는 지정된 디바이스 인터페이스 클래스속하는 디바이스 인터페이스 인스턴스 목록을 검색합니다.
통사론
CMAPI CONFIGRET CM_Get_Device_Interface_ListW(
[in] LPGUID InterfaceClassGuid,
[in, optional] DEVINSTID_W pDeviceID,
[out] PZZWSTR Buffer,
[in] ULONG BufferLen,
[in] ULONG ulFlags
);
매개 변수
[in] InterfaceClassGuid
디바이스 인터페이스 클래스를 식별하는 GUID를 제공합니다.
[in, optional] pDeviceID
디바이스 인스턴스 ID나타내는 NULL로 끝나는 문자열에 대한 호출자 제공 포인터입니다. 지정된 경우 함수는 지정된 클래스에 대해 디바이스에서 지원하는 디바이스 인터페이스를 검색합니다. 이 값이 NULL
[out] Buffer
인터페이스 인스턴스의 기호 링크 이름을 나타내는 여러 NULL로 끝나는 유니코드 문자열을 수신하는 버퍼에 대한 호출자 제공 포인터입니다.
[in] BufferLen
Buffer가리키는 버퍼의 길이를 문자 단위로 지정하는 호출자 제공 값입니다. CM_Get_Device_Interface_List_Size 호출하여 필요한 버퍼 크기를 확인합니다.
[in] ulFlags
다음 호출자 제공 플래그 중 하나를 포함합니다.
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES
이 함수는 지정된 GUID 및 디바이스 인스턴스 ID(있는 경우)와 일치하는 모든 디바이스와 연결된 디바이스 인터페이스가 포함된 목록을 제공합니다.
CM_GET_DEVICE_INTERFACE_LIST_PRESENT
이 함수는 현재 활성 상태이고 지정된 GUID 및 디바이스 인스턴스 ID(있는 경우)와 일치하는 디바이스와 연결된 디바이스 인터페이스가 포함된 목록을 제공합니다.
반환 값
작업이 성공하면 함수는 CR_SUCCESS 반환합니다. 그렇지 않으면 Cfgmgr32.h정의된 대로 CR_ 접두사를 사용하여 오류 코드 중 하나를 반환합니다.
다음 표에는 이 함수가 반환할 수 있는 몇 가지 일반적인 오류 코드가 포함되어 있습니다.
반환 코드 | 묘사 |
---|---|
|
버퍼 버퍼가 너무 작아서 요청된 디바이스 인터페이스 목록을 보관할 수 없습니다. |
발언
목록의 크기를 가져오기 위해 CM_Get_Device_Interface_List_Size 호출하고 CM_Get_Device_Interface_List 호출하여 목록을 가져오는 사이에 새 디바이스 인터페이스를 시스템에 추가하여 반환된 크기가 더 이상 유효하지 않게 만들 수 있습니다. 호출자는 해당 조건에 대해 견고해야 하며, CM_Get_Device_Interface_ListCR_BUFFER_SMALL반환하는 경우 크기 및 목록을 가져오려고 다시 시도해야 합니다.
예제
이 코드 조각은 설명 섹션에 설명된 대로 크기 및 목록을 가져오는 재시도를 보여 줍니다.
CONFIGRET cr = CR_SUCCESS;
PWSTR DeviceInterfaceList = NULL;
ULONG DeviceInterfaceListLength = 0;
do {
cr = CM_Get_Device_Interface_List_Size(&DeviceInterfaceListLength,
(LPGUID)&GUID_DEVINTERFACE_VOLUME,
NULL,
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES);
if (cr != CR_SUCCESS)
{
break;
}
if (DeviceInterfaceList != NULL) {
HeapFree(GetProcessHeap(),
0,
DeviceInterfaceList);
}
DeviceInterfaceList = (PWSTR)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,
DeviceInterfaceListLength * sizeof(WCHAR));
if (DeviceInterfaceList == NULL)
{
cr = CR_OUT_OF_MEMORY;
break;
}
cr = CM_Get_Device_Interface_List((LPGUID)&GUID_DEVINTERFACE_VOLUME,
NULL,
DeviceInterfaceList,
DeviceInterfaceListLength,
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES);
} while (cr == CR_BUFFER_SMALL);
if (cr != CR_SUCCESS)
{
goto Exit;
}
메모
cfgmgr32.h 헤더는 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 CM_Get_Device_Interface_List 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입대한
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Microsoft Windows 2000 이상 버전의 Windows에서 사용할 수 있습니다. |
대상 플랫폼 | 보편적 |
헤더 | cfgmgr32.h(Cfgmgr32.h 포함) |
라이브러리 | Cfgmgr32.lib |
DLL | CfgMgr32.dll |