共用方式為


手動處理檔案傳輸

您的應用程式可以實作 IWMDMOperation 介面來管理讀取或寫入過程的一部分。 在從裝置讀取時,實作可讓應用程式接收來自裝置檔案的原始數據區塊。 在寫入裝置上,它可讓應用程式將原始數據的區塊傳送到裝置上的檔案。

在讀取和寫入作業中,IWMDMOperation::TransferObjectData 方法會在計算機與裝置之間傳遞數據。 若要知道數據傳輸的方向,當 Windows Media 設備管理器 呼叫 BeginReadBeginWrite時,您的應用程式必須設定旗標。 呼叫 End 方法時,應用程式應該重設此旗標。

注意

如果服務提供者和裝置正確地實作 IMDSPObject2,則會在實作時先呼叫應用程式的 IWMDMOperation3::TransferObjectDataOnClearChannel 方法。 此方法是傳輸數據更有效率的方式。 TransferObjectDataOnClearChannel 的處理方式與 TransferObjectData相同,不同之處在於數據永遠不會加密,而且沒有要驗證的 MAC 值。

 

下列各節描述程式的讀取與寫入過程,當您的應用程式實作 IWMDMOperation時。

從裝置讀取

從裝置讀取檔案時,Windows Media 設備管理員會依序呼叫下列 IWMDMOperation 方法:

  • BeginRead 呼叫以通知應用程式,開始從裝置進行讀取。
  • TransferObjectData 呼叫一或多次。 下列步驟說明資料處理:
    1. TransferObjectData 會接收緩衝區,pData、大小 pdwSize 位元組、填滿數據,以及用來驗證傳入數據的 MAC。
    2. 應用程式會使用傳入資料 MAC 來驗證傳入參數。
    3. 應用程式會盡可能解密和讀取 pData 中的數據,並修改 pdwSize 傳回的值,以指出實際讀取的位元組數目。
    4. 應用程式會使用 CSecureChannelClient::D ecryptParam解密數據,並視需要儲存或使用它。
    5. TransferObjectData 會傳回S_OK。
    6. Windows Media 設備管理員會繼續呼叫 TransferObjectData,直到應用程式已讀取檔案中的所有數據,或應用程式傳回WMDM_E_USER_CANCELLED來取消作業(在此情況下已取消讀取,而 Windows Media 設備管理器會呼叫 End)。
  • End 呼叫,以通知應用程式從裝置讀取結束。

寫入裝置

將檔案寫入裝置時,Windows Media 設備管理員會依序呼叫下列 IWMDMOperation 方法:

  • GetObjectName 呼叫,以允許應用程式指定新記憶體的名稱。 只有在應用程式未在 Insert 方法中指定名稱時,才會呼叫此方法。
  • GetObjectAttributes 呼叫,以允許應用程式指定裝置上新記憶體的屬性。
  • BeginWrite 呼叫以通知開始向裝置寫入。
  • GetObjectTotalSize 呼叫 以擷取寫入裝置的物件大小總計、啟用傳輸的優化,以及讓 Windows 媒體設備管理器有機會在檔案對裝置而言太大時取消傳輸。
  • TransferObjectData 呼叫一或多次。 下列步驟說明資料處理:
    1. TransferObjectData 會接收一個指向大小為 pdwSize 位元組的緩衝區的指標。
    2. 應用程式會取得要傳送至裝置的數據區塊,通常是透過從檔案讀取數據,並將接收的緩衝區填入最多 pdwSize 個字節。 它應修改 pdwSize(如有必要),以反映新增至緩衝區的位元組數。
    3. 應用程式會建立所有方法參數的 MAC。
    4. 應用程式會使用 CSecureChannelClient::EncryptParam來加密緩衝區中的數據。
    5. TransferObjectData 會傳回S_OK,表示有更多數據,或S_FALSE表示沒有更多數據。 如果應用程式傳回WMDM_E_USER_CANCELLED,則會取消寫入作業,而 Windows 媒體設備管理員會呼叫 End
    6. 只要應用程式傳回S_OK,Windows 媒體設備管理員會繼續呼叫 TransferObjectData
  • End 呼叫,以通知裝置的寫入即將結束。

如需程式代碼範例,請參閱 加密和解密

建立 Windows 媒體設備管理員應用程式