SMALL
I/O Stack과 IRP관련 함수 정리
IoGetCurrentIrpStackLocation() 함수
Irp의 현재 스택을 위치를 가져옴, CurrentStackLocation 값
IoGetNextIrpStackLocation() 함수
Irp의 다음 스택 주소를 가져옴
IoSetNextIrpStackLocation 함수
IoSetNextIrpStackLocation 루틴은 호출자의 드라이버에 할당 된 IRP의 IRP 스택 위치를 설정 함
IoCallDriver 함수는 내부적으로 IoSetNextIrpStackLocation 함수를 호출 함
IoSkipCurrentIrpStackLocation 함수
IRP의 이전 스택 주소를 현재 스택 주소로 지정함
IoSkipCurrentIrpStackLocation 함수는 내부적으로 IoSetNextIrpStackLocation 함수를 호출 함
IoCopyCurrentStackLocationToNext 함수
IRP의 현재 스택 주소의 내용을 다음 스택 주소로 복사함
IoCallDriver 함수
현재 드라이버가 받아서 사용하던 IRP의 소유권을 다른 드라이버에게 전달
IoSetCompletionRoutine() 함수
해당 함수는 현재 스택 위치가 4번이면 그 위에 존재하는 3번 위치에 CompletionRoutine을 등록
IoCompleteRequest() 함수가 호출되면 3번 위치까지 스택의 값이 제거(pop)됨
CompletionRoutine을 설정했다는 것은 IRP 를 전달하고 그 결과가 나올때 처리 함
1. IoCallDriver
2. IoCallDriver
3.IoSkipCurrentStackLocation
4. IoCallDriver
[참고] : https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/passing-irps-down-the-driver-stack
[출처] : https://www.youtube.com/watch?v=6gIbmod6Dpo&t=3807s
LIST
'reversing > Windows Driver' 카테고리의 다른 글
WinDBG 명령어 [CallStack] (0) | 2017.08.08 |
---|---|
IRP, I/O Stack 관련 내용 정리 [3] (0) | 2017.08.04 |
Security Descriptors (0) | 2017.08.04 |
Minifilter - User Mode Communication (0) | 2017.08.04 |
IRP, I/O Stack 관련 내용 정리 (0) | 2017.07.28 |