다음을 통해 공유


IWMDMDeviceSession::EndSession 메서드(mswmdm.h)

EndSession 메서드는 디바이스 세션을 종료합니다.

구문

HRESULT EndSession(
  [in] WMDM_SESSION_TYPE type,
  [in] BYTE              *pCtx,
  [in] DWORD             dwSizeCtx
);

매개 변수

[in] type

종료할 세션의 유형을 설명하는 WMDM_SESSION_TYPE . BeginSession에 지정된 값의 비트 OR과 동일해야 합니다.

[in] pCtx

애플리케이션과 서비스 공급자 간의 프라이빗 통신을 위해 호출자가 할당한 세션 컨텍스트 버퍼에 대한 선택적 포인터입니다. 기본 서비스 공급자에 대한 지식이 있는 애플리케이션은 이 버퍼를 사용하여 컨텍스트별 데이터를 전달할 수 있습니다. Windows Media 장치 관리자 이 컨텍스트에서는 아무 작업도 수행하지 않습니다. 호출자는 이 버퍼를 해제해야 합니다.

[in] dwSizeCtx

컨텍스트 버퍼의 크기(바이트)입니다. 크기가 0이면 pCtx 가 무시됩니다. 크기가 0이 아닌 경우 pCtx 는 유효한 포인터여야 합니다.

반환 값

이 메서드는 HRESULT를 반환합니다. Windows Media 장치 관리자 모든 인터페이스 메서드는 다음 오류 코드 클래스를 반환할 수 있습니다.

  • 표준 COM 오류 코드
  • HRESULT 값으로 변환된 Windows 오류 코드
  • Windows Media 장치 관리자 오류 코드
가능한 오류 코드의 광범위한 목록은 오류 코드를 참조하세요.

설명

세션은 디바이스에 대한 작업 그룹을 대괄호로 묶어 Windows Media 장치 관리자 구성 요소가 개별 전송이 아닌 한 번만 일반적인 설정 및 종료 기능을 수행하여 성능을 최적화할 수 있도록 합니다. 자세한 내용은 BeginSession을 참조하세요.

EndSession 호출에 대한 응답으로 Windows Media 장치 관리자 보안 콘텐츠 공급자 및 서비스 공급자에서 EndSession을 호출합니다. 둘 중 하나가 호출에 실패하면 Windows Media 장치 관리자 오류를 반환합니다. 이 경우 구성 요소 중 하나에 대해 EndSession 이 성공했을 수 있습니다.

예제

다음 C++ 코드는 세션을 사용하여 디바이스에서 Insert3 호출을 번들로 묶는 방법을 보여 줍니다. 코드는 벡터에 저장된 여러 파일을 반복하여 디바이스로 보냅니다.


// Get the session interface.
CComQIPtr<IWMDMDeviceSession> pSession(pDevice);
if (pDevice == NULL)
{
    // TODO: Display a message that the app wasn't able to retrieve the IWMDMDeviceSession interface.
    return E_NOINTERFACE;
}

// Start the session. We don't use a custom buffer.
hr = pSession->BeginSession(WMDM_SESSION_TRANSFER_TO_DEVICE, NULL, NULL);
if (hr != S_OK)
{
    / /TODO: Display a message indicating that the session failed to start.
    return hr;
}
else
{
    // TODO: Display a message indicating that the session started.
}


// Insert files. These calls happen synchronously.
UINT flags = WMDM_MODE_BLOCK | WMDM_STORAGECONTROL_INSERTINTO | WMDM_FILE_CREATE_OVERWRITE | WMDM_CONTENT_FILE;
CComPtr<IWMDMStorage> pNewStorage;
for(int i = 0; i < sourceFiles.size(); i++)
{
    hr = pStorageControl3->Insert3(
        flags,
        WMDM_FILE_ATTR_FOLDER,
        sourceFiles[i],
        NULL, // Use default name.
        NULL, // Don't specify IWMDMOperation
        NULL, // Don't specify IWMDMProgress
        NULL, // Don't specify metadata
        NULL, // Nothing to send to the SCP.
        &pNewStorage);

    if (pNewStorage != NULL)
        pNewStorage.Release();
    CHECK_HR(hr, "Sent file " << sourceFiles[i] << " to the device.", "Couldn't send file " << sourceFiles[i] << " to the device");
}

// Close the session.
hr = pSession->EndSession(WMDM_SESSION_TRANSFER_TO_DEVICE, NULL, NULL);
CHECK_HR(hr,"Closed the session.","Couldn't close the session.");

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 mswmdm.h
라이브러리 Mssachlp.lib

추가 정보

IWMDMDeviceSession 인터페이스

IWMDMDeviceSession::BeginSession

WMDM_SESSION_TYPE