수동으로 파일 전송 처리
애플리케이션은 IWMDMOperation 인터페이스를 구현하여 읽기 또는 쓰기 프로세스의 일부를 관리할 수 있습니다. 디바이스에서 읽을 때 구현을 사용하면 애플리케이션이 디바이스 파일에서 원시 데이터 블록을 수신할 수 있습니다. 디바이스에 쓰기를 사용하면 애플리케이션이 원시 데이터 블록을 디바이스의 파일로 보낼 수 있습니다.
읽기 및 쓰기 작업 모두에서 IWMDMOperation::TransferObjectData 메서드는 컴퓨터와 디바이스 간에 데이터를 전달합니다. 데이터 전송 방향을 파악하려면 Windows Media Device Manager가 BeginRead또는 BeginWrite호출할 때 애플리케이션에서 플래그를 설정해야 합니다. End 메서드가 호출되면 애플리케이션은 이 플래그를 다시 설정해야 합니다.
메모
서비스 공급자와 디바이스가 IMDSPObject2올바르게 구현하는 경우 먼저 애플리케이션의 IWMDMOperation3::TransferObjectDataOnClearChannel 메서드를 호출합니다(구현된 경우). 이 방법은 데이터를 보다 효율적으로 전송하는 방법입니다. TransferObjectDataOnClearChannel 데이터가 암호화되지 않고 확인할 MAC 값이 없다는 점을 제외하고 TransferObjectData동일한 방식으로 처리됩니다.
애플리케이션이 IWMDMOperation 을 구현할 때의 읽기 및 쓰기 프로세스를 다음 섹션에서 설명합니다.
디바이스에서 읽기
디바이스에서 파일을 읽을 때 Windows Media Device Manager는 다음 IWMDMOperation 메서드를 순서대로 호출합니다.
- BeginRead 디바이스에서 읽기가 시작되었음을 애플리케이션에 알리기 위해 호출됩니다.
-
TransferObjectData 한 번 이상 호출됩니다. 데이터 처리는 다음 단계에 설명되어 있습니다.
- TransferObjectData 는 크기가 pdwSize 바이트인 데이터 버퍼, pData를 수신하고, 들어오는 데이터를 확인하기 위한 MAC를 포함합니다.
- 애플리케이션은 들어오는 데이터 MAC을 사용하여 들어오는 매개 변수를 확인합니다.
- 애플리케이션은 pData 데이터의 암호를 해독하고 최대한 많이 읽고, 반환된 pdwSize 값을 수정하여 실제로 읽은 바이트 수를 나타냅니다.
- 애플리케이션은 CSecureChannelClient::D ecryptParam사용하여 데이터의 암호를 해독하고 필요에 따라 저장하거나 사용합니다.
- TransferObjectData S_OK 반환합니다.
- 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 한 번 이상 호출됩니다. 데이터 처리는 다음 단계에 설명되어 있습니다.
- TransferObjectData는 크기가 pdwSize 바이트인 버퍼에 대한 포인터를 받습니다.
- 애플리케이션은 일반적으로 파일에서 데이터를 읽어 디바이스로 보낼 데이터 블록을 가져오고 수신된 버퍼를 최대 pdwSize 바이트로 채웁니다. 필요한 경우 pdwSize 수정하여 버퍼에 추가된 바이트 수를 반영해야 합니다.
- 애플리케이션은 모든 메서드 매개 변수의 MAC을 만듭니다.
- 애플리케이션은 CSecureChannelClient::EncryptParam사용하여 버퍼의 데이터를 암호화합니다.
- TransferObjectData 더 많은 데이터가 있음을 나타내기 위해 S_OK 반환하거나 더 이상 데이터가 없음을 나타내는 S_FALSE 반환합니다. 애플리케이션이 WMDM_E_USER_CANCELLED 반환하면 쓰기 작업이 취소되고 Windows Media Device Manager에서 엔드호출합니다.
- Windows Media Device Manager는 애플리케이션이 S_OK 반환하는 한 TransferObjectData 계속 호출합니다.
- 엔드 디바이스에 쓰기가 종료되었음을 알리기 위해 호출됩니다.
코드 예제는 암호화 및 암호 해독참조하세요.
관련 항목