Partager via


IWMDMDeviceSession ::EndSession, méthode (mswmdm.h)

La méthode EndSession met fin à une session d’appareil.

Syntaxe

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

Paramètres

[in] type

Un WMDM_SESSION_TYPE décrivant le type de session à terminer. Il doit s’agir du même or au niveau du bit que celui des valeurs spécifiées dans BeginSession.

[in] pCtx

Pointeur facultatif vers une mémoire tampon de contexte de session allouée à l’appelant pour la communication privée entre l’application et le fournisseur de services. Les applications qui connaissent le fournisseur de services sous-jacent peuvent utiliser cette mémoire tampon pour lui transmettre des données spécifiques au contexte. Windows Media Gestionnaire de périphériques ne fait rien avec ce contexte. L’appelant est chargé de libérer cette mémoire tampon.

[in] dwSizeCtx

Taille de la mémoire tampon de contexte, en octets. Si la taille est 0, pCtx est ignoré. Si la taille est différente de zéro, pCtx doit être un pointeur valide

Valeur retournée

Cette méthode retourne un code HRESULT. Toutes les méthodes d’interface dans Windows Media Gestionnaire de périphériques peuvent retourner l’une des classes suivantes de codes d’erreur :

  • Codes d’erreur COM standard
  • Codes d’erreur Windows convertis en valeurs HRESULT
  • Codes d’erreur Gestionnaire de périphériques Windows Media
Pour obtenir une liste complète des codes d’erreur possibles, consultez Codes d’erreur.

Remarques

Une session met entre crochets un groupe d’opérations sur un appareil, ce qui permet aux composants Windows Media Gestionnaire de périphériques d’optimiser les performances en effectuant des fonctions d’installation et d’arrêt communes une seule fois, plutôt qu’avec chaque transfert individuel. Pour plus d’informations, consultez BeginSession.

En réponse à un appel EndSession, Windows Media Gestionnaire de périphériques appelle EndSession sur le fournisseur de contenu sécurisé et le fournisseur de services. Si l’un d’eux échoue à l’appel, Windows Media Gestionnaire de périphériques retourne une erreur. Dans ce cas, il est possible que EndSession réussisse pour l’un des composants.

Exemples

Le code C++ suivant illustre l’utilisation d’une session pour regrouper un appel Insert3 sur un appareil. Le code effectue une boucle au sein d’un certain nombre de fichiers stockés dans un vecteur et les envoie à l’appareil.


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

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête mswmdm.h
Bibliothèque Mssachlp.lib

Voir aussi

IWMDMDeviceSession, interface

IWMDMDeviceSession ::BeginSession

WMDM_SESSION_TYPE