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) を対象としています。
メジャー コード
[入力バッファー]
[なし] :
入力バッファーの長さ
[なし] :
出力バッファー
AssociatedIrp.SystemBuffer メンバーは、USB_HCD_DRIVERKEY_NAME構造体を含む呼び出し元割り当てバッファーのアドレスを指定します。 出力時に、この構造体はドライバー キー名を保持します。 詳細については、「解説」を参照してください。
出力バッファーの長さ
このバッファーのサイズは Parameters.DeviceIoControl.OutputBufferLength メンバーで指定します。
ステータス ブロック
USB スタックは、要求が成功した場合に Irp-IoStatus.Status> をSTATUS_SUCCESSに設定します。 それ以外の場合、USB スタックは 状態 を適切なエラー状態 (STATUS_INVALID_PARAMETERやSTATUS_INSUFFICIENT_RESOURCESなど) に設定します。
注釈
レジストリでドライバー キー名を取得するには、次のタスクを実行する必要があります。
- 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 | usbioctl.h (Usbioctl.h を含む) |