2011-03-28 3 views
0

USB IOCTL IOCTL_USB_GET_ROOT_HUB_NAME에 약간 혼란 스럽습니다. 그것의 대상 장치는 무엇입니까? MSDN WDK 문서가 대상 장치를 명확하게 나타내지 만 WDK에서 제공하는 USBVIEW 샘플은 여전히 ​​혼란 스럽습니다. 내가 혼란스러워하는 이유는 다음과 같습니다 :IOCTL_USB_GET_ROOT_HUB_NAME의 대상 장치가 무엇입니까? (USB 드라이버 관련 IOCTL IRQ)

저는 커널 모드와 USB 드라이버 작성에 익숙하며 Windows 드라이버 키트 http://msdn.microsoft.com/en-us/library/ff558728(v=vs.85).aspx에서 USBVIEW 샘플을 연구 중입니다. MSDN은 USBVIEW 샘플이 수행하는 첫 번째 단계를 설명합니다.

호스트 컨트롤러와 루트 허브를 열거합니다. 호스트 컨트롤러는 0

사용 CreateFile이()에서 X 시작 각 호스트 컨트롤러 심볼릭 링크를 열 수있는 형태 "HCDx"의 상징 링크 이름이 있습니다.

트리보기에서 각 호스트 컨트롤러를 나타내는 노드를 만듭니다. 호스트 컨트롤러 후

열 있다, 나는 에 IOCTL_USB_GET_ROOT_HUB_NAME 요청이 호스트의 일부 컨트롤러

인 루트 허브의 심볼릭 링크 이름을 가져 호스트 컨트롤러를 보내지 만 더블 MSDN http://msdn.microsoft.com/en-us/library/ff537326(v=VS.85).aspx 에 IOCTL_USB_GET_ROOT_HUB_NAME의 사용을 확인 밝히는 :

IOCTL_USB_GET_ROOT_HUB_NAM E는 사용자 모드 I/O 제어 요청입니다. 이 요청은 USB 허브 FDO을 대상으로합니다.

IOCTL_USB_GET_ROOT_HUB_NAME IRP의 대상은 USB 허브 FDO입니다. 그러나 USBVIEW 샘플에서 설명한대로 호스트 콘트롤러 심볼릭 링크를 검색했는데, 이는 디바이스 객체가 호스트 콘트롤러 디바이스 객체라는 것을 의미합니다. IOCTL_USB_GET_ROOT_HUB_NAME IRP를 어떻게 전송할 수 있습니까? USB 허브 FDO를 먼저 조사해야합니까?

답변

2

나는 그것이 불행한 복사 - 붙여 넣기 오류라고 생각합니다. IOCTL_USB_GET_ROOT_HUB_NAME은 실제로 호스트 컨트롤러로 전송되므로 USB 호스트 컨트롤러 FDO가 처리합니다.

다만, 당신을 문맥에 넣으려면 : "FDO"라는 용어는 사용자 모드에 느슨하게 관련이 있습니다. 어쨌든 다른 "xDO"에 액세스 할 수있는 것과는 다릅니다. 커널 모드에서이 IOCTL을 보내려면 장치 스택의 특정 장치 개체에 IOCTL을 보낼 수 있습니다 ("할 수있다"는 의미는 아닙니다). 그러나 사용자 모드 응용 프로그램의 DeviceIoControl은 항상 IOCTL을 장치 스택의 맨 위로 보냅니다 (따라서 모든 필터, FDO 및 PDO까지 전달합니다).

이 질문은 3 월 28 일에 질문되었으므로 지금까지 해결해 주셨으면합니다.

관련 문제