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
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:
- Deklarieren Sie eine Variable vom Typ USB_HCD_DRIVERKEY_NAME.
- 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.
- 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.
- 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.
/*++
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) |