Поделиться через


Метод 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

См. также раздел

Интерфейс IWMDMDeviceSession

IWMDMDeviceSession::BeginSession

WMDM_SESSION_TYPE