WDF 버퍼 포인터에 해당하는 WDM

KMDF(Kernel-Mode Driver Framework) 또는 UMDF(User-Mode Driver Framework) 드라이버는 버퍼링 및 직접 I/O에 대한 I/O 버퍼를 검색하는 데 다음 메서드를 사용합니다. 달리 지정하지 않는 한 메서드는 KMDF와 UMDF 모두에 적용됩니다.

다음 표에서는 버퍼링 및 직접 I/O에 대한 IRP_MJ_READ, IRP_MJ_WRITE 및 IRP_MJ_DEVICE_CONTROL 요청에 대해 검색 메서드가 반환하는 내용을 설명합니다. 드라이버가 요청 중인 사용자 모드 프로세스의 컨텍스트에서 실행되는 동안 버퍼를 검색해야 하므로 I/O에 대한 요청은 특별한 처리가 필요하지 않습니다.

IRP_MJ_READ 요청에 대한 버퍼

읽기 요청에 대한 버퍼를 검색하기 위해 KMDF 드라이버는 WdfRequestRetrieveOutputXxx 메서드 중 하나를 호출합니다. 이러한 각 메서드가 반환하는 버퍼는 드라이버가 버퍼링된 I/O를 수행하는지 또는 직접 I/O를 수행하는지에 따라 달라집니다. 다음 표에서는 WDM 용어의 각 메서드에서 반환되는 포인터에 대해 설명합니다.

기능 버퍼링된 I/O 직접 I/O
WdfRequestRetrieveOutputBuffer Irp-ASSOCIATedIrp.SystemBuffer> MmGetSystemAddressForMdlSafe(Irp-MdlAddress>)
WdfRequestRetrieveOutputWdmMdl(KMDF에만 해당) Irp-AssociatedIrp.SystemBuffer>에 대한 MDL(메모리 설명자 목록)을 빌드하고 MDL을 반환합니다. Irp-MdlAddress>
WdfRequestRetrieveOutputMemory WDFMEMORY 개체를 반환합니다. 이 개체에서 WdfMemoryGetBuffer를 호출하여 Irp-AssociatedIrp.SystemBuffer>를 가져옵니다. WDFMEMORY 개체를 반환합니다. 이 개체에서 WdfMemoryGetBuffer를 호출하여 MmGetSystemAddressForMdlSafe(Irp-MdlAddress>)를 가져옵니다.

IRP_MJ_WRITE 요청에 대한 버퍼

쓰기 요청에 대한 버퍼를 검색하기 위해 KMDF 드라이버는 WdfRequestRetrieveInputXxx 메서드 중 하나를 호출합니다. 이러한 각 메서드가 반환하는 버퍼는 드라이버가 버퍼링된 I/O를 수행하는지 또는 직접 I/O를 수행하는지에 따라 달라집니다. 다음 표에서는 WDM 용어의 각 메서드에서 반환되는 포인터에 대해 설명합니다.

기능 버퍼링된 I/O 직접 I/O
WdfRequestRetrieveInputBuffer Irp-ASSOCIATedIrp.SystemBuffer> MmGetSystemAddressForMdlSafe(Irp-MdlAddress>)
WdfRequestRetrieveInputWdmMdl(KMDF만 해당) Irp-AssociatedIrp.SystemBuffer>용 MDL을 빌드하고 MDL을 반환합니다. Irp-MdlAddress>
WdfRequestRetrieveInputMemory WDFMEMORY 개체를 반환합니다. 이 개체에서 WdfMemoryGetBuffer를 호출하여 Irp-AssociatedIrp.SystemBuffer>를 가져옵니다. WDFMEMORY 개체를 반환합니다. 이 개체에서 WdfMemoryGetBuffer를 호출하여 MmGetSystemAddressForMdlSafe(Irp-MdlAddress>)를 가져옵니다.

IRP_MJ_DEVICE_CONTROL 요청에 대한 버퍼

디바이스 I/O 제어 요청에 대한 버퍼를 검색하기 위해 KMDF 드라이버는 WdfRequestRetrieveInputXxx 또는 WdfRequestRetrieveOutputXxx 메서드를 호출합니다. 다음 표와 같이 이러한 각 메서드가 반환하는 버퍼는 드라이버가 버퍼링 또는 직접 I/O를 수행하는지 여부에 따라 달라집니다.

기능 버퍼링된 I/O 직접 I/O
WdfRequestRetrieveInputBuffer Irp-ASSOCIATedIrp.SystemBuffer> MmGetSystemAddressForMdlSafe(Irp-MdlAddress>)
WdfRequestRetrieveInputWdmMdl(KMDF만 해당) Irp-AssociatedIrp.SystemBuffer>용 MDL을 빌드하고 MDL을 반환합니다. Irp-AssociatedIrp.SystemBuffer>용 MDL을 빌드하고 MDL을 반환합니다.
WdfRequestRetrieveInputMemory WDFMEMORY 개체를 반환합니다. 이 개체에서 WdfMemoryGetBuffer를 호출하여 Irp-AssociatedIrp.SystemBuffer>를 가져옵니다. WDFMEMORY 개체를 반환합니다. 이 개체에서 WdfMemoryGetBuffer를 호출하여 MmGetSystemAddressForMdlSafe(Irp-MdlAddress>)를 가져옵니다.
WdfRequestRetrieveOutputBuffer Irp-ASSOCIATedIrp.SystemBuffer> MmGetSystemAddressForMdlSafe(Irp-MdlAddress>)
WdfRequestRetrieveOutputWdmMdl(KMDF에만 해당) Irp-AssociatedIrp.SystemBuffer>에 대한 MDL(메모리 설명자 목록)을 빌드하고 MDL을 반환합니다. Irp-MdlAddress>
WdfRequestRetrieveOutputMemory WDFMEMORY 개체를 반환합니다. 이 개체에서 WdfMemoryGetBuffer를 호출하여 Irp-AssociatedIrp.SystemBuffer>를 가져옵니다. WDFMEMORY 개체를 반환합니다. 이 개체에서 WdfMemoryGetBuffer를 호출하여 MmGetSystemAddressForMdlSafe(Irp-MdlAddress>)를 가져옵니다.