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


要件

要件
Header usbioctl.h (Usbioctl.h を含む)

こちらもご覧ください

USB_HCD_DRIVERKEY_NAME