IKsJackDescription 인터페이스(devicetopology.h)

IKsJackDescription 인터페이스는 오디오 어댑터의 디바이스와 외부 또는 내부 엔드포인트 디바이스(예: 마이크 또는 CD 플레이어) 간에 물리적 연결을 제공하는 잭 또는 내부 커넥터에 대한 정보를 제공합니다. 클라이언트는 REFIID IID_IKsJackDescription 설정된 매개 변수 refiid를 사용하여 IPart::Activate 메서드를 호출하여 파트의 IKsJackDescription 인터페이스에 대한 참조를 가져옵니다. IPart::Activate에 대한 호출은 파트가 IKsJackDescription 인터페이스를 지원하는 경우에만 성공합니다. Physical_External 또는 Physical_Internal 연결 형식의 커넥터를 나타내는 파트 개체만 이 인터페이스를 지원합니다.

대부분의 Windows 오디오 어댑터 드라이버는 WDM(Windows 드라이버 모델)을 지원하고 KS(커널 스트리밍) 속성을 사용하여 커넥터(KS 핀이라고 함)의 하드웨어 설명 매개 변수를 나타냅니다. IKsJackDescription 인터페이스는 엔드포인트 디바이스에 대한 커넥터의 KSPROPERTY_JACK_DESCRIPTION 속성에 편리하게 액세스할 수 있도록 합니다. KS 속성 및 KS 핀에 대한 자세한 내용은 Windows DDK 설명서를 참조하세요.

상속

IKsJackDescription 인터페이스는 IUnknown 인터페이스에서 상속됩니다. IKsJackDescription 에는 다음과 같은 유형의 멤버도 있습니다.

메서드

IKsJackDescription 인터페이스에는 이러한 메서드가 있습니다.

 
IKsJackDescription::GetJackCount

GetJackCount 메서드는 오디오 엔드포인트 디바이스에 연결하는 데 필요한 잭 수를 가져옵니다.
IKsJackDescription::GetJackDescription

GetJackDescription 메서드는 오디오 잭에 대한 설명을 가져옵니다.

설명

오디오 엔드포인트 디바이스가 IKsJackDescription 인터페이스를 지원하는 경우 windows 멀티미디어 제어판 Mmsys.cpl 잭 정보가 표시됩니다. 잭 정보를 보려면 다음 단계를 수행합니다.

  1. Mmsys.cpl 실행하려면 명령 프롬프트 창을 열고 다음 명령을 입력합니다.

    컨트롤 mmsys.cpl

    또는 작업 표시줄의 오른쪽에 있는 알림 영역에서 스피커 아이콘을 마우스 오른쪽 단추로 클릭하고 재생 장치 또는 기록 장치를 선택하여 Mmsys.cpl 실행할 수 있습니다.

  2. Mmsys.cpl 창이 열리면 재생 디바이스 목록 또는 기록 디바이스 목록에서 디바이스를 선택하고 속성을 클릭합니다.
  3. 속성 창이 열리면 일반을 클릭합니다. 선택한 속성 페이지에 디바이스의 잭 정보가 표시되면 디바이스는 IKsJackDescription 인터페이스를 지원합니다. 속성 페이지에 "잭 정보를 사용할 수 없음"이라는 텍스트가 표시되면 디바이스는 인터페이스를 지원하지 않습니다.
다음 코드 예제에서는 오디오 엔드포인트 디바이스에 대한 IKsJackDescription 인터페이스를 가져오는 방법을 보여 줍니다.
//-----------------------------------------------------------
// Get the IKsJackDescription interface that describes the
// audio jack or jacks that the endpoint device plugs into.
//-----------------------------------------------------------
#define EXIT_ON_ERROR(hres)  \
              if (FAILED(hres)) { goto Exit; }
#define SAFE_RELEASE(punk)  \
              if ((punk) != NULL)  \
                { (punk)->Release(); (punk) = NULL; }

HRESULT GetJackInfo(IMMDevice *pDevice,
                    IKsJackDescription **ppJackDesc)
{
    HRESULT hr = S_OK;
    IDeviceTopology *pDeviceTopology = NULL;
    IConnector *pConnFrom = NULL;
    IConnector *pConnTo = NULL;
    IPart *pPart = NULL;
    IKsJackDescription *pJackDesc = NULL;

    if (NULL != ppJackDesc)
    {
        *ppJackDesc = NULL;
    }
    if (NULL == pDevice || NULL == ppJackDesc)
    {
        return E_POINTER;
    }

    // Get the endpoint device's IDeviceTopology interface.
    hr = pDevice->Activate(__uuidof(IDeviceTopology), CLSCTX_ALL,
                           NULL, (void**)&pDeviceTopology);
    EXIT_ON_ERROR(hr)

    // The device topology for an endpoint device always
    // contains just one connector (connector number 0).
    hr = pDeviceTopology->GetConnector(0, &pConnFrom);
    EXIT_ON_ERROR(hr)

    // Step across the connection to the jack on the adapter.
    hr = pConnFrom->GetConnectedTo(&pConnTo);
    if (HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == hr)
    {
        // The adapter device is not currently active.
        hr = E_NOINTERFACE;
    }
    EXIT_ON_ERROR(hr)

    // Get the connector's IPart interface.
    hr = pConnTo->QueryInterface(__uuidof(IPart), (void**)&pPart);
    EXIT_ON_ERROR(hr)

    // Activate the connector's IKsJackDescription interface.
    hr = pPart->Activate(CLSCTX_INPROC_SERVER,
                         __uuidof(IKsJackDescription), (void**)&pJackDesc);
    EXIT_ON_ERROR(hr)

    *ppJackDesc = pJackDesc;

Exit:
    SAFE_RELEASE(pDeviceTopology)
    SAFE_RELEASE(pConnFrom)
    SAFE_RELEASE(pConnTo)
    SAFE_RELEASE(pPart)
    return hr;
}

앞의 코드 예제에서 GetJackInfo 함수는 두 개의 매개 변수를 사용합니다. 입력 매개 변수 pDevice는 엔드포인트 디바이스의 IMMDevice 인터페이스를 가리킵니다. 출력 매개 변수 ppJackDesc 는 인터페이스가 있는 경우 함수가 해당 IKsJackDescription 인터페이스의 주소를 쓰는 포인터 값을 가리킵니다. 인터페이스가 없으면 함수는 *ppJackDescNULL을 쓰고 오류 코드 E_NOINTERFACE 반환합니다.

앞의 코드 예제에서 IMMDevice::Activate 호출은 엔드포인트 디바이스의 IDeviceTopology 인터페이스를 검색합니다. 엔드포인트 디바이스의 디바이스 토폴로지에는 어댑터 디바이스에 연결하는 단일 커넥터(커넥터 번호 0)가 포함되어 있습니다. 이 연결의 다른 쪽에서 어댑터 디바이스의 커넥터는 엔드포인트 디바이스가 연결하는 오디오 잭 또는 잭을 나타냅니다. IDeviceTopology::GetConnector 메서드에 대한 호출은 엔드포인트 디바이스에서 커넥터의 IConnector 인터페이스를 검색하고 IConnector::GetConnectedTo 메서드 호출은 어댑터 디바이스에서 해당 커넥터를 검색합니다. 마지막으로 IConnector::QueryInterface 메서드 호출은 어댑터 디바이스 커넥터의 IPart 인터페이스를 검색하고 IPart::Activate 메서드 호출은 커넥터의 IKsJackDescription 인터페이스(있는 경우)를 검색합니다.

요구 사항

   
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 devicetopology.h

추가 정보

핵심 오디오 인터페이스

DeviceTopology API

IPart::Activate