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