共用方式為


手動處理檔案傳輸

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

在讀取和寫入作業中 ,IWMDMOperation::TransferObjectData 方法會傳遞電腦與裝置之間的資料。 若要知道資料傳輸的方向,當 Windows Media 裝置管理員呼叫 BeginRead BeginWrite 時,您的應用程式必須設定旗標。 呼叫 End 方法時,應用程式應該重設此旗標。

注意

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

 

下列各節說明讀取和寫入程式,當您的應用程式實作 IWMDMOperation 時。

從裝置讀取

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

  • BeginRead 呼叫以通知應用程式從裝置讀取開始。
  • TransferObjectData 呼叫一或多次。 下列步驟說明資料處理:
    1. TransferObjectData 會接收大小 pdwSize 位元組的 緩衝區 pData 、填滿資料,以及 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 Media 裝置管理員如果檔案太大而無法讓裝置取消傳輸的機會。
  • TransferObjectData 呼叫一或多次。 下列步驟說明資料處理:
    1. TransferObjectData 會接收 pdwSize 位元組大小的 緩衝區指標。
    2. 應用程式會取得要傳送至裝置的資料區塊,通常是透過從檔案讀取資料,並將接收的緩衝區填入最多 pdwSize 位元組。 它應該修改 pdwSize (如有必要),以反映有多少位元組新增至緩衝區。
    3. 應用程式會建立所有方法參數的 MAC。
    4. 應用程式會使用 CSecureChannelClient::EncryptParam 來加密緩衝區中的資料。
    5. TransferObjectData 會傳回S_OK,指出有更多的資料,或S_FALSE表示沒有更多資料。 如果應用程式傳回WMDM_E_USER_CANCELLED,則會取消寫入作業,且 Windows Media 裝置管理員會呼叫 End
    6. 只要應用程式傳回S_OK,Windows Media 裝置管理員就會繼續呼叫 TransferObjectData
  • End 呼叫以通知寫入裝置即將結束。

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

建立 Windows Media 裝置管理員 應用程式