IOCTL_GET_HCD_DRIVERKEY_NAME IOCTL (usbioctl.h)

Permintaan kontrol I/O IOCTL_GET_HCD_DRIVERKEY_NAME mengambil nama kunci driver di registri untuk driver pengontrol host USB.

IOCTL_GET_HCD_DRIVERKEY_NAME adalah permintaan kontrol I/O mode pengguna. Permintaan ini menargetkan pengontrol host USB (GUID_DEVINTERFACE_USB_HOST_CONTROLLER).

Kode utama

IRP_MJ_DEVICE_CONTROL

Buffer input

Tidak ada.

Panjang buffer input

Tidak ada.

Buffer output

Anggota AssociatedIrp.SystemBuffer menentukan alamat buffer yang dialokasikan pemanggil yang berisi struktur USB_HCD_DRIVERKEY_NAME . Pada output, struktur ini memegang nama kunci driver. Untuk informasi selengkapnya, lihat Keterangan.

Panjang buffer output

Ukuran buffer ini ditentukan dalam anggota Parameters.DeviceIoControl.OutputBufferLength .

Blok status

Tumpukan USB mengatur Irp-IoStatus.Status> ke STATUS_SUCCESS jika permintaan berhasil. Jika tidak, tumpukan USB mengatur Status ke kondisi kesalahan yang sesuai, seperti STATUS_INVALID_PARAMETER atau STATUS_INSUFFICIENT_RESOURCES.

Keterangan

Untuk mendapatkan nama kunci driver di registri, Anda harus melakukan tugas berikut:

  1. Deklarasikan variabel jenis USB_HCD_DRIVERKEY_NAME.
  2. Kirim permintaan IOCTL_GET_HCD_DRIVERKEY_NAME dengan menentukan alamat dan ukuran variabel dalam parameter output. Saat kembali, anggota USB_HCD_DRIVERKEY_NAME ActualLength berisi panjang yang diperlukan untuk mengalokasikan buffer untuk menahan USB_HCD_DRIVERKEY_NAME yang diisi dengan nama kunci driver.
  3. Alokasikan memori untuk buffer untuk menahan struktur USB_HCD_DRIVERKEY_NAME . Ukuran buffer harus berupa nilai ActualLength yang diterima.
  4. Kirim permintaan IOCTL_GET_HCD_DRIVERKEY_NAME dengan meneruskan penunjuk ke buffer yang dialokasikan dan ukurannya dalam parameter output. Saat kembali, anggota DriverKeyNamedari USB_HCD_DRIVERKEY_NAME adalah string Unicode null-dihentikan yang berisi nama kunci driver yang terkait dengan driver pengontrol host.
Contoh kode berikut menunjukkan cara mengirim permintaan kontrol I/O IOCTL_GET_HCD_DRIVERKEY_NAME .

/*++

Routine Description:

This routine prints the name of the driver key associated with
the specified host controller driver.

Arguments:

HCD - Handle for host controller driver.

Return Value: Boolean that indicates success or failure.

--*/

BOOL GetHCDDriverKeyName (HANDLE  HCD)
{
    BOOL                    success;
    ULONG                   nBytes;
    USB_HCD_DRIVERKEY_NAME  driverKeyName;
    PUSB_HCD_DRIVERKEY_NAME driverKeyNameW;

    driverKeyNameW = NULL;

    // 1. Get the length of the name of the driver key.
    success = DeviceIoControl(HCD,
        IOCTL_GET_HCD_DRIVERKEY_NAME,
        NULL,
        0,
        &driverKeyName,
        sizeof(driverKeyName),
        &nBytes,
        NULL);

    if (!success) 
    {
        printf("First IOCTL_GET_HCD_DRIVERKEY_NAME request failed\n");
        goto GetHCDDriverKeyNameDone;
    }

    //2. Get the length of the driver key name.
    nBytes = driverKeyName.ActualLength;

    if (nBytes <= sizeof(driverKeyName)) 
    {
        printf("Incorrect length received by IOCTL_GET_HCD_DRIVERKEY_NAME.\n");
        goto GetHCDDriverKeyNameDone;
    }

    // 3. Allocate memory for a USB_HCD_DRIVERKEY_NAME
    //    to hold the driver key name.
    driverKeyNameW = (PUSB_HCD_DRIVERKEY_NAME) malloc(nBytes);

    if (driverKeyNameW == NULL) 
    {
        printf("Failed to allocate memory.\n");
        goto GetHCDDriverKeyNameDone;
    }

    // Get the name of the driver key of the device attached to
    // the specified port.
    success = DeviceIoControl(HCD,
        IOCTL_GET_HCD_DRIVERKEY_NAME,
        NULL,
        0,
        driverKeyNameW,
        nBytes,
        &nBytes,
        NULL);

    if (!success) 
    {
        printf("Second IOCTL_GET_HCD_DRIVERKEY_NAME request failed.\n");
        goto GetHCDDriverKeyNameDone;
    }

    // print the driver key name. 
    printf("Driver Key Name: %s.\n", driverKeyNameW->DriverKeyName);


GetHCDDriverKeyNameDone:

    // Cleanup.
    // Free the allocated memory for USB_HCD_DRIVERKEY_NAME.

    if (driverKeyNameW != NULL) 
    {
        free(driverKeyNameW);
        driverKeyNameW = NULL;
    }

    return success;
}


Persyaratan

Persyaratan Nilai
Header usbioctl.h (termasuk Usbioctl.h)

Lihat juga

USB_HCD_DRIVERKEY_NAME