다음을 통해 공유


Driver-Created 파일 개체 만들기 및 사용

경고

UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에 새 기능이 추가되지 않으며 최신 버전의 Windows 10 UMDF 1에 대한 지원이 제한되어 있습니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다.

보관된 UMDF 1 샘플은 Windows 11 버전 22H2 - 2022년 5월 드라이버 샘플 업데이트에서 찾을 수 있습니다.

자세한 내용은 UMDF를 사용하여 시작 참조하세요.

드라이버가 애플리케이션과 독립적인 I/O 요청을 만들고 스택의 다음 드라이버(기본 I/O 대상)로 보내야 하는 경우 드라이버는 자체 파일 개체를 만들고 닫아야 합니다.

파일 개체 만들기

드라이버에서 사용할 파일 개체를 만들려면 IWDFDevice::CreateWdfFile 메서드를 호출해야 합니다. 드라이버가 IWDFDevice::CreateWdfFile을 호출하면 프레임워크는 스택의 다음 드라이버에 만들기 요청을 보냅니다. 스택의 다음 드라이버는 커널 모드 또는 사용자 모드일 수 있습니다.

이 파일 만들기 요청 처리는 WDM(Windows 드라이버 모델)에서 다릅니다. WDM에서 ZwCreateFile 함수를 호출하면 IRP 만들기가 커널 모드 스택의 맨 위로 이동합니다. 다음 그림에서는 UMDF와 WDM의 파일 만들기 요청 처리를 보여 줍니다.

umdf와 wdm의 create-file 요청 처리

IWDFDevice::CreateWdfFile을 호출하면 드라이버는 전체 스택이 시작되기 전에 파일 개체를 만든 다음 디바이스 시작 중에 I/O 요청을 보낼 수 있습니다.

스택의 다음 드라이버는 만들기 파일 요청을 처리할 수 있는지 또는 스택 아래로 요청을 추가로 전달해야 하는지를 결정해야 합니다.

IWDFDevice::CreateWdfFile을 호출한 후 드라이버는 만들기 작업을 취소할 수 없습니다.

File 개체 사용

비동기 읽기 요청을 아래에 쌓은 다음 드라이버로 보내려면 드라이버에서 다음 패턴을 사용할 수 있습니다.

  1. IWDFDevice::CreateWdfFile을 호출하여 파일 개체를 만듭니다.
  2. IWDFDevice::GetDefaultIoTarget을 호출하여 하위 수준 드라이버를 나타내는 인터페이스를 검색합니다.
  3. 형식이 지정되지 않은 IWDFIoRequest 개체를 만들려면 IWDFDevice::CreateRequest를 호출합니다.
  4. IWDFIoRequest::SetCompletionCallback을 호출하여 I/O 요청이 완료되면 프레임워크가 호출하는 OnCompletion 메서드에 대한IRequestCallbackRequestCompletion 인터페이스를 등록합니다.
  5. pFile 매개 변수의 IWDFDriverCreatedFile 인터페이스에 대한 포인터를 제공하여 IWDFIoTarget::FormatRequestForRead를 호출합니다.
  6. IWDFIoRequest::Send를 호출하여 요청을 보냅니다.

파일 개체 닫기

IWDFDevice::CreateWdfFile을 호출한 드라이버는 나중에 IWDFDriverCreatedFile::Close를 호출해야 합니다.

일반적으로 드라이버는 IPnpCallbackHardware::OnReleaseHardware 또는 IPnpCallbackSelfManagedIo::OnSelfManagedIoCleanup 콜백 메서드에서 IWDFDriverCreatedFile::Close를 호출합니다.

드라이버가 IWDFDriverCreatedFile::Close를 호출하면 프레임워크는 다음 드라이버의 IFileCallbackCleanup::OnCleanupFile 메서드를 호출합니다. 이 메서드에서 다음 드라이버는 파일 개체와 연결된 보류 중인 모든 I/O 요청을 취소하거나 완료해야 합니다. 그런 다음 프레임워크는 IWDFDevice::CreateWdfFile을 호출한 드라이버에서 만든 모든 I/O 요청을 취소합니다. 프레임워크는 스택의 낮은 드라이버가 파일 개체와 연결되었을 수 있는 I/O 요청을 취소하지 않습니다. 이러한 요청을 취소하는 것은 드라이버의 책임입니다. 파일 개체는 연결된 모든 I/O 요청이 완료된 후에만 닫힙니다.

다음으로 프레임워크는 다음 드라이버의 IFileCallbackClose::OnCloseFile 메서드를 호출합니다. 이 시점에서 프레임워크는 다음 드라이버가 이 파일 개체에 대한 추가 I/O 요청을 받지 않도록 보장합니다.

프레임워크가 OnCloseFile을 호출하면 파일 개체를 나타내는 IWDFFile 인터페이스가 삭제됩니다.

드라이버에서 만든 파일 개체가 드라이버의 디바이스 제거 메서드(예: IPnpCallbackHardware::OnReleaseHardwareIPnpCallbackSelfManagedIo::OnSelfManagedIoCleanup)가 반환된 후에도 유지되면 프레임워크는 드라이버 중지를 생성합니다. 이 문제를 해결하는 방법에 대한 자세한 내용은 UMDF가 디바이스 제거 시간에 미해결 파일을 나타내는 이유 확인 을 참조하세요.