Control manual de transferencias de archivos
La aplicación puede implementar la interfaz de IWMDMOperation para administrar parte del proceso de lectura o escritura. En un dispositivo de lectura, la implementación permite a la aplicación recibir bloques de datos sin procesar de un archivo de dispositivo. En un dispositivo de escritura, permite a la aplicación enviar bloques de datos sin procesar a un archivo en el dispositivo.
En las operaciones de lectura y escritura, el método IWMDMOperation::TransferObjectData pasa los datos entre el equipo y el dispositivo. Para conocer la dirección de la transferencia de datos, la aplicación debe establecer una marca cuando el Administrador de dispositivos de Windows Media llama a BeginRead o BeginWrite. Cuando se llama al método End, la aplicación debería restablecer esta marca.
Nota:
Si el proveedor de servicios y el dispositivo implementan correctamente IMDSPObject2, primero llamará al método IWMDMOperation3::TransferObjectDataOnClearChannel, si está implementado. Este método es una forma más eficaz de transferir datos. TransferObjectDataOnClearChannel se controla de la misma manera que TransferObjectData, excepto que los datos nunca se cifran y no tienen valores MAC para comprobar.
En las secciones siguientes se describen el proceso de lectura y escritura, cuando la aplicación implementa IWMDMOperation.
Lectura desde un dispositivo
Al leer un archivo desde un dispositivo, el Administrador de dispositivos de Windows Media llama a los siguientes métodos IWMDMOperation en orden:
- BeginRead Se llama para notificar a la aplicación que está comenzando una lectura desde el dispositivo.
- TransferObjectData Se llama una o más veces. El procesamiento de datos se describe en los pasos siguientes:
- TransferObjectData recibe un búfer, pData, de tamaño pdwSize bytes, rellenado con datos y un MAC para comprobar los datos entrantes.
- La aplicación comprueba los parámetros entrantes con el MAC de datos entrantes.
- La aplicación descifra y lee tantos datos de pData como pueda, y modifica el valor devuelto de pdwSize para indicar cuántos bytes se han leído realmente.
- La aplicación descifra los datos mediante CSecureChannelClient::DecryptParam, y los almacena o utiliza, según sea necesario.
- TransferObjectData devuelve S_OK.
- El Administrador de dispositivos de Windows Media continúa llamando a TransferObjectData hasta que la aplicación haya leído todos los datos del archivo, o la aplicación devuelva WMDM_E_USER_CANCELLED para cancelar la operación (en cuyo caso se cancela la lectura, y el Administrador de dispositivos de Windows Media llama a End).
- End Se llama para notificar a la aplicación que una lectura del dispositivo está finalizando.
Escribir en un dispositivo
Al escribir un archivo en el dispositivo, el Administrador de dispositivos de Windows Media llama a los siguientes métodos IWMDMOperation en orden:
- GetObjectName Se llama para permitir que la aplicación especifique un nombre para el nuevo almacenamiento. Solo se llama a este método si la aplicación no especificó un nombre en el método Insert.
- Se llama a GetObjectAttributes para permitir que la aplicación especifique atributos para el nuevo almacenamiento en el dispositivo.
- BeginWrite Se llama para notificar que se está iniciando una escritura en el dispositivo.
- GetObjectTotalSize Se llama para recuperar el tamaño total del objeto que se escribe en el dispositivo, para habilitar la optimización de la transferencia y también para dar al Administrador de dispositivos de Windows Media una oportunidad para cancelar la transferencia si el archivo es demasiado grande para el dispositivo.
- TransferObjectData Se llama una o más veces. El procesamiento de datos se describe en los pasos siguientes:
- TransferObjectData recibe un puntero a un búfer de tamaño pdwSize bytes.
- La aplicación obtiene un bloque de datos que se van a enviar al dispositivo, normalmente leyendo datos de un archivo, y rellena el búfer recibido con hasta pdwSize bytes. Debería modificar pdwSize (si es necesario) para reflejar cuántos bytes se agregaron al búfer.
- La aplicación crea un MAC de todos los parámetros del método.
- La aplicación cifra los datos en el búfer mediante CSecureChannelClient::EncryptParam.
- TransferObjectData devuelve S_OK para indicar que hay más datos o S_FALSE para indicar que no hay más datos. Si la aplicación devuelve WMDM_E_USER_CANCELLED, se cancela la operación de escritura y el Administrador de dispositivos de Windows Media llamará a End.
- El Administrador de dispositivos de Windows Media sigue llamando a TransferObjectData siempre que la aplicación devuelva S_OK.
- End Se llama para notificar que se está finalizando una escritura en el dispositivo.
Para obtener un ejemplo de código, consulte Cifrado y descifrado.
Temas relacionados