Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Writes to USB device registers, using the control pipe.
Major code
Input buffer
Pointer to an IO_BLOCK structure.
Input buffer length
Size of the input buffer.
Output buffer
NULL
Output buffer length
Zero
Status block
Irp->IoStatus.Status is set to STATUS_SUCCESS if the request is successful. Otherwise, Status to the appropriate error condition as a NTSTATUS code.
Remarks
DeviceIoControl Parameters
When the DeviceloControl function is called with the IOCTL_WRITE_REGISTERS I/O control code, the caller must specify the address of an IO_BLOCK structure as the function's lpInBuffer parameter.
Using the IO_BLOCK contents, the kernel-mode driver creates a URB that contains a _URB_CONTROL_VENDOR_OR_CLASS_REQUEST structure.
The following table indicates the values assigned to _URB_CONTROL_VENDOR_OR_CLASS_REQUEST structure members.
| Structure member | Value sssigned |
|---|---|
| TransferFlags | 0 |
| TransferBufferLength | pIoBlock->uLength |
| TransferBuffer | pIoBlock->pbyData |
| TransferBufferMDL | NULL |
| RequestTypeReservedBits | 0x40 |
| Request | (pIoBlock->uLength > 1) ? 0x04 : 0x0C |
| Value | (SHORT)pIoBlock->uOffset |
| Index | pIoBlock->uIndex |
For more information, see Accessing Kernel-Mode Drivers for Still Image Devices.
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);
Requirements
| Requirement | Value |
|---|---|
| Header | usbscan.h (include Usbscan.h) |