Partager via


Gestion manuelle des transferts de fichiers

Votre application peut implémenter l'interface IWMDMOperation pour gérer une partie du processus de lecture ou d'écriture. Lors d'une lecture depuis un appareil, l'implémentation permet à l'application de recevoir des blocs de données brutes à partir d'un fichier d'appareil. Sur un périphérique d'écriture, cela permet à l'application d'envoyer des blocs de données brutes vers un fichier sur le périphérique.

Dans les opérations de lecture et d’écriture, la méthode IWMDMOperation::TransferObjectData transmet les données entre l’ordinateur et le périphérique. Pour connaître la direction du transfert de données, votre application doit définir un indicateur lorsque le Gestionnaire de périphériques Windows Media appelle BeginRead ou BeginWrite. Lorsque la méthode End est appelée, l’application doit réinitialiser cet indicateur.

Remarque

Si le fournisseur de services et l’appareil implémentent correctement IMDSPObject2, ils appelleront d’abord la méthode IWMDMOperation3::TransferObjectDataOnClearChannel de l’application, si elle est implémentée. Cette méthode est un moyen plus efficace de transférer des données. TransferObjectDataOnClearChannel est géré de la même manière que TransferObjectData, sauf que les données ne sont jamais chiffrées et n'ont aucune valeur MAC à vérifier.

 

Les sections suivantes décrivent à la fois le processus de lecture et d'écriture lorsque votre application implémente IWMDMOperation.

Lecture depuis un appareil

Lors de la lecture d'un fichier à partir d'un appareil, le Gestionnaire de périphériques Windows Media appelle les méthodes IWMDMOperation suivantes dans l'ordre :

  • BeginRead Appelé pour informer l'application qu'une lecture à partir du périphérique commence.
  • TransferObjectData Appelé une ou plusieurs fois. Le traitement des données est décrit selon les étapes suivantes :
    1. TransferObjectData reçoit un tampon, pData, de taille pdwSize octets, rempli de données, et un MAC pour vérifier les données entrantes.
    2. L'application vérifie les paramètres entrants avec le MAC des données entrantes.
    3. L'application déchiffre et lit autant de données que possible dans pData, et modifie la valeur renvoyée par pdwSize pour indiquer le nombre d'octets réellement lus.
    4. L'application déchiffre les données à l'aide de CSecureChannelClient::DecryptParam et les stocke ou les utilise, selon les besoins.
    5. TransferObjectData renvoie S_OK.
    6. Le Gestionnaire de périphériques Windows Media continue d'appeler TransferObjectData jusqu'à ce que l'application ait lu toutes les données du fichier ou que l'application renvoie WMDM_E_USER_CANCELLED pour annuler l'opération (auquel cas la lecture est annulée et le Gestionnaire de périphériques Windows Media appelle End).
  • End Appelé pour informer l'application qu'une lecture à partir du périphérique se termine.

Écrire sur un appareil

Lors de l'écriture d'un fichier sur le périphérique, le Gestionnaire de périphériques Windows Media appelle les méthodes IWMDMOperation suivantes dans l'ordre :

  • GetObjectName Appelé pour permettre à l'application de spécifier un nom pour le nouveau stockage. Cette méthode n'est appelée que si l'application n'a pas spécifié de nom dans la méthode Insert.
  • GetObjectAttributes Appelé pour permettre à l'application de spécifier des attributs pour le nouveau stockage sur l'appareil.
  • BeginWrite Appelé pour notifier qu'une écriture sur le périphérique commence.
  • GetObjectTotalSize Appelé pour récupérer la taille totale de l'objet en cours d'écriture sur le périphérique, pour permettre l'optimisation du transfert, et également pour donner au Gestionnaire de périphériques Windows Media la possibilité d'annuler le transfert si le fichier est trop volumineux pour le périphérique.
  • TransferObjectData Appelé une ou plusieurs fois. Le traitement des données est décrit selon les étapes suivantes :
    1. TransferObjectDatareçoit un pointeur vers un tampon de taille pdwSize octets.
    2. L'application obtient un bloc de données à envoyer au périphérique, généralement en lisant les données d'un fichier, et remplit le tampon reçu avec jusqu'à pdwSize octets. Il doit modifier pdwSize (si nécessaire) pour refléter le nombre d'octets ajoutés au tampon.
    3. L'application crée un MAC de tous les paramètres de la méthode.
    4. L'application chiffre les données dans la mémoire tampon à l'aide de CSecureChannelClient::EncryptParam.
    5. TransferObjectData renvoie S_OK pour indiquer qu'il n'y a plus de données, ou S_FALSE pour indiquer qu'il n'y a plus de données. Si l'application renvoie WMDM_E_USER_CANCELLED, l'opération d'écriture est annulée et le Gestionnaire de périphériques Windows Media appellera End.
    6. Le Gestionnaire de périphériques Windows Media continue d'appeler TransferObjectData tant que l'application renvoie S_OK.
  • End Appelé pour notifier qu'une écriture sur le périphérique se termine.

Pour un exemple de code, consultez Chiffrement et décryptage.

Création d'une application de Gestionnaire de périphériques Windows Media