IOCTL_WRITE_REGISTERS IOCTL(usbscan.h)
제어 파이프를 사용하여 USB 디바이스 레지스터에 씁니다.
주 코드
입력 버퍼
IO_BLOCK 구조체에 대한 포인터입니다.
입력 버퍼 길이
입력 버퍼의 크기입니다.
출력 버퍼
NULL
출력 버퍼 길이
0
상태 블록
Irp->요청이 성공하면 IoStatus.Status 가 STATUS_SUCCESS 설정됩니다. 그렇지 않으면 NTSTATUS 코드로 적절한 오류 조건에 대한 상태입니다.
설명
DeviceIoControl 매개 변수
IOCTL_WRITE_REGISTERS I/O 컨트롤 코드를 사용하여 DeviceloControl 함수를 호출하는 경우 호출자는 IO_BLOCK 구조체의 주소를 함수의 lpInBuffer 매개 변수로 지정해야 합니다.
커널 모드 드라이버는 IO_BLOCK 콘텐츠를 사용하여 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 구조를 포함하는 URB를 만듭니다.
다음 표에서는 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 구조체 멤버에 할당된 값을 나타냅니다.
구조체 멤버 | sssigned 값 |
---|---|
TransferFlags | 0 |
TransferBufferLength | pIoBlock-uLength> |
TransferBuffer | pIoBlock-pbyData> |
TransferBufferMDL | NULL |
RequestTypeReservedBits | 0x40 |
요청 | (pIoBlock->uLength> 1) ? 0x04: 0x0C |
값 | (SHORT) pIoBlock-uOffset> |
Index | pIoBlock-uIndex> |
자세한 내용은 스틸 이미지 디바이스용 Kernel-Mode 드라이버 액세스를 참조하세요.
DWORD cbRet;
BOOL bRet;
IO_BLOCK IoBlock;
OVERLAPPED overlapped;
IoBlock.uOffset = (BYTE)byOffset;
IoBlock.uLength = (BYTE)byNbOfReg;
IoBlock.pbyData = pbyData;
memset(&overlapped, 0, sizeof(OVERLAPPED));
overlapped.hEvent =
CreateEvent(NULL, // pointer to security attributes
// WIN95 ignores this parameter
FALSE, // automatic reset
FALSE, // initialize to not signaled
NULL); // pointer to the event-object name
bRet = DeviceIoControl( DeviceHandle,
(DWORD) IOCTL_WRITE_REGISTERS,
&IoBlock,
sizeof(IO_BLOCK),
NULL,
0,
&cbRet,
&overlapped);
if( bRet == TRUE )
{
WaitForSingleObject(overlapped.hEvent, INFINITE);
// we do not the test, the result is zero
}
CloseHandle(overlapped.hEvent);
요구 사항
요구 사항 | 값 |
---|---|
헤더 | usbscan.h(Usbscan.h 포함) |