문제

DirectInput 응용 프로그램에서는 일반 게임 컨트롤러로 보이지만 해당 컨트롤의 상태는 실제로 소프트웨어에 의해 정의되는 "게임패드"를 만드는 방법은 무엇입니까?

도움이 되었습니까?

해결책

장치 드라이버인 척하는 장치 드라이버를 작성하십시오.

특히, Windows 장치 드라이버는 인터럽트 요청 프로토콜을 통해 인터럽트 요청이라는 것을 처리합니다. 이는 드라이버 내부의 래핑된 구조와 버퍼 세트로 요약됩니다.

이제 다음으로 알아야 할 것은 많은 드라이버가 실제로 계층화되거나 스택되거나 사용하려는 이름이 무엇이든 간에 있다는 것입니다.따라서 예를 들어 디스크 드라이버를 작성하려면 그 위의 드라이버(디스크 클래스)와 인터페이스할 수 있지만 그 아래의 드라이버(예: scsi 포트)를 사용하여 실제로 장치에 명령을 보낼 수 있습니다.

이것이 실제 장치가 작동하는 방식입니다.가짜 장치는 최상위 인터페이스 요구 사항을 준수해야 합니다.디스크든, 컨트롤러든, 마우스든, 뭐든지 말이죠.그러나 그 아래에서는 원하는 대로 무엇이든 할 수 있습니다. 원하는 값을 반환하면 됩니다.

이는 사용자 모드 애플리케이션을 통해 드라이버를 제어하고 장치인 것처럼 가장할 수 있는 가능성을 열어줍니다.운전자에게 메시지를 보내려면 다음을 수행하세요. DeviceIoControl 그것에;그런 다음 실제로 해당 메시지를 받으려면 다음 중 하나를 수행할 수 있습니다.

  • 해당 DeviceIoControl을 구성하는 Irp에 해당 항목을 넣습니다.
  • 드라이버가 프로세스의 메모리 공간에서 이를 읽도록 합니다.

운전자도 접근 가능 \\Registry\\Machine 기타 다양한 비사용자별 비탐색기 레지스트리 영역을 포함하므로 이러한 방식으로 통신이 가능합니다.

마지막으로, 새로운 장치를 통해 모든 것을 구성하는 대신 기존 IO를 필터링할 수 없다는 말은 없습니다.이를 수행할 수 있는 옵션과 방법은 매우 많습니다.

이 작업을 수행하려면 다음이 필요합니다.

  • 버추얼KD 또는 값비싼 디버거 케이블과 두 대의 PC.
  • 아마도 다음의 참고 자료로 시작하고 싶을 수도 있습니다. 이 블로그 게시물.드라이버 코드에는 기본적으로 엄청나게 다양한 이름이 있다는 것을 알게 될 것이므로 그 중 일부를 해석하겠습니다.

    • WDM = Windows 드라이버 모델, 기본적으로 Windows 9x(일부)와 혼합된 NT 드라이버 모델입니다.
    • KMDF = 커널 모드 드라이버 프레임워크 - 위 유형의 드라이버는 이를 더 빠르게 사용하기 위해 WDM 위에 있는 라이브러리 세트인 WDF(Windows Driver Foundation)를 추가로 사용합니다.
    • UMDF = 사용자 모드 드라이버 프레임워크 - 커널 모드의 위험 없이 드라이버를 작성합니다.가능하다면 이것을 사용하십시오. 잘못된 커널 모드 드라이버는 시스템을 블루스크린(드라이버 용어로 버그 검사)하게 됩니다.

편집하다:저는 DirectInput에 대한 지식이 많지 않습니다. DLL 리디렉션 등을 통해 사용 중인 다양한 API 컨트롤을 재정의하는 방법이 있을 수 있습니다. 이는 제가 설명한 방법보다 더 간단할 수 있습니다.

다른 팁

가장 쉬운 솔루션은 XInput 장치를 에뮬레이트하는 것일 수 있습니다 (Xbox 360 및 1).이들은 대부분의 현대 게임에서 지원되며 설정은 매우 간단합니다.다음은 설치된 드라이버 나 외부 종속성 없이이 옵션을 제공하는 C ++ 프로젝트입니다. https://github.com/shauleiz/ vxboxInterface /

vjoy opensource 프로젝트가 있습니다 : "nofollow"> http://sourceforge.net/projects/vjoystick/ -찾을 가치가있을 수 있습니다.

나는 그것이 오래된 질문이라는 것을 알고 있지만이 주제에 관심이있는 사람은 vigem .

Microsoft Xbox 360 컨트롤러, Sony Dualshock 4 컨트롤러 및 Microsoft Xbox One Controller와 같은 알려진 게이 패드를 모방 할 수 있습니다.이 프로젝트는 이러한 가상 컨트롤러와 상호 작용하기 위해 일부 API를 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top