Manuelles Behandeln von Dateiübertragungen

Ihre Anwendung kann die IWMDMOperation-Schnittstelle implementieren, um einen Teil des Lese- oder Schreibvorgangs zu verwalten. Auf einem Gerät, von dem gelesen wird, ermöglicht die Implementierung der Anwendung das Empfangen von Rohdatenblöcken aus einer Gerätedatei. Auf einem Gerät, auf das geschrieben wird, ermöglicht sie der Anwendung, Blöcke von Rohdaten an eine Datei auf dem Gerät zu senden.

In Lese- und Schreibvorgängen übergibt die IWMDMOperation::TransferObjectData-Methode die Daten zwischen dem Computer und dem Gerät. Um die Richtung der Datenübertragung zu kennen, muss Ihre Anwendung ein Kennzeichen festlegen, wenn Windows Media Geräte-Manager BeginRead oder BeginWrite aufruft. Wenn die End-Methode aufgerufen wird, sollte die Anwendung dieses Flag zurücksetzen.

Hinweis

Wenn der Dienstanbieter und das Gerät IMDSPObject2 ordnungsgemäß implementieren, ruft es zuerst die IWMDMMOperation3::TransferObjectDataOnClearChannel-Methode der Anwendung auf, falls implementiert. Diese Methode ist zum Übertragen von Daten effizienter. TransferObjectDataOnClearChannel wird auf die gleiche Weise wie TransferObjectData behandelt, mit der Ausnahme, dass die Daten nie verschlüsselt sind und keine zu überprüfenden MAC-Werte haben.

 

In den folgenden Abschnitten werden sowohl der Lese- als auch der Schreibvorgang beschrieben, wenn Ihre Anwendung IWMDMOperation implementiert.

Lesen von einem Gerät

Beim Lesen einer Datei von einem Gerät ruft Windows Media-Geräte-Manager die folgenden IWMDMOperation-Methoden in dieser Reihenfolge auf:

  • BeginRead: Wird aufgerufen, um die Anwendung zu benachrichtigen, dass ein Lesevorgang vom Gerät gestartet wird.
  • TransferObjectData: Wird mindestens ein Mal aufgerufen. Dieser Verarbeitung der Daten wird in den folgenden Schritten beschrieben:
    1. TransferObjectData empfängt einen Puffer, pData, mit der Größe pdwSize Bytes, gefüllt mit Daten und einem MAC, um die eingehenden Daten zu überprüfen.
    2. Die Anwendung überprüft die eingehenden Parameter mit dem eingehenden Daten-MAC.
    3. Die Anwendung entschlüsselt und liest so viele Daten in pData wie möglich, und ändert den zurückgegebenen Wert von pdwSize, um anzugeben, wie viele Bytes tatsächlich gelesen wurden.
    4. Die Anwendung entschlüsselt die Daten mithilfe von CSecureChannelClient::D ecryptParam und speichert sie nach Bedarf oder verwendet sie.
    5. TransferObjectData gibt S_OK zurück.
    6. Windows Media-Geräte-Manager ruft TransferObjectData weiterhin auf, bis die Anwendung alle Daten aus der Datei gelesen hat, oder die Anwendung gibt WMDM_E_USER_CANCELLED zurück, um den Vorgang abzubrechen (in diesem Fall wird der Lesevorgang abgebrochen, und Windows Media-Geräte-Manager ruft End auf).
  • End: Wird aufgerufen, um die Anwendung zu benachrichtigen, dass ein Lesevorgang vom Gerät beendet wird.

Schreiben auf ein Gerät

Beim Schreiben einer Datei auf ein Gerät ruft Windows Media-Geräte-Manager die folgenden IWMDMOperation-Methoden in dieser Reihenfolge auf:

  • GetObjectName: Wird aufgerufen, damit die Anwendung einen Namen für den neuen Speicher angeben kann. Diese Methode wird nur aufgerufen, wenn die Anwendung keinen Namen in der Insert-Methode angegeben hat.
  • GetObjectAttributes: Wird aufgerufen, damit die Anwendung Attribute für den neuen Speicher auf dem Gerät angeben kann.
  • BeginWrite: Wird aufgerufen, um zu benachrichtigen, dass ein Schreibzugriff auf das Gerät beginnt.
  • GetObjectTotalSize: Wird aufgerufen, um die Gesamtgröße des Objekts abzurufen, das auf das Gerät geschrieben wird, um die Optimierung der Übertragung zu ermöglichen und Windows Media-Geräte-Manager auch die Möglichkeit zu geben, die Übertragung abzubrechen, wenn die Datei für das Gerät zu groß ist.
  • TransferObjectData: Wird mindestens ein Mal aufgerufen. Dieser Verarbeitung der Daten wird in den folgenden Schritten beschrieben:
    1. TransferObjectData empfängt einen Zeiger auf einen Puffer der Größe pdwSize Bytes.
    2. Die Anwendung ruft einen Datenblock ab, der an das Gerät gesendet werden soll, in der Regel durch Lesen von Daten aus einer Datei, und füllt den empfangenen Puffer mit bis zu pdwSize Bytes. pdwSize sollte (falls erforderlich) geändert werden, um anzugeben, wie viele Bytes dem Puffer hinzugefügt wurden.
    3. Die Anwendung erstellt einen MAC aller Methodenparameter.
    4. Die Anwendung verschlüsselt die Daten im Puffer mit CSecureChannelClient::EncryptParam.
    5. TransferObjectData gibt S_OK zurück, um anzugeben, dass mehr Daten vorhanden sind, oder S_FALSE, um anzugeben, dass keine weiteren Daten vorhanden sind. Wenn die Anwendung WMDM_E_USER_CANCELLED zurückgibt, wird der Schreibvorgang abgebrochen, und Windows Media-Geräte-Manager ruft End auf.
    6. Windows Media-Geräte-Manager ruft TransferObjectData weiterhin auf, solange die Anwendung S_OK zurückgibt.
  • End: Wird aufgerufen, um zu benachrichtigen, dass ein Schreibzugriff auf das Gerät beendet ist.

Ein Codebeispiel finden Sie unter Verschlüsselung und Entschlüsselung.

Erstellen einer Windows Media-Geräte-Manager-Anwendung