Compartilhar via


Método IWMDMDeviceSession::EndSession (mswmdm.h)

O método EndSession encerra uma sessão de dispositivo.

Sintaxe

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

Parâmetros

[in] type

Um WMDM_SESSION_TYPE que descreve o tipo de sessão a ser encerrada. Deve ser o mesmo OR bit a bit dos valores especificados em BeginSession.

[in] pCtx

Ponteiro opcional para um buffer de contexto de sessão alocado pelo chamador para comunicação privada entre o aplicativo e o provedor de serviços. Os aplicativos que têm conhecimento do provedor de serviços subjacente podem usar esse buffer para passar dados específicos do contexto para ele. O Windows Media Gerenciador de Dispositivos não faz nada com esse contexto. O chamador é responsável por liberar esse buffer.

[in] dwSizeCtx

Tamanho do buffer de contexto, em bytes. Se o tamanho for 0, pCtx será ignorado. Se o tamanho for diferente de zero, pCtx deverá ser um ponteiro válido

Retornar valor

O método retorna um HRESULT. Todos os métodos de interface no Windows Media Gerenciador de Dispositivos podem retornar qualquer uma das seguintes classes de códigos de erro:

  • Códigos de erro COM padrão
  • Códigos de erro do Windows convertidos em valores HRESULT
  • Códigos de erro do Windows Media Gerenciador de Dispositivos
Para obter uma lista abrangente de possíveis códigos de erro, consulte Códigos de erro.

Comentários

Uma sessão agrupa um grupo de operações em um dispositivo, permitindo que os componentes do Windows Media Gerenciador de Dispositivos otimizem o desempenho executando funções comuns de instalação e desligamento apenas uma vez, em vez de cada transferência individual. Para obter detalhes, consulte BeginSession.

Em resposta a uma chamada endSession, o Windows Media Gerenciador de Dispositivos chama EndSession no provedor de conteúdo seguro e no provedor de serviços. Se um deles falhar na chamada, o Windows Media Gerenciador de Dispositivos retornará um erro. Nesse caso, é possível que EndSession tenha sido bem-sucedido para um dos componentes.

Exemplos

O código C++ a seguir demonstra como usar uma sessão para agrupar uma chamada Insert3 em um dispositivo. O código executa um loop em vários arquivos armazenados em um vetor e os envia para o dispositivo.


// 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.");

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho mswmdm.h
Biblioteca Mssachlp.lib

Confira também

IWMDMDeviceSession Interface

IWMDMDeviceSession::BeginSession

WMDM_SESSION_TYPE