[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 반환할 수 다른 반환 값 목록은 Framework 개체 만들기 오류참조하세요.
메서드는 다른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) |