2013-03-07 3 views
1

한 번에 큰 덩어리로 데이터를 전송하는 USB3 장치에 대해 WDF (KMDF)를 사용하여 Windows 장치 드라이버를 작성하고 있습니다. 필자는이 기능을 테스트하는 사용자 수준의 응용 프로그램을 작성했으며, 대부분 기능이 작동합니다.Windows는 언제 기내 WDF 요청을 취소합니까?

내가 만나는 문제는 다음과 같습니다. 강제 종료 (cmd 창에서 Ctrl + C) 할 때 응용 프로그램 중간 전송이 취소 될 때 진행중인 데이터 전송이 즉시 중지되고 호스트는 단순히 해당 엔드 포인트와의 통신을 중지하는 것처럼 보입니다. 나는 이것을 USB 버스 추적에서 관찰했다. 요청이 함수 드라이버에서 "STATUS_CANCELLED"로 반환됩니다.

다른 비슷한 타사 장치를 살펴보고 해당 장치에서 해당 드라이버로 테스트 응용 프로그램을 실행하고 테스트 응용 프로그램 중간 데이터 전송을 중단 할 때, 응용 프로그램을 닫기 전에 전송이 완료됩니다.

내 질문 :

방법/윈도우 응용 프로그램이 종료 될 때 기내 요청을 죽이기로 결정 않을 때?

요청을 "취소 할 수 없음"으로 표시 할 수있는 방법이 있습니까? 나는 문서를 샅샅이 뒤졌지만, 중간 전송에서 요청이 취소되지 않도록하기 위해 뭔가를해야한다는 것을 발견하지 못했습니다.

감사의 말씀 감사합니다.

답변

3

그것은 장치 드라이버가 아닙니다. 그것은 콘솔 어플리케이션 인 handles the Ctrl-C event에 관한 것입니다. 콘솔 어플리케이션은 Ctrl-C 이벤트를 트랩해야하며 종료 전에 전송이 완료 될 때까지 기다려야합니다.

+0

알 수 있습니다. 고맙습니다. 이것은 논리적으로 나에게 의미가 있지만, 운전자가 더 강력하게 할 수있는 것이 무엇입니까? 다른 말로 표현하자면 (가능한 한 이벤트를 "취소 가능"으로 표시하는 것) 가능한 것인가? – 8bitcartridge

+0

장치 드라이버가 응용 프로그램을 열어 두거나 "차단"해야합니다 (프로세스의 컨테이너이기 때문에). "나쁜 동작"으로 간주됩니다. 사용자 관점에서 Ctrl-C는 "지금 중지하고 싶습니다."라는 의미입니다. Windows가 응용 프로그램이 완전히 끝났음을 어떻게 알 수 있습니까? 핸들이 무효화되었거나 디바이스 드라이버가 프로세스가 종료 중임을 알리는 메시지가 표시됩니다. –