IOCTL_SEND_USB_REQUEST IOCTL(usbscan.h)
제어 파이프를 사용하여 공급업체 정의 요청을 USB 디바이스에 보내고 필요에 따라 추가 데이터를 보내거나 받습니다.
주 코드
입력 버퍼
IO_BLOCK_EX 구조체에 대한 포인터입니다.
입력 버퍼 길이
입력 버퍼의 크기입니다.
출력 버퍼
식별된 IO_BLOCK_EX 구조의 pbyData 멤버와 동일한 버퍼에 대한 포인터이거나, 데이터 전송이 요청되지 않는 경우 NULL .
출력 버퍼 길이
출력 버퍼의 크기이거나, 데이터 전송이 요청되지 않는 경우 0입니다.
상태 블록
Irp->IoStatus.Status 요청이 성공하면 STATUS_SUCCESS 설정됩니다. 그렇지 않으면 상태가 NTSTATUS 코드로 적절한 오류 조건으로.
발언
DeviceIoControl 매개 변수
DeviceloControl 함수가 IOCTL_SEND_USB_REQUEST 제어 코드로 호출되면 호출자는 IO_BLOCK_EX 구조체의 주소를 함수의 lpInBuffer 매개 변수로 지정해야 합니다. 이 I/O 제어 코드로 지정된 요청 유형은 전송되거나 수신될 수 있는 정보의 유형 및 크기와 마찬가지로 디바이스별 및 공급업체 정의입니다.
다음 표에서는 입력 인수를 지정하는 방법을 보여줍니다.
논쟁 | 읽기 작업 | 쓰기 작업 | 데이터 전송 없음 |
---|---|---|---|
lpInBuffer | IO_BLOCK_EX 포인터입니다. | IO_BLOCK_EX 포인터입니다. | IO_BLOCK_EX 포인터입니다. |
lpOutBuffer | 읽을 데이터를 받을 버퍼에 대한 포인터입니다. | 쓸 데이터를 포함하는 버퍼에 대한 포인터입니다. | NULL |
lpOutBufferSize | 버퍼의 크기입니다. | 버퍼의 크기입니다. | 영 |
IO_BLOCK_EX 구조체의 bRequest 멤버 | 디바이스별 요청 코드입니다. | 디바이스별 요청 코드입니다. | 디바이스별 요청 코드입니다. |
IO_BLOCK_EX 구조체의 pbyData 멤버 | lpOutBuffer동일한 포인터입니다. | lpOutBuffer동일한 포인터입니다. | NULL |
IO_BLOCK_EX 구조체의 uLength 멤버 | lpOutBufferSize동일한 값입니다. | lpOutBufferSize동일한 값입니다. | 영 |
IO_BLOCK_EX 구조체의 fTransferDirectionIn 멤버 | TRUE | FALSE | FALSE |
IO_BLOCK_EX 구조체의 bmRequestType 멤버는 IOCTL_SEND_USB_REQUEST 사용되지 않습니다.
커널 모드 드라이버는 IO_BLOCK_EX 구조체 콘텐츠를 사용하여 URB_CONTROL_VENDOR_OR_CLASS_REQUEST 구조체가 포함된 URB 만듭니다.
다음 표에서는 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 구조체 멤버에 할당된 값을 나타냅니다.
구조체 멤버 | 할당된 값 |
---|---|
TransferFlags | 0 |
TransferBufferLength | pIoBlockEx - uLength> |
TransferBuffer | lpOutBuffer(읽기) 또는 pIoBlockEx ->pbyData(쓰기) |
TransferBufferMDL | NULL |
RequestTypeReservedBits | 0xC0(읽기) 또는 0x40(쓰기) |
요청 | pIoBlockEx->bRequest |
값 | (SHORT)pIoBlockEx- uOffset> |
인덱스 | pIoBlockEx- uIndex> |
자세한 내용은 Kernel-Mode 드라이버에 액세스하는 것을 참조하세요.
요구 사항
요구 | 값 |
---|---|
헤더 | usbscan.h(Usbscan.h 포함) |