메모장 입니다2
Windows] IRP 콜백 함수 본문
1.CompletionRoutine 개요
-IRP 처리 과정에서 IoCompleteRequest()가 호출되면, IRP가 디바이스스텍의 최하단,
즉 버스드라이버의 처리까지 완료된 후에 스텍을 거슬러 돌아오는 시점에 자동으로 호출된다.
(등록되있을 경우)
-후처리용 콜백함수라 함.
2.선언
-콜백함수 형식
NTSTATUS
IoCompletion(
PDEVICE_OBjECT DeviceObject,
PRIP irp,
PVOID Context
);
-콜백함수 등록
VOID
IoSetCompletionroutine(
IN PIRP irp,
IN PIO_COMPLETION_ROUTINE CompletionRoutine,
IN PVOID Context,
IN BOOLEAN InvokeOnSuccess,
IN BOOLEAN InvokeOnError,
IN BOOLEAN InvokeOnCancel
);
*Invoke~~ : IRP의 처리 결과.
3.주의사항
-irp의 PendingReturned를 검사하여, 펜딩처리를 꼭 해주어야 한다.
//안하고 실행하니, IRP가 처음 패킷만 처리되고 나머지는 동작을 하지 않았다.
if(irp->Pendingreturned)
{
IoMarkIrpPending(irp);
}
참고: https://docs.microsoft.com/en-us/windows-hardware/drivers/ifs/checking-the-pendingreturned-flag
'Study > Programming' 카테고리의 다른 글
Windows] 커널 데이터 IO 방식 (0) | 2017.09.01 |
---|---|
Windows] DKOM - 1) 개요, 특징 (0) | 2017.08.29 |
Windows] 드라이버 개발 - IRP 후킹 - 1) 테스트 (0) | 2017.08.24 |
Windows] 드라이버 개발 - 7) WDM 드라이버 개발 (0) | 2017.08.23 |
C++] codility - OddoccurrencesInArray (0) | 2017.08.13 |