통합검색
· 마을서비스란?  · 포럼마을  · 일반마을  · 테마마을  · 마을랭킹  · 활동왕
· 덱스퍼트란?  · TECBOX   · PRSBOX   · 이용안내  
· DEXT제품군  · 솔루션베이  · S/W & ESD 컴포넌트
· 프로그램베이
· LiveSeminar  · LiveConference
[Windows Driver Model] 포럼 마을 입니다.
  마을등급 Windows Driver Model   이 마을은 포럼마을 입니다이 마을은 자유가입제 마을 입니다 마을소개 페이지로 이동 전입신청
마을촌장촌장 조성배 주민 746 since 2006-12-29
우리마을 공지사항
질문&답변
강좌&팁
자유게시판
자료실
앨범
개인게시판
마을 게시판
등록된 마을 게시판이
없습니다.
랑데브 게시판
칼럼 게시판
개발자 고충상담
Dev Talk
자유토론방
벼룩시장
재나미 우스개
구인/프로젝트 정보
사람인 채용 게시판
  고객지원 게시판
마이 데브피아
 나의 e-Money 내역
 활동왕 My Page
 스크랩한 게시글보기
 쪽지관리
 주소록관리

 강좌&팁
 IRP 취소(IRP Cancel)의 중요성   | Performance Profiling 2014-03-28 오후 3:14:26
 bjko0oo  bjko0oo님께 메시지 보내기bjko0oo님을 내 주소록에 추가합니다.bjko0oo님의 개인게시판 가기 번호: 210 추천:0  / 읽음:3,704

IRP를 취소한다는 것은 무엇일까?

우리가 프로그램을 만들 때 파일을 생성하는 경우에는 보통 CreateFile(), 파일을 읽기 위해서는 ReadFile()를 쓰게 되는데, 이 때 함수가 호출 되면서 커널의 디바이스 스택으로 IRP를 보내지게 됩니다. 이때, 보낸 측의 요청으로 인해서 IRP가 취소되는 과정을 IRP취소(Cancel) 과정이라고 말합니다.

IRP를 취소하는 상황은 크게 2가지로 볼 수 있습니다.

첫 번째, Win32 API CandcelIO()를 호출하여 사용하는 Handle과 관련된 요청에 대해서 취소를 하는 상황

두 번째, 갑자스러운 이유로 프로세스나 쓰래드가 종료 되면서 커널레벨에서 IoCancellIrp()가 호출 되는 상황

그럼 위 2가지 함수(하나는 유저레벨의 함수, 다른 하나는 커널 레벨의 함수)에 대해서 MSDN를 봅시다.

CancelIo

BOOL WINAPI CancelIo(
  _In_  HANDLE hFile
);

인자를 보면 파일의 핸들입니다. 즉, 파일에 대한 핸들에 대한 요청이 있는 IRP에 대해 취소를 하겠다는 것 입니다.(File I/O가 해당 되겠군요)

IoCancelrp

BOOLEAN IoCancelIrp(
  _In_  PIRP Irp
);

커널레벨의 함수는 IRP의 포인터를 받게 되어 있습니다.

 

그러면 여기서 IRP가 무엇인가?

 

IRP는 Io Request Packet의 약자로 커널 레벨에서 사용 되는 명령어 라고 생각하시면 됩니다.

커널의 디바이스는 여러가지 계층구조의 스택로케이션을 가지고 있는데 하위의 스택로케이션으로 전달할 때 IRP를 사용합니다.

 

모든 IRP에 대한 취소는 커널 레벨에서의 IoCancelIrp()가 호출 된다. 덧 붙이자면 유저레벨에서 호출되는 함수들은 모두 다시 커널 레벨에 있는 함수들이 재 호출 된다고 생각하면 됩니다.

 

그렇다면 꼭 이 2개의 함수들을 호출해야만 IRP Cancel이 될까요?

 

꼭 그런 것만은 아닙니다. 위 2개의 함수는 Irp에 대해서 취소 요청을 하는 함수 이지만, IRP_MJ_CLEANUP(드라이버의 Major Funtion의 일부) 루틴이 있습니다.

 

이 루틴은 유저레벨에서 핸들을 닫는 행동(CloseHandle)을 한다던지, 커널 레벨에서 핸들을 닫는 행동(NtClose, ZwClose등)을 할 경우 해당 루틴으로 요청이 됩니다

 

이 루틴으로 들어오게 되면 I/O가 사용중이여도 Irp에 대해 취소를 하게 됩니다.

 

마지막으로

파일에 대해 Create, Open을 하는 경우 파일 핸들을 사용하게 되는데 응용프로그램은 (프로그래머의 실로 인해, CloseHandle 호출 전 응용프로그램의 오류로 인해) 파일 핸들을 닫지 않고 종료가 될 수 있습니다. 커널 레벨에서는 이런 경우가 당연하다고 판단을 하고 작업을 해야 합니다. 그래서 Irp Cancel처리 부분이 중요하다는 것입니다.

http://rurury.tistory.com/entry/IRP-취소IRP-Cancel의-중요성

 

코멘트쓰기
  좋음   놀람   궁금   화남   슬픔   최고   침묵   시무룩   부끄럼   난감
* 코멘트는 500자 이내(띄어쓰기 포함)로 적어주세요.
목록 보기   지금 보고 계시는 글을 회원님의 my Mblog >> 스크랩에 넣어두고 다음에 바로 보실 수 있습니다.  
회사소개  |   개인정보취급방침  |  제휴문의  |   광고문의  |   E-Mail 무단수집거부  |   고객지원  |   이용안내  |   세금계산서
사업자등록번호 안내: 220-81-90008 / 통신판매업신고번호 제 2017-서울구로-0055호 / 대표: 홍영준, 서민호
08390, 서울시 구로구 디지털로32길 30, 1211호 / TEL. 02_6719_6200 / FAX. 02-6499-1910
Copyright ⓒ (주) 데브피아. All rights reserved.