2017-04-20 14 views

답변

0

APC는 수준 DPC 에서 스레드 목록에서 (KeInsertQueueAPC에 의해) 삽입 할 수 있기 때문에 APC는 비 페이징 풀에서 할당해야합니다 - 당신은 예를 들어 페이징 풀에서 KAPC를 할당하는 경우 그래서, 삽입, (링크 된 목록에 삽입 할 때) 당신의 페이지 된 APC 데이터를 할당 할 수 있으며, INI에 대한 결과로 BSOD

- 다음 누군가가 DPC에게 또 다른 APC를 삽입 수준을 시도 예 : KAPCKeInitializeApc을 사용하십시오. 무료 인 경우 APC을 정확하게 호출해야합니다. ExFreePool 이외의 문자는 0을 RundownRoutine으로 사용할 수 있습니다. 그렇지 않으면 올바른 정리를 위해 자신의 RundownRoutine을 제공해야합니다. KernelRoutine은 항상 설정되어야하며 드라이버의 일부 기능을 가리키기 때문에 드라이버를 언로드하지 않아야합니다. APC이 실행되지 않습니다. KernelRoutine 또는 RundownRoutineKeInsertQueueAPCObfDereferenceObject에 의해 삽입 APC 전에 드라이버 개체에 대한 일반적인 필요 호출 ObfReferenceObject이 실행됩니다 (또는 KeInsertQueueAPC는 false를 돌려). 하지만 당신은 "정상적인 방법으로"ObfDereferenceObject를 호출 할 수 없습니다 -이 무의미하다 (마지막 참조에 드라이버를 보류하는 경우 -. 드라이버 코드에 ObfDereferenceObject 반환 당신이 조립 KernelRoutine에서 프록시를 작성 필요가 충돌하고 RundownRoutine 될 것 코드를 커널 반환됩니다 - 이는 그들이/C++ 구현 및 종료시가 ObfDereferenceObject에 명령을 JMP (그러나 전화를!) 할 C와 스택이 ObfDereferenceObject 전화 RET 후가 다시 특별해야합니다 전화 공동 Inside NT's Asynchronous Procedure Call 읽기 - -이 이미 아주 오래된 기사입니다에도 불구하고 - 그래서 자세한 내용은 ObfDereferenceObject

후 드라이버 코드가 실행 건너 뛰기 - (커널 또는 개요) 드라이버 콜백 루틴 호출 드, 아무것도이 시간부터 최신 변경 승리 10 - 모두 같음