IOCTL_WRITE_REGISTERS IOCTL (usbscan.h)

Schreibt mithilfe der Steuerpipe in USB-Geräteregister.

Hauptcode

IRP_MJ_DEVICE_CONTROL

Eingabepuffer

Zeiger auf eine IO_BLOCK-Struktur .

Länge des Eingabepuffers

Größe des Eingabepuffers.

Ausgabepuffer

NULL

Länge des Ausgabepuffers

Null

Statusblock

Irp->IoStatus.Status wird auf STATUS_SUCCESS festgelegt, wenn die Anforderung erfolgreich ist. Andernfalls wird Status zur entsprechenden Fehlerbedingung als NTSTATUS-Code verwendet.

Hinweise

DeviceIoControl-Parameter

Wenn die DeviceloControl-Funktion mit dem IOCTL_WRITE_REGISTERS E/A-Steuerungscode aufgerufen wird, muss der Aufrufer die Adresse einer IO_BLOCK-Struktur als lpInBuffer-Parameter der Funktion angeben.

Mithilfe der IO_BLOCK Inhalte erstellt der Kernelmodustreiber eine URB , die eine _URB_CONTROL_VENDOR_OR_CLASS_REQUEST-Struktur enthält.

In der folgenden Tabelle sind die Werte angegeben, die _URB_CONTROL_VENDOR_OR_CLASS_REQUEST Strukturmember zugewiesen sind.

Strukturelement Wert sssigned
TransferFlags 0
TransferBufferLength pIoBlock-uLength>
TransferBuffer pIoBlock-pbyData>
TransferBufferMDL NULL
RequestTypeReservedBits 0x40
Anforderung (pIoBlock->uLength> 1) ? 0x04 : 0x0C
Wert (KURZ) pIoBlock-uOffset>
Index pIoBlock-uIndex>

Weitere Informationen finden Sie unter Zugreifen auf Kernel-Mode Treiber für Standbildgeräte.

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);

Anforderungen

Anforderung Wert
Header usbscan.h (include Usbscan.h)