MFC에서 작성된 무선 관리자 드라이버가있는 WinCE 장치로 작업하고 있습니다. Radio GUI 용 코드에서 특정 IOCTL이 호출 된 Deviceiocontrol 기능을 볼 수 있습니다. 그러나이 함수가 호출하는 특정 코드 조각을 추적 할 수 없습니다. 누군가가 Deviceiocontrol의 작동 방식을 말해 줄 수 있습니까?DeviceioControl에 의해 구현 된 기능 추적
0
A
답변
3
DeviceIoControl은 파일 핸들을 사용하여 장치 드라이버를 호출합니다. 장치 드라이버 자체에 들어가려면 커널 디버거를 사용해야합니다.
파일 핸들은 함수 테이블을 포함하는 DEVICE_OBJECT 구조로 구성된 커널 오브젝트를 나타냅니다. IRP_MJ_DEVICE_CONTROL의 인덱스에있는이 테이블에서 드라이버는 핸들 함수를 설정합니다. 함수는 IRP에 패키지 된 io 제어 매개 변수로 호출됩니다.
0
IOCTL이 전송되는 드라이버의 소스 코드가 있습니까?
DeviceIoControl
에 대한 핸들을 전달합니다. CreateFile(L"XXX#:",...)
에 대한 호출을 사용하여 핸들이 열립니다. XXX는 레지스트리에 설정된 드라이버의 접두사입니다. #은로드 타임에 드라이버가 제공하는 인덱스입니다 (레지스트리에서도 설정할 수 있습니다).
수행되는 기능을 보려면 드라이버의 소스 코드에서 DeviceIoControl
으로 보내는 IOCTL을 검색하십시오. 당신은 XXX_IoControl
의 운전자 구현에서 그것을 발견 할 것이다.
관련 문제
- 1. 소프트웨어 디자인 구현 - 이슈/모듈/버그/기능 추적 솔루션
- 2. iPhone에서 추적 동작 구현
- 3. 구현 및 이미 수퍼 클래스에 의해 구현 된 인터페이스?
- 4. i386에서 추적 구현
- 5. 기능 추적 WinForms
- 6. 별도의 파일로 기능 구현
- 7. 파일 삭제 기능 구현
- 8. 루트 계산 기능 구현
- 9. 버전 제어 기능 구현
- 10. 가상 기능 구현
- 11. PHP 추적 기능 실행 시간
- 12. asp.net에서 뒤로 버튼 기능 구현
- 13. 문자 디코딩 변환 기능 구현
- 14. IDependencyResolver의 공용 서비스 검색 기능 및 구현
- 15. 오이 기능 및 시나리오 추적 솔루션?
- 16. jabber를 사용하여 대화방 기능 구현
- 17. MVC - 회원 구현 온라인 기능
- 18. 웹 사이트에서 인쇄 기능 구현
- 19. WebBrowser 컨트롤에 의해 호출되는 IDispatch :: Invoke 구현
- 20. 감사 추적 및 HIPAA 모범 사례 구현
- 21. Oracle Streams를 사용하여 감사 추적 구현
- 22. SQL Server 로깅/사용자 추적 기능
- 23. 계층 적 기능/작업 추적 시스템 찾기
- 24. Excel 및 VB의 IRR 기능 구현
- 25. 링크 된 라이브러리 추적
- 26. dbml에 의해 형성된 데이터 액세스 레이어의 기능
- 27. BlackBerry - 알림 및 SMS 기능 구현
- 28. 컴파일러가 봉인 된 클래스에 의해 구현 된 가상 메서드를 최적화하는 방법
- 29. JavaScript에서 IntelliSense/자동 완성 기능 구현
- 30. 기능 구현 방법 : 이메일로 포럼에 게시 하시겠습니까?
고마워요! 커널 디버거 사용법을 모르겠습니다. 나는 라디오 매니저를위한 코드를 볼 수 있고 RadioManager_IOControl (Rmgr * context, IOCTL _..., BYTE * pInBuffer, DWORD inSize, BYTE * pOutBuffer, DWORD outSize, DWORD * pOutSize) 함수가 (라디오 드라이버에서) deviceiocontrol에 의해 호출됩니다. 내 문제는 장치 드라이버의 RadioManager_IOControl이 인수 목록에 Rmgr 구조체에 대한 포인터를 가지고있는 동안 deviceiocontrol이 인수 목록에서 Rmgr에 대한 핸들을 가지고 있다는 것입니다. 이 구조체가 어떻게 채워지는지 추적 할 수 없습니다. – ame
'Rmgr *'은'DeviceIoControl'에 전달한 장치 핸들입니다. 이 핸들은'CreateFile'을 호출 할 때 채워집니다. 인구의 정확한 방식은 운전자/구현에 따라 다릅니다. 드라이버의 XXX_Open이 호출 될 때마다 채워질 수 있으며 드라이버의 XXX_Init 중에 채워질 수 있으며 드라이버가 반환하는 더미 핸들 일 수 있습니다. 드라이버 관련. – Shaihi