Driver-Created 및 Application-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를 사용하여 시작 참조하세요.

애플리케이션이 디바이스에 대한 핸들을 열면 프레임워크는 드라이버의 IQueueCallbackCreate::OnCreateFile 메서드를 호출하고 디바이스와 연결된 파일 개체의 IWDFFile 인터페이스에 대한 포인터를 제공합니다. 애플리케이션이 열린 핸들에 보내는 모든 I/O 요청은 생성된 파일 개체와 연결됩니다. 이러한 요청이 도착하면 프레임워크는 드라이버 제공 UMDF 큐 개체 인터페이스 중 하나에서 적절한 메서드를 호출합니다. 그런 다음 드라이버는 IWDFIoRequest::GetFileObject 를 호출하여 요청과 연결된 파일 개체를 확인할 수 있습니다. 드라이버는 파일 개체에서 AssignContext 를 호출하여 I/O 세션과 관련된 컨텍스트를 연결할 수 있습니다.

다음 표에서는 애플리케이션이 만드는 호출 및 드라이버가 수신하는 결과 알림을 보여 줍니다.

애플리케이션 시작 드라이버 수신

Microsoft Win32 CreateFile 함수에 대한 호출입니다.

IQueueCallbackCreate::OnCreateFile 메서드에 대한 호출입니다.

Win32 ReadFileEx, WriteFileEx 또는 DeviceIoControl 함수에 대한 호출입니다.

IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWrite 또는 IQueueCallbackDeviceIoControl::OnDeviceIoControl 메서드에 대한 호출입니다.

파일 개체에 대한 마지막 열린 핸들에 대한 Win32 CloseHandle 함수에 대한 호출입니다.

IFileCallbackCleanup::OnCleanupFile 메서드에 대한 호출입니다.

드라이버는 파일 개체와 연결된 모든 I/O 요청을 취소하거나 완료합니다.

드라이버가 정리 알림에서 반환되면 UMDF는 보류 중인 I/O 요청을 취소합니다.

정리가 완료되고 UMDF가 보류 중인 I/O 요청을 취소하면 드라이버는 IFileCallbackClose::OnCloseFile 메서드에 대한 호출을 받습니다.

시스템 구성 요소는 유니버설 Windows 앱을 대신하여 만들기 요청을 실행할 수 있습니다. 드라이버가 만들기 요청을 발급한 앱의 프로세스 ID를 결정해야 하는 경우 IWDFFile3::GetInitiatorProcessId 메서드를 호출할 수 있습니다.

드라이버에서 만든 파일 개체

드라이버가 애플리케이션과 독립적으로 I/O 요청을 만들고 스택의 다음 드라이버(기본 I/O 대상)로 보내야 하는 경우 드라이버는 IWDFDevice::CreateWdfFile 을 호출하여 IWDFDriverCreatedFile 인터페이스에 대한 포인터를 검색해야 합니다. 이 경우 다음 드라이버는 애플리케이션이 요청을 생성할 때 드라이버가 받는 것과 동일한 알림을 받습니다.

다음 표에서는 드라이버가 만드는 호출과 스택의 다음 드라이버에 대한 결과 알림을 보여 줍니다.

드라이버 시작 스택의 다음 드라이버 수신

IWDFDevice::CreateWdfFile 메서드에 대한 호출입니다.

UMDF가 만드는 파일 개체는 디바이스와 스택의 다음 디바이스 간의 I/O 세션을 나타냅니다.

IQueueCallbackCreate::OnCreateFile 메서드에 대한 호출입니다.

IWDFDevice::CreateRequest 메서드에 대한 호출입니다.

요청 형식을 지정하는 호출입니다(예: IWDFIoTarget::FormatRequestForIoctl 메서드 호출).

IWDFIoRequest::Send 메서드에 대한 호출입니다.

IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWrite 또는 IQueueCallbackDeviceIoControl::OnDeviceIoControl 메서드에 대한 호출입니다.

IWDFDriverCreatedFile::Close 메서드에 대한 호출입니다.

IFileCallbackCleanup::OnCleanupFile 메서드에 대한 호출입니다.

드라이버는 파일 개체와 연결된 모든 I/O 요청을 취소하거나 완료합니다.

드라이버가 정리 알림에서 반환되면 UMDF는 보류 중인 I/O 요청을 취소합니다.

정리가 완료되고 UMDF가 보류 중인 I/O 요청을 취소하면 드라이버는 IFileCallbackClose::OnCloseFile 메서드에 대한 호출을 받습니다.

스택의 다음 디바이스에서는 애플리케이션에서 만든 파일 개체와 상위 계층 디바이스에서 만든 파일 개체 간에 차이가 없습니다.