WdfDeviceMiniportCreate 함수(wdfminiport.h)

[KMDF에만 적용]

WdfDeviceMiniportCreate 메서드는 미니포트 드라이버에서 사용할 수 있는 프레임워크 디바이스 개체를 만듭니다.

구문

NTSTATUS WdfDeviceMiniportCreate(
  [in]           WDFDRIVER              Driver,
  [in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
  [in]           PDEVICE_OBJECT         DeviceObject,
  [in, optional] PDEVICE_OBJECT         AttachedDeviceObject,
  [in, optional] PDEVICE_OBJECT         Pdo,
  [out]          WDFDEVICE              *Device
);

매개 변수

[in] Driver

WdfDriverCreate에 대한 이전 호출에서 가져온 드라이버의 프레임워크 드라이버 개체에 대한 핸들입니다.

[in, optional] Attributes

새 개체에 대한 특성을 포함하는 호출자가 할당한 WDF_OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 WDF_NO_OBJECT_ATTRIBUTES 수 있습니다.

[in] DeviceObject

미니포트 드라이버의 FDO(기능 디바이스 개체)를 나타내는 WDM DEVICE_OBJECT 구조체에 대한 포인터입니다.

[in, optional] AttachedDeviceObject

디바이스 스택의 다음 하위 디바이스 개체를 나타내는 WDM DEVICE_OBJECT 구조체에 대한 포인터입니다.

[in, optional] Pdo

디바이스의 PDO(물리적 디바이스 개체)를 나타내는 WDM DEVICE_OBJECT 구조체에 대한 포인터입니다.

[out] Device

새 프레임워크 디바이스 개체에 대한 핸들을 수신하는 위치에 대한 포인터입니다.

반환 값

WdfDeviceMiniportCreate 메서드에 오류가 발생하지 않으면 STATUS_SUCCESS 반환합니다. 추가 반환 값은 다음과 같습니다.

반환 코드 설명
STATUS_INSUFFICIENT_RESOURCES
디바이스 개체를 할당할 수 없습니다.
 

WdfDeviceMiniportCreate에서 반환할 수 있는 다른 반환 값 목록은 프레임워크 개체 만들기 오류를 참조하세요.

메서드는 다른 NTSTATUS 값을 반환할 수 있습니다.

드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.

설명

미니포트 드라이버가 프레임워크를 사용하는 경우 미니포트 드라이버는 포트 드라이버가 디바이스를 사용할 수 있음을 알릴 때 WdfDeviceMiniportCreate 를 호출해야 합니다. 미니포트 드라이버는 WdfDeviceCreate를 호출하지 않습니다.

미니포트 드라이버는 해당 포트 드라이버에서 DeviceObject, AttachedDeviceObjectPDO 포인터를 받을 수 있습니다. 예를 들어 NDIS 미니포트 드라이버는 NdisMGetDeviceProperty를 호출하여 이러한 포인터를 가져올 수 있습니다.

다음 제한 사항은 미니포트 드라이버가 WdfDeviceMiniportCreate를 호출하여 가져오는 프레임워크 디바이스 개체에 적용됩니다.

  • 디바이스 개체가 나타내는 디바이스는 플러그 앤 플레이 지원해야 합니다.
  • 디바이스 개체는 디바이스 개체의 이벤트 콜백 함수를 지원하지 않습니다. 따라서 포트 드라이버는 모든 플러그 앤 플레이(PnP) 및 전원 관리 작업을 처리해야 합니다.
  • 디바이스 개체 핸들을 WdfWmiProviderCreate에 전달할 수 없으므로 포트 드라이버는 WMI(Windows Management Instrumentation)에 필요한 지원을 제공해야 합니다.
  • 디바이스 개체 핸들을 WdfIoQueueCreate에 전달할 수 없으므로 프레임워크는 미니포트 드라이버에 대한 I/O 큐를 지원하지 않습니다.
  • 디바이스 개체 핸들을 WdfInterruptCreate에 전달할 수 없으므로 프레임워크는 미니포트 드라이버에 대한 인터럽트 개체를 지원하지 않습니다.
  • WdfDeviceGetIoTarget, WdfDeviceWdmGetDeviceObject, WdfDeviceWdmGetAttachedDeviceWdfDeviceWdmGetPhysicalDevice를 제외한 모든 일반 프레임워크 디바이스 개체 메서드에 디바이스 개체 핸들을 전달할 수 없습니다.
  • WdfFdoQueryForInterface를 제외한 모든 프레임워크 FDO 메서드에는 디바이스 개체 핸들을 전달할 수 없습니다.
  • 디바이스 개체 핸들은 프레임워크 PDO 메서드 또는 WdfChildListCreate에 전달할 수 없으므로 미니포트 드라이버는 버스 드라이버가 될 수 없습니다.
  • 결국 드라이버는 WdfObjectDelete 를 호출하여 WdfDeviceMiniportCreate 가 만드는 디바이스 개체를 삭제해야 합니다.
WdfDeviceMiniportCreate에서 만드는 프레임워크 디바이스 개체는 이후에 생성된 프레임워크 개체에 대한 부모 개체로 사용할 수 있습니다.

I/O 요청을 I/O 대상에 보내기 위해 미니포트 드라이버는 디바이스 개체 핸들을 WdfDeviceGetIoTarget, WdfIoTargetCreate 또는 WdfUsbTargetDeviceCreateWithParameters에 전달할 수 있습니다.

미니포트 드라이버는 디바이스가 DMA 작업을 지원하는 경우 디바이스 개체 핸들을 WdfDmaEnablerCreate 에 전달할 수 있습니다.

미니포트 드라이버에 대한 자세한 내용은 미니포트 드라이버에서 Kernel-Mode 드라이버 프레임워크 사용을 참조하세요.

예제

다음 코드 예제에서는 NdisMGetDeviceProperty 를 호출하여 DeviceObject, AttachedDeviceObjectPDO 포인터를 가져옵니다. 는 디바이스 개체의 컨텍스트 공간을 초기화하고 미니포트 디바이스 개체를 만듭니다.

WDF_OBJECT_ATTRIBUTES  ObjectAttributes;

NdisMGetDeviceProperty(
                       MiniportAdapterHandle,
                       &Adapter->Pdo,
                       &Adapter->Fdo,
                       &Adapter->NextDeviceObject,
                       NULL,
                       NULL
                       );
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
                                        &ObjectAttributes,
                                        WDF_DEVICE_INFO
                                        );
ntStatus = WdfDeviceMiniportCreate(
                                   WdfGetDriver(),
                                   &ObjectAttributes,
                                   Adapter->Fdo,
                                   Adapter->NextDeviceObject,
                                   Adapter->Pdo,
                                   &Adapter->WdfDevice
                                   );
if (!NT_SUCCESS (ntStatus)) {
    Status = NDIS_STATUS_FAILURE;
    break;
}

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
머리글 wdfminiport.h(Wdfminiport.h 포함)
라이브러리 Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조)
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

추가 정보

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WdfDeviceCreate

WdfDriverMiniportUnload