IOCTL_GET_HCD_DRIVERKEY_NAME IOCTL (usbioctl.h)

Die IOCTL_GET_HCD_DRIVERKEY_NAME E/A-Steuerungsanforderung ruft den Namen des Treiberschlüssels in der Registrierung für einen USB-Hostcontrollertreiber ab.

IOCTL_GET_HCD_DRIVERKEY_NAME ist eine E/A-Steuerungsanforderung für den Benutzermodus. Diese Anforderung zielt auf den USB-Hostcontroller (GUID_DEVINTERFACE_USB_HOST_CONTROLLER) ab.

Hauptcode

IRP_MJ_DEVICE_CONTROL

Eingabepuffer

Keine.

Länge des Eingabepuffers

Keine.

Ausgabepuffer

Der AssociatedIrp.SystemBuffer-Member gibt die Adresse eines vom Aufrufer zugewiesenen Puffers an, der eine USB_HCD_DRIVERKEY_NAME-Struktur enthält. In der Ausgabe enthält diese Struktur den Namen des Treiberschlüssels. Weitere Informationen finden Sie in den Hinweisen.

Länge des Ausgabepuffers

Die Größe dieses Puffers wird im Parameter.DeviceIoControl.OutputBufferLength-Element angegeben.

Statusblock

Der USB-Stapel legt Irp-IoStatus.Status> auf STATUS_SUCCESS fest, wenn die Anforderung erfolgreich ist. Andernfalls legt der USB-Stapel Status auf die entsprechende Fehlerbedingung fest, z. B. STATUS_INVALID_PARAMETER oder STATUS_INSUFFICIENT_RESOURCES.

Hinweise

Um den Namen des Treiberschlüssels in der Registrierung abzurufen, müssen Sie die folgenden Aufgaben ausführen:

  1. Deklarieren Sie eine Variable vom Typ USB_HCD_DRIVERKEY_NAME.
  2. Senden Sie eine IOCTL_GET_HCD_DRIVERKEY_NAME Anforderung, indem Sie die Adresse und Größe der Variablen in den Ausgabeparametern angeben. Bei der Rückgabe enthält das ActualLength-Element von USB_HCD_DRIVERKEY_NAME die Länge, die erforderlich ist, um einen Puffer zuzuweisen, der eine USB_HCD_DRIVERKEY_NAME enthält, die mit dem Treiberschlüsselnamen aufgefüllt wird.
  3. Weisen Sie Speicher für einen Puffer zu, um eine USB_HCD_DRIVERKEY_NAME-Struktur zu speichern. Die Größe des Puffers muss der empfangene ActualLength-Wert sein.
  4. Senden Sie eine IOCTL_GET_HCD_DRIVERKEY_NAME Anforderung, indem Sie einen Zeiger auf den zugeordneten Puffer und dessen Größe in den Ausgabeparametern übergeben. Bei der Rückgabe ist das DriverKeyName-Element von USB_HCD_DRIVERKEY_NAME eine Unicode-Zeichenfolge mit NULL-Termin, die den Namen des Treiberschlüssels enthält, der dem Hostcontrollertreiber zugeordnet ist.
Der folgende Beispielcode zeigt, wie sie die IOCTL_GET_HCD_DRIVERKEY_NAME-E /A-Steuerungsanforderung senden.

/*++

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


Anforderungen

Anforderung Wert
Header usbioctl.h (include Usbioctl.h)

Weitere Informationen

USB_HCD_DRIVERKEY_NAME