프레임워크 요청 개체 만들기

프레임워크 요청 개체는 I/O 관리자가 드라이버에 보낸 I/O 요청을 나타냅니다. 프레임워크 기반 드라이버는 프레임워크 요청 개체 메서드를 호출하여 각 I/O 요청을 처리합니다.

각 I/O 요청에는 WDM IRP 구조(IRP 구조)가 포함되지만 프레임워크 기반 드라이버는 일반적으로 IRP 구조에 액세스할 필요가 없습니다.

대부분의 프레임워크 요청 개체는 프레임워크에서 만들지만 드라이버는 요청 개체를 만들 수도 있습니다.

프레임워크에서 만든 요청 개체

프레임워크 기반 드라이버가 I/O 관리자로부터 IRP(I/O 요청 패킷)를 받으면 프레임워크는 IRP를 가로채 프레임워크 요청 개체를 만듭니다. 프레임워크는 요청 개체를 I/O 큐에 배치하고 드라이버가 큐에 대한 요청 처리기를 등록한 경우 적절한 처리기를 호출합니다.

다음 다이어그램에서는 프레임워크가 읽기 작업에 대한 요청 개체를 만들 때 발생하는 단계를 보여 줍니다.

프레임워크 기반 드라이버에서 읽기 작업에 대한 요청 개체를 만드는 단계를 보여 주는 다이어그램

다음 단계는 이전 다이어그램의 숫자에 해당합니다.

  1. 사용자 모드 애플리케이션은 Microsoft Win32 ReadFile 함수를 호출하여 파일을 읽습니다.

  2. ReadFile 함수는 커널 모드에서 실행되는 I/O 관리자를 호출합니다.

  3. I/O 관리자는 IRP 구조를 할당하고 구조체에 IRP_MJ_READ 함수 코드를 저장합니다.

  4. I/O 관리자는 드라이버 x에 대한 DispatchRead 표준 드라이버 루틴을 호출하여 IRP 구조에 대한 포인터를 전달합니다. 드라이버 x 는 프레임워크 기반 드라이버이므로 프레임워크는 드라이버의 DispatchRead 루틴을 제공합니다.

  5. 프레임워크는 IRP 구조를 나타내는 요청 개체를 만듭니다. 프레임워크는 드라이버의 큐 개체 중 하나에 요청 개체를 추가합니다.

  6. 프레임워크는 드라이버의 EvtIoRead 요청 처리기를 호출하여 큐 개체 핸들과 요청 개체 핸들을 전달합니다.

드라이버에서 만든 요청 개체

프레임워크 기반 드라이버는 요청 개체를 만들 수도 있습니다. 예를 들어 드라이버는 드라이버의 I/O 대상이 한 번에 처리할 수 있는 것보다 큰 양의 데이터에 대한 읽기 또는 쓰기 요청을 수신하는 경우 요청 개체를 만들 수 있습니다. 이러한 상황에서 드라이버는 데이터를 여러 개의 작은 요청으로 나누고 추가 요청 개체를 사용하여 이러한 작은 요청을 하나 이상의 I/O 대상으로 보낼 수 있습니다.

요청 개체를 만들려면 드라이버가 WdfRequestCreate 를 호출한 다음 WdfUsbTargetPipeFormatRequestForRead와 같이 요청을 초기화하는 프레임워크 개체 메서드를 호출해야 합니다.

드라이버가 WDM 디스패치 루틴에서 WDM IRP를 받은 다음 프레임워크를 사용하여 서비스를 받거나 전달하는 경우 드라이버는 WdfRequestCreateFromIrp를 호출할 수 있습니다.