NDIS 드라이버 공부 내용 정리합니다.
http://www.htsns.com 를 참조해서 작성 되는 내용이므로 정확한 내용을 원하시는 분은 참고하시길 바랍니다. |
Chapter1 네트워크 드라이버 디자인 가이드에 대한 로드맵
Windows2000(XP, 2003 포함)은 세가지 기본 타입의 커널 모드 네트워크 드라이버들을 제공합니다. 이 세가지 타입에 대해서 정확히는 아니더라도 대략적으로 알고 있어야 차후 드라이버를 작성할 때 선택해서 할 수 있을 것입니다. 그러니 세 개다 살펴 보도록 하겠습니다. 그 전에 먼저 Windows의 Network Layer 부 터 알아보도록 하겠습니다.
위에 보시는 것이 Windows의 Network Layer입니다.
[참조: http://subsub.windowstest.net/bbs/view.asp?tb=ndis&no=221 ]
보통 Network 드라이버를 짤 때 NDIS와 TDI를 사용하게 됩니다. 만약 TDI Filter를 개발한다면 얻을 수 있는 것은 IP, Port, Application Protocol(TCP 이후의 데이터)를 얻을 수 있으며 모니터링, 변조, 차단등을 할 수 있다고 합니다. NDIS Protocol Driver를 개발한다면 Ethernet Header, IP Header, TCP Header, App Protocol까지 모든 Raw Packet의 정보를 얻을 수 있다고 하네요. 하지만 직접적인 변조, 차단을 할 수 없다고 합니다. 그것을 하기 위해서는 NDIS Intermediate 드라이버나 NDIS Hook Driver 혹은 WFP(Windows Filtering Platform) 드라이버를 작성해야 한다고 합니다.
1. Miniport NIC Drivers
미니포트 드라이버는 직접 NIC을 관리하고 상위 레벨 드라이버들에 대한 인터페이스를 제공한다. (NDIS DDK 문서)
2. Intermediate Drivers
인터미디엇 프로토콜 드라이버는 legacy 전송 드라이버와 같은 상위 레벨 프로토콜 드라이버들과 미니포트 사이에 인터페이스이다. 일반적인 인터미디엇 프로토콜 드라이버를 개발하는 일반적인 이유는 존재하는 legacy 드라이버와 전송 드라이버에 알려지지 않은 새로운 미디어 타입을 위한 NIC을 관리하는 미디포트 사이에 미디어 전환을 행하는 거다.
3. Protocol Drivers
상위 레벨 프로토콜 드라이버는 TDI 인터페이스를 실행하거나 네트워크 사용자들에 대한 서비스들을 제공하기 위해 상위 edge에 또 하나의 어플리케이션 특정 인터페이스를 행한다. lower edge에 이러한 타입의 드라이버는 다음 lower 드라이버로부터 들어오는 패킷들을 수신하고 패킷들을 프로토콜 인터페이스에 제공한다. 또 하나의 타입의 프로토콜 드라이버는 연결 지향 콜 매니저이다. 콜 매니저는 프로토콜 드라이버인 연결 지향 클라이언트들을 위해 서비스들을 콜 설정하고 tear-down 을 제공한다.
Windows2000에 의해 제공되는 또 하나 타입의 커널 모드 드라이버는 필터 hook 드라이버이다. 필터 패킷들에 사용되는 필터-hook 드라이버는 운영체제에 의해 제공되는 IP 필터 드라이버의 기능을 확장한다.
작성하려고하는 드라이버 타입의 상관없이 Part 1, Network Drivers Design Guide 의 Chapter 2-3을 읽어야 한다. 이러한 장들은 Windows2000네트워크 아키텍처와 프로그래밍 고려 사항들을 토론한다. 또한 Part5, Chapter 1을 읽어야 한다. 이 장은 네트워크 요소들을 인스톨하기 위해 사용된 네트워크 INF 파일들을 토론한다. 만약 네트워크 드라이버가 예를 들어 바인딩을 제어하기 위해 notify 객체를 요구한다면은, Part 5, Chapter 2를 읽어라.
읽어야 할 추가적인 chapters들을 알기 위해, 다음 그림에서 적당한 드라이버 타입을 클릭하라. 이것은 드라이버 타입의 선택을 재 정의하도록 하고 그 섹션으로 점프할 것이다.
Miniport Drivers
작성할 다음과 같은 타입을 선택한다.
Connectionless Miniport
만약 Ethernet, FDDI, 혹은 Token Ring과 같은 비연결 지향 네트워크 미디어을 위해 NIC을 제어하는 미니포트를 작성한다면은,
Part 2, Chaters 1-7, 9을 읽어라.
WAN Miniport
만약 WAN NIC을 제어하는 미니포트를 작성한다면은,
Part 2, Chapters 1-9를 읽어라.
Connection-Oriented Miniport
만약 ATM 혹은 ISDN과 같은 연결 지향 네트워크 미디어을 위한 NIC을 제어하는 미니포트를 쓴다면은,
Part 2, Chapters 1-7, 9
Part 4, Chapter 1을 읽어라.
Integrated Miniport Call Manager(MCM)
만약 콜 매니저 서비스들을 제공하는 연결 지향 NIC을 제어하는 미니포트를 작성한다면은,
Part 2, Chapters 1-7, 9
Part 3, Chapter 2
Part 4, Chapter 1 를 읽어라.
Intermediate Drivers
작성할 인터미디엇 타입을 선택한다.
With a Connectionless Lower Edge
만약 lower edge가 비연결지향 미니포트들에 대한 인터페이스를 제공하는 인터미디엇 드라이버를 작성한다면은
Part 3, Chapter 1을 읽어라.
With a Connection-Oriented Lower Edge
만약 lower edge가 연결 지향 미니포트들에 대한 인터페이스를 제공하는 인터미디엇 드라이버를 제공한다면은,
Part 3, Chapter 1
Part 4, Chapter 4를 읽어라.
Protocol Drivers
작성할 프로토콜 드라이버의 타입을 선택한다.
With a Connectionless Lower Edge
만약 lower edge가 비연결지향에 대한 인터페이스를 제공하는 프로토콜 드라이버를 작성한다면은,
Part 3, Chapters, 2를 읽어라.
With TDI upper edge
TDI upper edge를 가지는 프로토콜를 작성한다면은
Part 3, Chapters, 2, 3, 4, 5를 봐라.
With Winsock support
만약 Winsock 지원을 제공하는 프로토콜을 작성한다면은,
Part 3, Chapters, 2, 3, 4, 5, 6을 봐라.
Connection-Oriented Client or Call Manager
만약 연결 지향 미니포트들에 대한 인터페이스를 제공하는 연결 지향 클라이언트를 작성하거나, 연결 지향 콜 매니저를 작성한다면은
Part 3, Chapter 2
Part 4, Chapter 1을 봐라.
Filter-hook Drivers
Part 6, Chapter 1을 봐라.
Bloger: moltak.net