IOCTL_GET_HCD_DRIVERKEY_NAME IOCTL (usbioctl.h)

IOCTL_GET_HCD_DRIVERKEY_NAME I/O コントロール要求は、USB ホスト コントローラー ドライバーのレジストリ内のドライバー キー名を取得します。

IOCTL_GET_HCD_DRIVERKEY_NAME は、ユーザー モードの I/O 制御要求です。 この要求は、USB ホスト コントローラー (GUID_DEVINTERFACE_USB_HOST_CONTROLLER) を対象としています。

メジャー コード

IRP_MJ_DEVICE_CONTROL

入力バッファー

何一つ。

入力バッファーの長さ

何一つ。

出力バッファー

AssociatedIrp.SystemBuffer メンバーは、USB_HCD_DRIVERKEY_NAME 構造体を含む呼び出し元によって割り当てられたバッファーのアドレスを指定します。 出力時に、この構造体はドライバー キー名を保持します。 詳細については、「解説」を参照してください。

出力バッファーの長さ

このバッファーのサイズは、Parameters.DeviceIoControl.OutputBufferLength メンバーで指定されます。

状態ブロック

USB スタック Irp->IoStatus.Status 要求が成功した場合にSTATUS_SUCCESSに設定されます。 それ以外の場合、USB スタックは、STATUS_INVALID_PARAMETERやSTATUS_INSUFFICIENT_RESOURCESなどの適切なエラー状態に 状態 を設定します。

備考

レジストリでドライバー キー名を取得するには、次のタスクを実行する必要があります。

  1. USB_HCD_DRIVERKEY_NAME型の変数を宣言します。
  2. 出力パラメーターで変数のアドレスとサイズを指定して、IOCTL_GET_HCD_DRIVERKEY_NAME 要求を送信します。 戻り値として、USB_HCD_DRIVERKEY_NAMEActualLength メンバーには、ドライバー キー名が設定された USB_HCD_DRIVERKEY_NAME を保持するためにバッファーを割り当てるために必要な長さが含まれます。
  3. USB_HCD_DRIVERKEY_NAME 構造体を保持するバッファーにメモリを割り当てます。 バッファーのサイズは、ActualLength 受け取る必要があります。
  4. 割り当てられたバッファーとそのサイズへのポインターを出力パラメーターに渡して、IOCTL_GET_HCD_DRIVERKEY_NAME 要求を送信します。 USB_HCD_DRIVERKEY_NAMEDriverKeyName メンバーは、ホスト コントローラー ドライバーに関連付けられているドライバー キーの名前を含む null で終わる Unicode 文字列です。
次のコード例は、IOCTL_GET_HCD_DRIVERKEY_NAME I/O 制御要求を送信する方法を示しています。

/*++

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


必要条件

要件 価値
ヘッダー usbioctl.h (Usbioctl.h を含む)

関連項目

USB_HCD_DRIVERKEY_NAME