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 반환합니다. 추가 반환 값은 다음과 같습니다.
반환 코드 | 설명 |
---|---|
|
디바이스 개체를 할당할 수 없습니다. |
WdfDeviceMiniportCreate에서 반환할 수 있는 다른 반환 값 목록은 프레임워크 개체 만들기 오류를 참조하세요.
메서드는 다른 NTSTATUS 값을 반환할 수 있습니다.
드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.
설명
미니포트 드라이버가 프레임워크를 사용하는 경우 미니포트 드라이버는 포트 드라이버가 디바이스를 사용할 수 있음을 알릴 때 WdfDeviceMiniportCreate 를 호출해야 합니다. 미니포트 드라이버는 WdfDeviceCreate를 호출하지 않습니다.
미니포트 드라이버는 해당 포트 드라이버에서 DeviceObject, AttachedDeviceObject 및 PDO 포인터를 받을 수 있습니다. 예를 들어 NDIS 미니포트 드라이버는 NdisMGetDeviceProperty를 호출하여 이러한 포인터를 가져올 수 있습니다.
다음 제한 사항은 미니포트 드라이버가 WdfDeviceMiniportCreate를 호출하여 가져오는 프레임워크 디바이스 개체에 적용됩니다.
- 디바이스 개체가 나타내는 디바이스는 플러그 앤 플레이 지원해야 합니다.
- 디바이스 개체는 디바이스 개체의 이벤트 콜백 함수를 지원하지 않습니다. 따라서 포트 드라이버는 모든 플러그 앤 플레이(PnP) 및 전원 관리 작업을 처리해야 합니다.
- 디바이스 개체 핸들을 WdfWmiProviderCreate에 전달할 수 없으므로 포트 드라이버는 WMI(Windows Management Instrumentation)에 필요한 지원을 제공해야 합니다.
- 디바이스 개체 핸들을 WdfIoQueueCreate에 전달할 수 없으므로 프레임워크는 미니포트 드라이버에 대한 I/O 큐를 지원하지 않습니다.
- 디바이스 개체 핸들을 WdfInterruptCreate에 전달할 수 없으므로 프레임워크는 미니포트 드라이버에 대한 인터럽트 개체를 지원하지 않습니다.
- WdfDeviceGetIoTarget, WdfDeviceWdmGetDeviceObject, WdfDeviceWdmGetAttachedDevice 및 WdfDeviceWdmGetPhysicalDevice를 제외한 모든 일반 프레임워크 디바이스 개체 메서드에 디바이스 개체 핸들을 전달할 수 없습니다.
- WdfFdoQueryForInterface를 제외한 모든 프레임워크 FDO 메서드에는 디바이스 개체 핸들을 전달할 수 없습니다.
- 디바이스 개체 핸들은 프레임워크 PDO 메서드 또는 WdfChildListCreate에 전달할 수 없으므로 미니포트 드라이버는 버스 드라이버가 될 수 없습니다.
- 결국 드라이버는 WdfObjectDelete 를 호출하여 WdfDeviceMiniportCreate 가 만드는 디바이스 개체를 삭제해야 합니다.
I/O 요청을 I/O 대상에 보내기 위해 미니포트 드라이버는 디바이스 개체 핸들을 WdfDeviceGetIoTarget, WdfIoTargetCreate 또는 WdfUsbTargetDeviceCreateWithParameters에 전달할 수 있습니다.
미니포트 드라이버는 디바이스가 DMA 작업을 지원하는 경우 디바이스 개체 핸들을 WdfDmaEnablerCreate 에 전달할 수 있습니다.
미니포트 드라이버에 대한 자세한 내용은 미니포트 드라이버에서 Kernel-Mode 드라이버 프레임워크 사용을 참조하세요.
예제
다음 코드 예제에서는 NdisMGetDeviceProperty 를 호출하여 DeviceObject, AttachedDeviceObject 및 PDO 포인터를 가져옵니다. 는 디바이스 개체의 컨텍스트 공간을 초기화하고 미니포트 디바이스 개체를 만듭니다.
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) |