메모장 입니다2

Windows] 커널 데이터 IO 방식 본문

Study/Programming

Windows] 커널 데이터 IO 방식

Wooum@n 2017. 9. 1. 22:18

1.개요


 -IRP 후킹을 이용한 키로거 제작중, 디바이스 오브젝트에 플레그값(DO_BUFFERED_IO)을 설정 안하니 

블루스크린 오류가 발생하여서, 해당 속성값에 대한 정보를 찾게 됨.




2.방


 -쓰레드, 프로세스의 데이터 관련


1)Direct IO


2)Buffred IO


3)Neither IO(디폴트)



 -DeviceIoControl 관련

>DeviceIoControl 함수로 전달되는 데이터 버퍼의 전달형식을 지정

>데이터 저장위치가 달라지기 때문에 중요.


1)METHOD_BUFFERED

>Buffred IO 방식으로 전달.

>입력: 모름 (참고 자료에는 associatedIrp.systembuffer라고 나와있으나, 실제로 테스트 결과 해당 버퍼로 전달시 유저모드에서 확인이 안됨.)

  출력: irp->UserBuffer


2)METHOD_IN_DIRECT | METHOD_OUT_DIRECT

>Direct 방식.

//아직 안해봄.


3)METHOD_NEITHER

>Neither 방식.

>입력: StackLocation->Parameters.DeviceIoControl.Type3InputBuffer

  출력: irp->UserBuffer


*입력: 유저 -> 커널  (out)/ 출력: 커널 -> 유저 (in)

*다른 방식에서의 버퍼공간에 접근할 경우, 윈도우가 멈춘다.((테스트 결과)



참고: http://ezbeat.tistory.com/341




*자세한 정리는, 추후에 관련 내용을 다룰 때에 하나씩 추가.