IOCTL_WRITE_REGISTERS IOCTL (usbscan.h)

Menulis ke daftar perangkat USB, menggunakan pipa kontrol.

Kode utama

IRP_MJ_DEVICE_CONTROL

Buffer input

Arahkan ke struktur IO_BLOCK .

Panjang buffer input

Ukuran buffer input.

Buffer output

NULL

Panjang buffer output

Nol

Blok status

Irp->IoStatus.Status diatur ke STATUS_SUCCESS jika permintaan berhasil. Jika tidak, Status ke kondisi kesalahan yang sesuai sebagai kode NTSTATUS .

Keterangan

Parameter DeviceIoControl

Ketika fungsi DeviceloControl dipanggil dengan kode kontrol I/O IOCTL_WRITE_REGISTERS, pemanggil harus menentukan alamat struktur IO_BLOCK sebagai parameter lpInBuffer fungsi.

Dengan menggunakan konten IO_BLOCK, driver mode kernel membuat URB yang berisi struktur _URB_CONTROL_VENDOR_OR_CLASS_REQUEST .

Tabel berikut menunjukkan nilai yang ditetapkan untuk _URB_CONTROL_VENDOR_OR_CLASS_REQUEST anggota struktur.

Anggota struktur Nilai yang ditandatangani
TransferFlags 0
TransferBufferLength pIoBlock-uLength>
TransferBuffer pIoBlock-pbyData>
TransferBufferMDL NULL
RequestTypeReservedBits 0x40
Permintaan (pIoBlock->uLength> 1) ? 0x04 : 0x0C
Nilai (PENDEK) pIoBlock-uOffset>
Indeks pIoBlock-uIndex>

Untuk informasi selengkapnya, lihat Mengakses Driver Kernel-Mode untuk Perangkat Gambar Diam.

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

Persyaratan

Persyaratan Nilai
Header usbscan.h (termasuk Usbscan.h)