Compartir a través de


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:
    1. TransferObjectData recibe un búfer, pData, de tamaño pdwSize bytes, rellenado con datos y un MAC para comprobar los datos entrantes.
    2. La aplicación comprueba los parámetros entrantes con el MAC de datos entrantes.
    3. 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.
    4. La aplicación descifra los datos mediante CSecureChannelClient::DecryptParam, y los almacena o utiliza, según sea necesario.
    5. TransferObjectData devuelve S_OK.
    6. 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:
    1. TransferObjectData recibe un puntero a un búfer de tamaño pdwSize bytes.
    2. 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.
    3. La aplicación crea un MAC de todos los parámetros del método.
    4. La aplicación cifra los datos en el búfer mediante CSecureChannelClient::EncryptParam.
    5. 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.
    6. 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.

Creación de una aplicación del Administrador de dispositivos de Windows Media