Метод IWMDMDeviceSession::EndSession (mswmdm.h)
Метод EndSession завершает сеанс устройства.
Синтаксис
HRESULT EndSession(
[in] WMDM_SESSION_TYPE type,
[in] BYTE *pCtx,
[in] DWORD dwSizeCtx
);
Параметры
[in] type
WMDM_SESSION_TYPE, описывающий тип сеанса для завершения. Это должно быть то же побитовое ИЛИ значений, указанных в BeginSession.
[in] pCtx
Необязательный указатель на буфер контекста сеанса, выделенный вызывающим объектом, для частного обмена данными между приложением и поставщиком услуг. Приложения, обладающие знаниями о базовом поставщике услуг, могут использовать этот буфер для передачи в него данных, зависящих от контекста. Диспетчер устройств Windows Media не выполняет никаких действий в этом контексте. Вызывающий объект отвечает за освобождение этого буфера.
[in] dwSizeCtx
Размер буфера контекста в байтах. Если размер равен 0, pCtx игнорируется. Если размер не равен нулю, pCtx должен быть допустимым указателем.
Возвращаемое значение
Метод возвращает HRESULT. Все методы интерфейса в Windows Media диспетчер устройств могут возвращать любой из следующих классов кодов ошибок:
- Стандартные коды ошибок COM
- Коды ошибок Windows, преобразованные в значения HRESULT
- Коды ошибок диспетчер устройств 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 |
Header | mswmdm.h |
Библиотека | Mssachlp.lib |