다음을 통해 공유


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설정합니다. importInterface TRUE 경우 요청 드라이버에서 제공하는 구조에 드라이버가 읽을 수 있는 데이터가 포함될 수 있습니다. 이 경우 다음과 같습니다.

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

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

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

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

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

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

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

요구 사항

요구 사항 가치
최소 KMDF 버전 1.0
헤더 wdfqueryinterface.h(Wdf.h 포함)

참고하십시오

EvtDeviceProcessQueryInterfaceRequest

INTERFACE

WDF_QUERY_INTERFACE_CONFIG_INIT

WdfDeviceAddQueryInterface

WdfDeviceInterfaceDereferenceNoOp

WdfDeviceInterfaceReferenceNoOp

WdfFdoQueryForInterface