다음을 통해 공유


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 버퍼의 크기입니다. 버퍼의 크기입니다.
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 포함)