2012-09-14 2 views
2

WinUSB 드라이버 (winusb.sys)를 기능 드라이버로 사용하는 USB 장치가 있습니다. 이제이 장치에 액세스하는 비디오 캡처 드라이버 (커널 모드 드라이버 여야 함)를 작성해야합니다.커널 모드에서 WinUSB 장치 액세스

내 질문은 : 커널 모드에서 WinUSB 장치에 액세스하여 사용할 수 있습니까? 그렇다면, 그렇게 할 수있는 문서가 있습니까?

내가 발견 한 모든 문서는 WinUSB.dll이있는 사용자 모드에서 WinUSB에 액세스하는 것에 대해 이야기하고 있지만이 옵션은 나와 관련이 없습니다. 나는 이미 IoGetDeviceObjectPointer()를 사용하여 USB 장치에서 통신중인 USB 파이프에 필요한 파일 핸들을 가져 오려고했지만 호출은 항상 STATUS_ACCESS_DENIED와 함께 실패합니다. USB 장치 용으로 자체 KMDF 드라이버를 작성할 수는 있지만 이미 WinUSB 드라이버를 사용하는 것이 훨씬 쉽습니다.

도움이 될 것입니다.

답변

0

이것은 작동 할 수 있지만 매우 어렵습니다.

커널 모드에서 winusb 장치로 I/O 요청을 보낼 수 있습니다. WinUSB 함수를 사용하여 통신 할 수 없으면 실제 I/O 요청을 사용하여 하나의 I/O 스택에서 다른 I/O 스택으로 통신해야합니다.

USB 장치 용 AVStream 미니 포트 드라이버를 작성했으며 USB 부분이 어려운 부분이 아니라고 말할 수 있습니다. 특히 미니 포트 모드에서 kmdf USB 입출력 대기열을 사용할 때.

+0

USB 장치 용 AVStream 미니 포트 드라이버를 이미 사용하고 있지만이 드라이버는 이전의 WDM USB 드라이버를 사용하여 장치와 통신합니다. 내 오래된 WDM USB 드라이버의 문제점은 약 12 ​​년이며 길이가 0 인 패킷으로 제대로 작동하지 않으며 USB 3.0을 지원할 수 없다는 것입니다. 그것이 WinUSB가 USB 3.0을 지원하고 Zero 길이 패킷을 처리하기 때문에 WinUSB를 USB 드라이버로 바꾸려고 시도한 이유이기도합니다. – Titanic

+0

AVStream과 WinUSB의 주요 문제점은 서로 통신하는 방법입니다. 이전의 WDM 드라이버를 사용하여 간단히 IoGetDeviceObjectPointer를 device reg 키와 함께 파이프 0에 대한 파일 핸들을 얻기 위해 PIPE00 다음에 호출했지만 WinUSB에서는 작동하지 않습니다 (쓰기 권한이있는 파이프를 열려고하면 항상 STATUS_ACCESS_DENIED 오류가 발생 함).). WinUSB에서 내 USB 장치의 다양한 파이프에 대한 파일 핸들을 얻으려면 어떻게해야합니까? 그게 질문입니다. – Titanic

+0

필자가 아는 한, WinUSB는 파이프를 파일 핸들로 보내지 않습니다. 따라서 I/O 컨트롤을 사용해야합니다. – Christopher

관련 문제