본문 바로가기

reversing/Windows Driver

IRP, I/O Stack 관련 내용 정리 [2]

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