WDF_QUERY_INTERFACE_CONFIG 구조체(wdfqueryinterface.h)

[KMDF에만 적용]

WDF_QUERY_INTERFACE_CONFIG 구조체는 드라이버 정의 인터페이스를 설명합니다.

구문

typedef struct _WDF_QUERY_INTERFACE_CONFIG {
  ULONG                                          Size;
  PINTERFACE                                     Interface;
  const GUID                                     *InterfaceType;
  BOOLEAN                                        SendQueryToParentStack;
  PFN_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST EvtDeviceProcessQueryInterfaceRequest;
  BOOLEAN                                        ImportInterface;
} WDF_QUERY_INTERFACE_CONFIG, *PWDF_QUERY_INTERFACE_CONFIG;

멤버

Size

이 구조체의 크기(바이트)입니다.

Interface

드라이버 정의 인터페이스를 설명하는 INTERFACE 구조체에 대한 포인터입니다.

InterfaceType

인터페이스를 식별하는 GUID에 대한 포인터입니다.

참고

기존 인터페이스의 새 버전을 도입할 때 INTERFACE 구조의크기 또는 버전 필드를 수정하는 대신 새 GUID를 만듭니다. 자세한 내용은 Driver-Defined 인터페이스 사용을 참조하세요.

SendQueryToParentStack

TRUE이면 드라이버가 WdfDeviceAddQueryInterface를 호출할 때 PDO(물리적 디바이스 개체)를 나타내는 디바이스 개체를 지정하는 경우 프레임워크는 부모 디바이스의 드라이버 스택 맨 위에 인터페이스에 대한 요청을 보냅니다. 이 멤버가 FALSE이거나 디바이스 개체가 PDO를 나타내지 않는 경우 프레임워크는 부모 디바이스의 스택에 요청을 보내지 않습니다. 자세한 내용은 아래 설명 부분을 참조하십시오.

EvtDeviceProcessQueryInterfaceRequest

다른 드라이버가 인터페이스를 요청할 때 호출되는 드라이버의 EvtDeviceProcessQueryInterfaceRequest 이벤트 콜백 함수에 대한 포인터입니다.

ImportInterface

TRUE이면 인터페이스는 인터페이스를 요청하는 드라이버와 드라이버 간의 양방향 통신을 지원합니다.

이 멤버가 FALSE이면 인터페이스는 드라이버에서 인터페이스를 요청하는 드라이버로의 단방향 통신을 지원합니다.

설명

WDF_QUERY_INTERFACE_CONFIG 구조체는 WdfDeviceAddQueryInterface 메서드에 대한 입력으로 사용됩니다.

드라이버가 내보내는 각 드라이버 정의 인터페이스에 대해 인터페이스를 나타내는 WDF_QUERY_INTERFACE_CONFIG 구조를 할당해야 합니다. 다른 드라이버는 WdfFdoQueryForInterface를 호출하여 인터페이스에 대한 액세스를 요청할 수 있습니다.

인터페이스가 요청 드라이버와 드라이버 간의 양방향 통신을 지원하도록 하려면 ImportInterface 멤버를 TRUE로 설정합니다. ImportInterfaceTRUE이면 요청 드라이버에서 제공하는 구조에 드라이버가 읽을 수 있는 데이터가 포함될 수 있습니다. 이 경우 다음과 같습니다.

  • EvtDeviceProcessQueryInterfaceRequest 콜백 함수가 필요하며 요청 드라이버가 제공하는 인터페이스 구조를 초기화해야 합니다.
  • EvtDeviceProcessQueryInterfaceRequest 콜백 함수는 요청 드라이버에 인터페이스를 제공하므로 WDF_QUERY_INTERFACE_CONFIG인터페이스 멤버는 NULL일 수 있습니다. NULL이 아닌 포인터를 제공하는 경우 프레임워크는 요청 드라이버가 제공하는 크기 및 버전 값이 등록된 INTERFACE 구조의 값과 같거나 큰지 확인합니다. 이러한 값 중 하나가 더 작은 경우 프레임워크는 요청을 거부합니다. 인터페이스에 대한 값을 제공하지 않으면 EvtDeviceProcessQueryInterfaceRequest 콜백 함수가 해당 값을 확인해야 합니다.

인터페이스가 드라이버에서 요청하는 드라이버로의 단방향 통신만 지원하도록 하려면 ImportInterfaceFALSE로 설정됩니다. 요청 드라이버가 제공하는 인터페이스 구조는 드라이버가 제공하는 데이터만 받을 수 있습니다. 이 경우 다음과 같습니다.
  • EvtDeviceProcessQueryInterfaceRequest 콜백 함수는 선택 사항입니다.
  • 인터페이스 멤버는 NULL일 수 없습니다. 프레임워크는 요청 드라이버가 제공하는 GUID, 크기 및 버전 값이 제공한 값과 일치하는지 확인하고 값이 일치하지 않으면 프레임워크에서 요청을 거부합니다. 값이 유효한 경우 프레임워크는 인터페이스에 제공하는 값을 사용하여 요청 드라이버가 제공하는 인터페이스 구조를 초기화합니다.
또한 SendQueryToParentStack 멤버의 값이 TRUE인 경우 인터페이스 멤버는 NULL일 수 있습니다.

Interface 멤버가 NULL이 아닌 경우 프레임워크는 값을 내부 스토리지 공간에 복사합니다. 따라서 드라이버는 로컬 임시 스토리지 공간에서 INTERFACE 구조를 할당할 수 있습니다.

드라이버가 WdfDeviceAddQueryInterface를 호출하면 인터페이스를 FDO(기능 디바이스 개체) 또는 PDO(물리적 디바이스 개체)를 나타내는 프레임워크 디바이스 개체와 연결할 수 있습니다. 드라이버가 인터페이스를 PDO와 연결하는 경우 WDF_QUERY_INTERFACE_CONFIG 구조체의 SendQueryToParentStack 멤버를 TRUE로 설정할 수 있습니다. 프레임워크가 인터페이스에 대한 요청을 가로채면 SendQueryToParentStack 멤버를 확인하고 TRUE로 설정된 경우 프레임워크는 PDO 부모 드라이버 스택의 맨 위에 요청을 보냅니다. 결과적으로 요청은 두 개의 드라이버 스택 아래로 이동합니다. 첫째, 인터페이스를 요청하는 드라이버가 포함된 스택이고, 두 번째는 인터페이스 디바이스의 부모 스택입니다.

프레임워크는 INTERFACE 구조체InterfaceReferenceInterfaceDereference 멤버에 대한 주소를 지정하여 인터페이스와 함께 사용할 수 있는 두 가지 참조/역참조 메서드를 제공합니다. 이러한 메서드에 대한 자세한 내용은 WdfDeviceInterfaceReferenceNoOpWdfDeviceInterfaceDereferenceNoOp을 참조하세요.

드라이버는 WDF_QUERY_INTERFACE_CONFIG_INIT 호출하여 이 구조를 초기화해야 합니다.

드라이버 정의 인터페이스에 대한 자세한 내용은 Driver-Defined 인터페이스 사용을 참조하세요.

요구 사항

요구 사항
최소 KMDF 버전 1.0
머리글 wdfqueryinterface.h(Wdf.h 포함)

추가 정보

EvtDeviceProcessQueryInterfaceRequest

인터페이스

WDF_QUERY_INTERFACE_CONFIG_INIT

WdfDeviceAddQueryInterface

WdfDeviceInterfaceDereferenceNoOp

WdfDeviceInterfaceReferenceNoOp

WdfFdoQueryForInterface