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
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