Método IWMDMDeviceSession::EndSession (mswmdm.h)
El método EndSession finaliza una sesión de dispositivo.
Sintaxis
HRESULT EndSession(
[in] WMDM_SESSION_TYPE type,
[in] BYTE *pCtx,
[in] DWORD dwSizeCtx
);
Parámetros
[in] type
Un WMDM_SESSION_TYPE que describe el tipo de sesión que se va a finalizar. Debe ser el mismo OR bit a bit de los valores especificados en BeginSession.
[in] pCtx
Puntero opcional a un búfer de contexto de sesión asignado por el autor de la llamada para la comunicación privada entre la aplicación y el proveedor de servicios. Las aplicaciones que tienen conocimiento del proveedor de servicios subyacente pueden usar este búfer para pasar datos específicos del contexto a él. Windows Media Administrador de dispositivos no hace nada con este contexto. El autor de la llamada es responsable de liberar este búfer.
[in] dwSizeCtx
Tamaño del búfer de contexto, en bytes. Si el tamaño es 0, se omite pCtx . Si el tamaño es distinto de cero, pCtx debe ser un puntero válido.
Valor devuelto
El método devuelve un valor HRESULT. Todos los métodos de interfaz de Windows Media Administrador de dispositivos pueden devolver cualquiera de las siguientes clases de códigos de error:
- Códigos de error COM estándar
- Códigos de error de Windows convertidos en valores HRESULT
- Códigos de error de windows Media Administrador de dispositivos
Comentarios
Una sesión entre corchetes un grupo de operaciones en un dispositivo, lo que permite a Windows Media Administrador de dispositivos componentes optimizar el rendimiento realizando funciones comunes de configuración y apagado solo una vez, en lugar de con cada transferencia individual. Para obtener más información, consulte BeginSession.
En respuesta a una llamada a EndSession, Windows Media Administrador de dispositivos llama a EndSession en el proveedor de contenido seguro y el proveedor de servicios. Si se produce un error en alguna de ellas, Windows Media Administrador de dispositivos devuelve un error. En ese caso, es posible que EndSession se realice correctamente para uno de los componentes.
Ejemplos
El siguiente código de C++ muestra el uso de una sesión para agrupar una llamada Insert3 en un dispositivo. El código recorre en bucle varios archivos almacenados en un vector y los envía 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.");
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Windows |
Encabezado | mswmdm.h |
Library | Mssachlp.lib |