EVT_WDF_USB_READER_COMPLETION_ROUTINE 콜백 함수(wdfusb.h)
[KMDF 및 UMDF에 적용]
드라이버의 EvtUsbTargetPipeReadComplete 이벤트 콜백 함수는 연속 판독기에서 읽기 요청을 성공적으로 완료했음을 드라이버에 알릴 수 있습니다.
통사론
EVT_WDF_USB_READER_COMPLETION_ROUTINE EvtWdfUsbReaderCompletionRoutine;
void EvtWdfUsbReaderCompletionRoutine(
[in] WDFUSBPIPE Pipe,
[in] WDFMEMORY Buffer,
[in] size_t NumBytesTransferred,
[in] WDFCONTEXT Context
)
{...}
매개 변수
[in] Pipe
프레임워크 파이프 개체에 대한 핸들입니다.
[in] Buffer
디바이스의 데이터를 포함하는 버퍼를 나타내는 프레임워크 메모리 개체에 대한 핸들입니다.
[in] NumBytesTransferred
읽기 버퍼에 있는 데이터의 바이트 수입니다.
[in] Context
드라이버가 EvtUsbTargetPipeReadCompleteContext에 지정한 드라이버 정의 컨텍스트 정보는 파이프의 WDF_USB_CONTINUOUS_READER_CONFIG 구조체의 멤버를.
반환 값
없음
발언
EvtUsbTargetPipeReadComplete 콜백 함수를 등록하려면 드라이버가 함수의 주소를 WDF_USB_CONTINUOUS_READER_CONFIG 구조에 배치해야 합니다.
드라이버가 USB 파이프에 대한 연속 판독기를 만든 경우 프레임워크는 드라이버의 I/O 대상이 읽기 요청을 성공적으로 완료할 때마다 드라이버의 EvtUsbTargetPipeReadComplete 콜백 함수를 호출합니다. 콜백 함수는 I/O 대상이 읽기 요청을 완료한 IRQL에서 호출됩니다. 일반적으로 IRQL = DISPATCH_LEVEL DISPATCH_LEVEL 이상은 아닙니다. (I/O 대상이 요청을 성공적으로 완료하지 못하면 프레임워크는 드라이버의 EvtUsbTargetPipeReadersFailed 콜백 함수를 호출합니다.)
디바이스에서 읽은 데이터가 포함된 버퍼에 액세스하기 위해 드라이버는 WdfMemoryGetBuffer호출할 수 있습니다. 프레임워크는 WDF_USB_CONTINUOUS_READER_CONFIG 구조체의 HeaderLength 멤버에 의해 정의된 헤더 뒤의 버퍼에 데이터를 씁니다. WdfMemoryGetBuffer 반환하는 포인터는 헤더의 시작 부분을 가리키지만 EvtUsbTargetPipeReadComplete 콜백 함수의 NumBytesTransferred 매개 변수는 헤더 길이를 포함하지 않습니다.
기본적으로 프레임워크는 EvtUsbTargetPipeReadComplete 콜백 함수가 반환된 후 버퍼의 메모리 개체를 삭제합니다. 그러나 콜백 함수가 반환된 후에도 메모리 개체가 유효한 상태로 유지되도록 할 수 있습니다. 예를 들어 드라이버가 프레임워크 파이프 개체의 컨텍스트 공간에 개체 핸들을 저장하여 콜백 함수가 반환된 후 드라이버가 메모리 개체의 내용을 처리할 수 있도록 할 수 있습니다. 메모리 개체의 수명을 연장하려면 콜백 함수가 메모리 개체의 핸들을 WdfObjectReference전달해야 합니다. 그런 다음 프레임워크에서 개체를 삭제할 수 있도록 드라이버가 WdfObjectDereference 호출해야 합니다.
프레임워크는 다음 규칙에 따라 EvtUsbTargetPipeReadComplete 및 EvtUsbTargetPipeReadersFailed 콜백 함수에 대한 호출을 동기화합니다.
- 이러한 콜백 함수는 개별 USB 파이프에 대해 동시에 실행되지 않습니다.
- 드라이버가 여러 EvtUsbTargetPipeReadComplete 및 EvtUsbTargetPipeReadersFailed 콜백 함수를 사용하여 여러 USB 파이프에 대해 여러 연속 판독기를 만드는 경우 여러 콜백 함수가 동시에 실행될 수 있습니다.
- 드라이버가 기본 NumPendingReads 값 또는 1보다 큰 값을 지정하고 EvtUsbTargetPipeReadComplete 콜백 함수가 실행되는 동안 읽기 요청이 완료되면 프레임워크는 콜백 함수가 반환되기 전에 EvtUsbTargetPipeReadComplete 콜백 함수를 다시 호출할 수 있습니다.
- 프레임워크는 이러한 콜백 함수를 다른 콜백 함수와 동기화하지 않습니다.
드라이버는 메모리 개체 사용을 마쳤을 때 WdfObjectDereference 호출해야 합니다. 그런 다음 프레임워크는 드라이버의 EvtDestroyCallback 콜백 함수(제공된 경우)를 호출하고 메모리 개체를 삭제할 수 있습니다.
EvtUsbTargetPipeReadComplete 콜백 함수 및 USB I/O 대상에 대한 자세한 내용은 USB I/O 대상참조하세요.
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 보편적 |
최소 KMDF 버전 | 1.0 |
최소 UMDF 버전 | 2.0 |
헤더 | wdfusb.h(Wdf.h 포함) |
IRQL | <=DISPATCH_LEVEL(주의 섹션 참조) |