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