IOCTL_GET_HCD_DRIVERKEY_NAME IOCTL (usbuser.h)
IOCTL_GET_HCD_DRIVERKEY_NAME I/O 控制请求检索 USB 主机控制器驱动程序的注册表中的驱动程序密钥名称。
IOCTL_GET_HCD_DRIVERKEY_NAME 是用户模式 I/O 控制请求。 此请求面向 USB 主机控制器 (GUID_DEVINTERFACE_USB_HOST_CONTROLLER) 。
输入缓冲区
无。
输入缓冲区长度
无。
输出缓冲区
AssociatedIrp.SystemBuffer 成员指定调用方分配的缓冲区的地址,该缓冲区包含USB_HCD_DRIVERKEY_NAME结构。 在输出时,此结构保存驱动程序密钥名称。 有关详细信息,请参阅“备注”。
输出缓冲区长度
此缓冲区的大小在 Parameters.DeviceIoControl.OutputBufferLength 成员中指定。
注解
若要在注册表中获取驱动程序密钥名称,必须执行以下任务:
- 声明 USB_HCD_DRIVERKEY_NAME类型的变量。
- 通过在输出参数中指定变量的地址和大小,发送 IOCTL_GET_HCD_DRIVERKEY_NAME 请求。 返回时,USB_HCD_DRIVERKEY_NAME 的 ActualLength 成员包含分配缓冲区以保存用驱动程序密钥名称填充的USB_HCD_DRIVERKEY_NAME所需的长度。
- 为缓冲区分配内存以保存 USB_HCD_DRIVERKEY_NAME 结构。 缓冲区的大小必须是接收的 ActualLength 值。
- 通过在输出参数中传递指向分配的缓冲区及其大小的指针,发送 IOCTL_GET_HCD_DRIVERKEY_NAME 请求。 返回时,USB_HCD_DRIVERKEY_NAME 的 DriverKeyName 成员是一个以 null 结尾的 Unicode 字符串,其中包含与主机控制器驱动程序关联的驱动程序密钥的名称。
/*++
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;
}
要求
要求 | 值 |
---|---|
Header | usbuser.h (包括 Usbioctl.h) |