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