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_NAMEActualLength 멤버에는 드라이버 키 이름으로 채워진 USB_HCD_DRIVERKEY_NAME 보관하기 위해 버퍼를 할당하는 데 필요한 길이가 포함됩니다.
- 버퍼에 대한 메모리를 할당하여 USB_HCD_DRIVERKEY_NAME 구조를 유지합니다. 버퍼의 크기는 받은 ActualLength 값이어야 합니다.
- 출력 매개 변수에서 할당 된 버퍼 및 해당 크기에 대한 포인터를 전달하여 IOCTL_GET_HCD_DRIVERKEY_NAME 요청을 보냅니다. 반환될 때 USB_HCD_DRIVERKEY_NAMEDriverKeyName 멤버는 호스트 컨트롤러 드라이버와 연결된 드라이버 키의 이름을 포함하는 null로 끝나는 유니코드 문자열입니다.
/*++
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 포함) |