Condividi tramite


Metodo IWMDMDeviceSession::EndSession (mswmdm.h)

Il metodo EndSession termina una sessione del dispositivo.

Sintassi

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

Parametri

[in] type

Oggetto WMDM_SESSION_TYPE che descrive il tipo di sessione da terminare. Deve essere lo stesso OR bit per bit dei valori specificati in BeginSession.

[in] pCtx

Puntatore facoltativo a un buffer di contesto sessione allocato dal chiamante per la comunicazione privata tra l'applicazione e il provider di servizi. Le applicazioni con conoscenza del provider di servizi sottostanti possono usare questo buffer per passare i dati specifici del contesto a esso. Windows Media Gestione dispositivi non fa nulla con questo contesto. Il chiamante è responsabile della liberazione di questo buffer.

[in] dwSizeCtx

Dimensioni del buffer di contesto, in byte. Se la dimensione è 0, pCtx viene ignorata. Se la dimensione non è zero, pCtx deve essere un puntatore valido

Valore restituito

Il metodo restituisce un HRESULT. Tutti i metodi di interfaccia in Windows Media Gestione dispositivi possono restituire una delle classi di codici di errore seguenti:

  • Codici di errore COM standard
  • Codici di errore di Windows convertiti in valori HRESULT
  • Codici di errore di Windows Media Gestione dispositivi
Per un elenco completo dei codici di errore possibili, vedere Codici di errore.

Commenti

Una sessione esegue un gruppo di operazioni in un dispositivo, consentendo ai componenti di Windows Media Gestione dispositivi di ottimizzare le prestazioni eseguendo funzioni comuni di installazione e arresto una sola volta, anziché con ogni singolo trasferimento. Per informazioni dettagliate, vedere BeginSession.

In risposta a una chiamata EndSession, Windows Media Gestione dispositivi chiama EndSession nel provider di contenuto sicuro e nel provider di servizi. Se una delle due ha esito negativo la chiamata, Windows Media Gestione dispositivi restituisce un errore. In questo caso, è possibile che EndSession abbia avuto esito positivo per uno dei componenti.

Esempio

Il codice C++ seguente illustra l'uso di una sessione per raggruppare una chiamata Insert3 in un dispositivo. Il codice scorre attraverso un numero di file archiviati in un vettore e li invia al 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.");

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione mswmdm.h
Libreria Mssachlp.lib

Vedi anche

Interfaccia IWMDMDeviceSession

IWMDMDeviceSession::BeginSession

WMDM_SESSION_TYPE