다음을 통해 공유


수동으로 파일 전송 처리

애플리케이션은 IWMDMOperation 인터페이스를 구현하여 읽기 또는 쓰기 프로세스의 일부를 관리할 수 있습니다. 디바이스에서 읽을 때 구현을 사용하면 애플리케이션이 디바이스 파일에서 원시 데이터 블록을 수신할 수 있습니다. 디바이스에 쓰기를 사용하면 애플리케이션이 원시 데이터 블록을 디바이스의 파일로 보낼 수 있습니다.

읽기 및 쓰기 작업 모두에서 IWMDMOperation::TransferObjectData 메서드는 컴퓨터와 디바이스 간에 데이터를 전달합니다. 데이터 전송 방향을 파악하려면 Windows Media Device Manager가 BeginRead또는 BeginWrite호출할 때 애플리케이션에서 플래그를 설정해야 합니다. End 메서드가 호출되면 애플리케이션은 이 플래그를 다시 설정해야 합니다.

메모

서비스 공급자와 디바이스가 IMDSPObject2올바르게 구현하는 경우 먼저 애플리케이션의 IWMDMOperation3::TransferObjectDataOnClearChannel 메서드를 호출합니다(구현된 경우). 이 방법은 데이터를 보다 효율적으로 전송하는 방법입니다. TransferObjectDataOnClearChannel 데이터가 암호화되지 않고 확인할 MAC 값이 없다는 점을 제외하고 TransferObjectData동일한 방식으로 처리됩니다.

 

애플리케이션이 IWMDMOperation 을 구현할 때의 읽기 및 쓰기 프로세스를 다음 섹션에서 설명합니다.

디바이스에서 읽기

디바이스에서 파일을 읽을 때 Windows Media Device Manager는 다음 IWMDMOperation 메서드를 순서대로 호출합니다.

  • BeginRead 디바이스에서 읽기가 시작되었음을 애플리케이션에 알리기 위해 호출됩니다.
  • TransferObjectData 한 번 이상 호출됩니다. 데이터 처리는 다음 단계에 설명되어 있습니다.
    1. TransferObjectData 는 크기가 pdwSize 바이트인 데이터 버퍼, pData를 수신하고, 들어오는 데이터를 확인하기 위한 MAC를 포함합니다.
    2. 애플리케이션은 들어오는 데이터 MAC을 사용하여 들어오는 매개 변수를 확인합니다.
    3. 애플리케이션은 pData 데이터의 암호를 해독하고 최대한 많이 읽고, 반환된 pdwSize 값을 수정하여 실제로 읽은 바이트 수를 나타냅니다.
    4. 애플리케이션은 CSecureChannelClient::D ecryptParam사용하여 데이터의 암호를 해독하고 필요에 따라 저장하거나 사용합니다.
    5. TransferObjectData S_OK 반환합니다.
    6. Windows Media Device Manager는 애플리케이션이 파일에서 모든 데이터를 읽거나 애플리케이션이 작업을 취소하기 위해 WMDM_E_USER_CANCELLED 반환할 때까지 TransferObjectData 계속 호출합니다(이 경우 읽기가 취소되고 Windows Media Device Manager는 End호출).
  • 종료 디바이스에서 읽기가 종료되었음을 애플리케이션에 알리기 위해 호출됩니다.

장치에 쓰기

디바이스에 파일을 쓸 때 Windows Media Device Manager는 다음 IWMDMOperation 메서드를 순서대로 호출합니다.

  • GetObjectName 호출되어 애플리케이션이 새 스토리지의 이름을 지정할 수 있도록 합니다. 이 메서드는 애플리케이션에서 Insert 메서드에 이름을 지정하지 않은 경우에만 호출됩니다.
  • GetObjectAttributes 호출하여 애플리케이션이 디바이스의 새 스토리지에 대한 특성을 지정할 수 있도록 합니다.
  • BeginWrite 디바이스에 쓰기가 시작되었음을 알리기 위해 호출됩니다.
  • GetObjectTotalSize 호출되어 디바이스에 기록되는 개체의 총 크기를 검색하고, 전송을 최적화할 수 있도록 하고, 파일이 디바이스에 비해 너무 큰 경우 Windows Media Device Manager에서 전송을 취소할 수 있는 기회를 제공합니다.
  • TransferObjectData 한 번 이상 호출됩니다. 데이터 처리는 다음 단계에 설명되어 있습니다.
    1. TransferObjectData는 크기가 pdwSize 바이트인 버퍼에 대한 포인터를 받습니다.
    2. 애플리케이션은 일반적으로 파일에서 데이터를 읽어 디바이스로 보낼 데이터 블록을 가져오고 수신된 버퍼를 최대 pdwSize 바이트로 채웁니다. 필요한 경우 pdwSize 수정하여 버퍼에 추가된 바이트 수를 반영해야 합니다.
    3. 애플리케이션은 모든 메서드 매개 변수의 MAC을 만듭니다.
    4. 애플리케이션은 CSecureChannelClient::EncryptParam사용하여 버퍼의 데이터를 암호화합니다.
    5. TransferObjectData 더 많은 데이터가 있음을 나타내기 위해 S_OK 반환하거나 더 이상 데이터가 없음을 나타내는 S_FALSE 반환합니다. 애플리케이션이 WMDM_E_USER_CANCELLED 반환하면 쓰기 작업이 취소되고 Windows Media Device Manager에서 엔드호출합니다.
    6. Windows Media Device Manager는 애플리케이션이 S_OK 반환하는 한 TransferObjectData 계속 호출합니다.
  • 엔드 디바이스에 쓰기가 종료되었음을 알리기 위해 호출됩니다.

코드 예제는 암호화 및 암호 해독참조하세요.

Windows Media Device Manager 애플리케이션 만들기