2011-03-11 3 views
1

Windows 7에서 가상 DVB 드라이버에 기존 C++ 프로젝트 (전송 스트림 데이터 제공)를 통합하려고합니다. 분명한 출발점은 Microsoft WDK (버전 7600.16385.1)의 SW 튜너 샘플 인 것 같습니다. Microsoft에서 제공하는이 샘플은 로컬 파일에서 전송 스트림 데이터를 읽는 가상 PBDA 드라이버를 이미 구현합니다.가상 PBDA 드라이버에서 C++ 사용 : 제한 사항은 무엇입니까?

내 질문은 : C++의 기능은 커널 드라이버에서 사용할 수 있습니까?

Microsoft 페이지 "C++ for Kernel Mode Drivers: Pros and Cons"을 읽었으며 일반적으로 커널 드라이버에서 기본 C++을 사용할 수 있습니까? 마이크로 소프트가 아주 정확한 보증을하지 않는다는 것을 이해할 수는 있지만, 텍스트는 3 년 전 또는 심지어 오늘날까지도 C++을 사용하여 실제로 가능했던 것에 대해 약간 혼란스러워했습니다.

STL을 커널 드라이버에서 사용할 수 있습니까? (WDK 살펴보기 : WDK 경로에 "USE_STL"또는 "STL_VER"와 같은 플래그가 있고 STL60 및 STL70이라는 두 개의 디렉토리가 있습니다.) 약간의 결론이 도출 된 토론 스레드가 있습니다 .SWTuner 샘플을 빌드 할 수있었습니다. "USE_STL = 1"과 함께, 그러나 그것에 대해서는 아직 더 이상의 테스트를 수행하지 않았습니다.). STL 컨테이너를 사용하여 커널 드라이버의 메모리를 관리 할 수 ​​있습니까?

C++ 예외가 있습니까? 찾을 수있는 것부터 (fe. "Drivers, Exceptions and C++"), SEH에 매핑 되었기 때문에 일반적으로 C++ 예외 (try/throw/catch)를 사용할 수있는 것으로 보입니다. 그러나 여전히 해결 방법이 필요합니다.

멀티 스레딩 코드가 커널 공간에서 작동합니까?

내가 초보자로 만들려고하는 일반적인 디자인 결정은 다음과 같습니다. C++ 프로젝트를 기존 샘플에 통합하는 것이 더 쉬울 수 있습니까? 이는 인터페이스로 많은 번거 로움을 덜어 주지만 " C++을 커널 드라이버에서 사용하는 경우), 또는 응용 프로그램에 C++ 프로젝트를 캡슐화하는 것이 더 신중할 것입니다. 그런 다음 추가해야 할 인터페이스를 통해 가상 드라이버와 통신합니다.

답변

0

DDK를 사용하여 가상 프린터 드라이버를 만들었습니다 (새 버전은 WDK 대신 DDK라고 생각합니다). STL을 사용하여 문제가 없었습니다.

관련 문제