커널 모드 드라이버를 프로그래밍할 때 많이 사용되는 데이터 구조체의 설명
IRP (I/O Request Packet)
IRP는 운영체제에서 Input/Output 요청을 하기위해 사용되는 데이터 구조체입니다. 커널 드라이버에서는 IRP를 사용하여 컴퓨터인 하드웨어와 상호작용을 하고, 컴퓨터와 통신하게 됩니다. 또한 윈도우 운영체제에서의 유저모드 프로그램들과의 통신을 처리할 수 있습니다. 커널 드라이버에서의 IRP는 디바이스 객체와 함께 사용되는 파일객체, 메모리 버퍼 및 기타의 것들이 포함되어있습니다. I/O요청의 상태를 추적하고 요청이 완료되면 해당 요청의 결과를 보고하는 구조체입니다.
참고
IRP (wdm.h) - Windows drivers | Microsoft Learn
DEVICE_OBJECT
DEVICE_OBJECT는 윈도우 운영체제에서 하드웨어 디바이스를 나타내는 데이터 구조체입니다. 커널 모드 드라이버에서 하드웨어 디바이스와 상호 작용하기 위해서 사용되는 구조체입니다. 개체는 드라이버가 I/O 요청에 대하여 처리하게되는 논리적, 가상 또는 물리적 디바이스를 나타냅니다
참고
DEVICE_OBJECT(wdm.h) - Windows drivers | Microsoft Learn
DRIVER_OBJECT
DRIVER_OBJECT는 윈도우 운영체제에서 커널 모드 드라이벌르 나타내는 데이터 구조체입니다. 드라이버의 핵심 기능을 제공하고 운영체제의 커널 모드에서 실행되는 드라이버 코드에서 사용됩니다. 각 드라이버 개체는 커널 모드 드라이버의 이미지를 나타내게 됩니다. 보통 DriverEntry의 매개변수인 PDRIVER_OBJECT로 많이 볼 수 있습니다. 멤버변수를 활용해서 드라이버의 관련된 접근을 할 수 있습니다.
참고
DRIVER_OBJECT(wdm.h) - Windows drivers | Microsoft Learn
IO_STACK_LOCATION
IO_STACK_LOCATION은 I/O 요청 패킷 (IRP) 구조체의 일부로, 드라이버 스택에서 각 드라이버에 대한 정보를 저장하는 구조체입니다. 각 드라이버는 이 구조체를 사용하여 I/O작업에 대한 정보를 저장, 수정 및 검색할 수 있습니다. 드라이버 간의 정보전달을 효율적으로 수행하게 되고 드라이버 개발을 단순화하는 장점이있습니다.
참고
IO_STACK_LOCATION (wdm.h) - 윈도우 드라이버 | 마이크로소프트 런 (microsoft.com)
UNICODE_STRING
UNICODE_STRING은 윈도우 커널에서 유니코드 문자열을 표현하는 구조체입니다. 드라이버에서 문자열 처리를 위해 사용되고, 이 구조체는 문자열의 길이, 최대길이 또는 버퍼 포인터를 포함하여 문자열의 주된 정보를 저장합니다. 커널에서 이 구조체를 사용할 시 유니코드 문자열을 안전하게 처리할 수 있고, 문자열을 효율적으로 관리할 수 있습니다.
참고
'Windows > 자료구조' 카테고리의 다른 글
| 연결리스트 - Linked list(C++ 코드구현, 소스코드, 개념) (0) | 2023.07.08 |
|---|---|
| 스택 - Stack (C++ 코드구현, 소스코드, 개념) (2) | 2023.04.03 |
댓글