본문 바로가기
개발/Windows

DeviceIoControl 버퍼 사용법

by lucidmaj7 2020. 1. 7.
728x90
반응형

DeviceIoControl 사용시 버퍼 방식에 따른 버퍼 접근에 대한 정리이다.

METHOD_BUFFERED

Input과 Output 버퍼 모두 AssociatedIrp.SystemBuffer를 사용한다. 이때 버퍼의 사이즈는 사용자의 Input과 Output 버퍼사이즈의 최대 사이즈이다. Input과 Output 모두 같은 메모리를 사용하기 때문에 버퍼를 사용할때 Input 버퍼를 먼저 읽고 Output버퍼에 써야 한다. (안그럼 덮어 써진다.)

METHOD_IN_DIRECT, METHOED_OUT_DIRECT

Input Data는 Irp->AssoicatedIrp.SystemBuffer로 표현된다. Output Data는 MDL로 표현되며 Irp->MdlAddress에 들어간다. 읽기나 쓰기 버퍼의 크기는 Parameters.DeviceIoControl.OutputBufferLenth에 명시된다.

METHOD_NEITHER

유저 영역의 Input버퍼의 포인터는 Parameters.DeviceIoControl.Type3InputBuffer에 저장된다. 유저영역의 Output 버퍼 포인터는 IRP Header의 UserBuffer Field에 저장된다.

참고

728x90
반응형

댓글