수동으로 파일 전송 처리

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

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

참고 항목

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

 

다음 섹션에서는 애플리케이션이 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 장치 관리자 애플리케이션이 파일에서 모든 데이터를 읽거나 애플리케이션이 작업을 취소하기 위해 WMDM_E_USER_CANCELLED 반환할 때까지 TransferObjectData를 계속 호출합니다(이 경우 읽기가 취소되고 Windows Media 장치 관리자 End를 호출).
  • 디바이스에서 읽은 항목이 종료되었음을 애플리케이션에 알리기 위한 End Called입니다.

디바이스에 쓰기

디바이스에 파일을 쓸 때 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. Windows Media 장치 관리자 애플리케이션이 S_OK 반환하는 한 TransferObjectData를 계속 호출합니다.
  • 디바이스에 쓰기가 종료되었음을 알리는 End Called입니다.

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

Windows Media 장치 관리자 애플리케이션 만들기