다음을 통해 공유


정리 및 닫기 작업 처리 오류

일부 드라이버는 DispatchCleanupDispatchClose 루틴에 필요한 작업을 구분하지 못합니다. I/O 관리자는 파일 개체에 대한 마지막 핸들이 닫혀 있을 때 드라이버의 DispatchCleanup 루틴을 호출합니다. DispatchClose 루틴은 파일 개체에서 마지막 참조가 해제될 때 호출됩니다. 드라이버는 파일 개체에 연결되거나 다른Dispatch Xxx 루틴에서 사용할 수 있는 DispatchCleanup 루틴에서 리소스를 해제하려고 시도해서는 안 됩니다.

디스패치 루틴을 호출할 때 I/O 관리자는 일반적인 I/O 호출에 대한 파일 개체에 대한 참조를 보유합니다. 따라서 드라이버는 DispatchCleanup 루틴이 호출된 후 DispatchClose 루틴이 호출되기 전에 파일 개체에 대한 I/O 요청을 받을 수 있습니다. 예를 들어 사용자 모드 호출자는 I/O 관리자 요청이 다른 스레드에서 진행 중인 동안 파일 핸들을 닫을 수 있습니다. I/O 관리자가 DispatchClose 루틴을 호출하기 전에 드라이버가 필요한 리소스를 삭제하거나 해제한 경우 잘못된 포인터 참조 및 기타 문제가 발생할 수 있습니다.