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 |