Compartilhar via


Manipulando transferências de arquivo manualmente

Seu aplicativo pode implementar a interface IWMDMOperation para gerenciar parte do processo de leitura ou gravação. Em uma leitura do dispositivo, a implementação permite que o aplicativo receba blocos de dados brutos de um arquivo de dispositivo. Em uma gravação no dispositivo, ele permite que o aplicativo envie blocos de dados brutos para um arquivo no dispositivo.

Nas operações de leitura e gravação, o método IWMDMOperation::TransferObjectData passa os dados entre o computador e o dispositivo. Para saber a direção da transferência de dados, seu aplicativo deve definir um sinalizador quando o Gerenciador de Dispositivos de Mídia do Windows chamar BeginReadouBeginWrite. Quando o método End é chamado, o aplicativo deve redefinir esse sinalizador.

Observação

Se o provedor de serviços e o dispositivo implementarem corretamente o IMDSPObject2, ele primeiro chamará o método IWMDMOperation3::TransferObjectDataOnClearChannel do aplicativo, se implementado. Esse método é uma maneira mais eficiente de transferir dados. TransferObjectDataOnClearChannel é tratado da mesma maneira que TransferObjectData, exceto que os dados nunca são criptografados e não têm valores MAC para verificar.

 

As seções a seguir descrevem o processo de leitura e gravação, quando seu aplicativo implementa IWMDMOperation.

Leitura de um dispositivo

Ao ler um arquivo de um dispositivo, o Gerenciador de Dispositivos de Mídia do Windows chama os seguintes métodos IWMDMOperation na ordem:

  • BeginRead chamado para notificar o aplicativo de que uma leitura do dispositivo está começando.
  • TransferObjectData chamado uma ou mais vezes. O processamento de dados é descrito nas seguintes etapas:
    1. TransferObjectData recebe um buffer, pData, de tamanho pdwSize bytes, preenchido com dados e um MAC para verificar os dados de entrada.
    2. O aplicativo verifica os parâmetros de entrada com o MAC de dados de entrada.
    3. O aplicativo descriptografa e lê o máximo possível dos dados no pData e modifica o valor retornado de pdwSize para indicar quantos bytes foram realmente lidos.
    4. O aplicativo descriptografa os dados usando CSecureChannelClient::D ecryptParame os armazena ou os usa, conforme necessário.
    5. TransferObjectData retorna S_OK.
    6. O Gerenciador de Dispositivos de Mídia do Windows continua a chamar TransferObjectData até que o aplicativo tenha lido todos os dados do arquivo ou o aplicativo retorne WMDM_E_USER_CANCELLED cancelar a operação (nesse caso, a leitura é cancelada e o Gerenciador de Dispositivos de Mídia do Windows chama End).
  • End chamado para notificar o aplicativo de que uma leitura do dispositivo está terminando.

Gravando em um dispositivo

Ao gravar um arquivo no dispositivo, o Gerenciador de Dispositivos de Mídia do Windows chama os seguintes métodos IWMDMOperation na ordem:

  • GetObjectName chamado para permitir que o aplicativo especifique um nome para o novo armazenamento. Esse método só será chamado se o aplicativo não especificar um nome no método Insert.
  • GetObjectAttributes chamado para permitir que o aplicativo especifique atributos para o novo armazenamento no dispositivo.
  • BeginWrite chamado para notificar que uma gravação no dispositivo está começando.
  • GetObjectTotalSize chamado para recuperar o tamanho total do objeto que está sendo gravado no dispositivo, para habilitar a otimização da transferência e também para dar ao Gerenciador de Dispositivos de Mídia do Windows uma oportunidade de cancelar a transferência se o arquivo for muito grande para o dispositivo.
  • TransferObjectData chamado uma ou mais vezes. O processamento de dados é descrito nas seguintes etapas:
    1. TransferObjectData recebe um ponteiro para um buffer com tamanho de pdwSize bytes.
    2. O aplicativo obtém um bloco de dados para enviar ao dispositivo, geralmente lendo dados de um arquivo e preenche o buffer recebido com até pdwSize bytes. Ele deve modificar o pdwSize (se necessário) para refletir quantos bytes foram adicionados ao buffer.
    3. O aplicativo cria um MAC de todos os parâmetros do método.
    4. O aplicativo criptografa os dados no buffer usando CSecureChannelClient::EncryptParam.
    5. TransferObjectData retorna S_OK para indicar que há mais dados ou S_FALSE para indicar que não há mais dados. Se o aplicativo retornar WMDM_E_USER_CANCELLED, a operação de gravação será cancelada e o Gerenciador de Dispositivos de Mídia do Windows chamará End.
    6. O Gerenciador de Dispositivos de Mídia do Windows continua a chamar TransferObjectData desde que o aplicativo retorne S_OK.
  • End chamado para notificar que uma gravação no dispositivo está terminando.

Para obter um exemplo de código, consulte Criptografia e Descriptografia.

Como crir um aplicativo do Gerenciador de Dispositivos de Mídia do Windows