다음을 통해 공유


IOCTL_SEND_USB_REQUEST IOCTL(usbscan.h)

제어 파이프를 사용하여 공급업체에서 정의한 요청을 USB 디바이스에 보내고 필요에 따라 추가 데이터를 보내거나 받습니다.

주 코드

IRP_MJ_DEVICE_CONTROL

입력 버퍼

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 버퍼의 크기입니다. 버퍼의 크기입니다. 0
IO_BLOCK_EX 구조체의 bRequest 멤버 디바이스별 요청 코드입니다. 디바이스별 요청 코드입니다. 디바이스별 요청 코드입니다.
IO_BLOCK_EX 구조체의 pbyData 멤버 lpOutBuffer와 동일한 포인터입니다. lpOutBuffer와 동일한 포인터입니다. NULL
IO_BLOCK_EX 구조체의 uLength 멤버 lpOutBufferSize와 동일한 값입니다. lpOutBufferSize와 동일한 값입니다. 0
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 구조체 멤버에 할당된 값을 나타냅니다.

Structure Member 할당된 값
TransferFlags 0
TransferBufferLength pIoBlockEx-uLength>
TransferBuffer lpOutBuffer(읽기) 또는 pIoBlockEx-pbyData>(쓰기)
TransferBufferMDL NULL
RequestTypeReservedBits 0xC0(읽기) 또는 0x40(쓰기)
요청 pIoBlockEx-bRequest>
(SHORT) pIoBlockEx-uOffset>
Index pIoBlockEx-uIndex>

자세한 내용은 스틸 이미지 디바이스용 Kernel-Mode 드라이버 액세스를 참조하세요.

요구 사항

요구 사항
헤더 usbscan.h(Usbscan.h 포함)