반응형

tdifw

TDI 드라이버의 훌륭한 샘플인 tdifw에 대한 정보입니다.

URL: http://sourceforge.net/projects/tdifw/
설명: Simple TDI-Based Open Source Personal Firewall for Windows NT4/2000/XP/2003
방식: TDI Hook Driver | TDI Filter Driver

 

 

반응형
반응형

WDK VC6.0에서 빌드되지 않는다.


APP
개발 7년차에 새로 맡게된 드라이버 개발 업무.
새로운 마음으로 드라이버 개발 스터디를 시작했다
.

처음에는 Chris Cant Windows Driver Model에 나온대로 makefile프로젝트를 만들어 사용했지만
,
새 프로젝트 생성 할 때마다, 성가시다
.
"
실용주의 프로그래머"에서 그랬던가
?
단순 반복작업을 끊임없이 반복하지 말라고. 자동화 프로세스를 생성하라고
...

의욕에 넘쳐, 드라이버 개발 AppWizard도 만들고

쌍으로 동작하는 드라이버 테스트 AppWizard도 만들었다.

AppWizard
를 만들어서 Filter-Hook드라이버를 생성해 보니
,
... 스스로도 만족스러웠다
.

근데
...
해당 드라이버의 Vista버전을 만들기 위해, WFP Callout 드라이버를 작성하다보니

이 넘은 WDK가 필요하다.

출근하자 마자 DDK를 지우고 WDK 개발 환경을 구축했다
.

두근거리는 마음으로 빌드를 해 보았건만
....
"Compiler version not supported by Windows DDK"
이런 놈의 에러가 뜬다.

위치는 ntddk.h

#if _MSC_VER < 1300
#error Compiler version not supported by Windows DDK
#endif

"
.. 뭐야? VC6.0으로는 빌드가 안되는 거야"

이리저리 자료를 찾아보니, 눈에 들어오는 문장이 있다
.
"참고로 WDK VisualStudio 6.0에서는 컴파일 되지 않습니다"

OTL ...

삽질 한거란 말이더냐?
암튼 안된단다
.

Visaul Studio 2005
를 이용해 빌드하는 방법은 눈에 띈다.
그치만 makefile프로젝트인걸
...

꿩대신 닭! 해당 정보는 아래 블로그를 참조
.
http://www.hollistech.com/Resources/ddkbuild/ddkbuild.htm
http://blog.naver.com/ikoguryo?Redirect=Log&logNo=10022487837
http://octet.egloos.com/1085023

 

반응형

'Windows Programming > 드라이버' 카테고리의 다른 글

Run-time String 함수와 kernel String함수의 대응관계  (0) 2008.10.17
[TDI Filter Driver] tdifw  (0) 2008.09.23
Filter-Hook Driver  (0) 2008.07.21
Network Driver의 종류  (0) 2008.07.21
DeviceObject 삭제  (1) 2008.06.20
반응형

Filter-Hook Drivers

 

Filter-Hook Driver는 타 드라이버에 비해 아주 간단하게 작성할 수 있다.

그렇다면 작성이 편리한 Filter-Hook Driver가 왜 범용적으로 사용되지 않는 것일까?

아래의 MSDN문서를 읽어보면 그 이유를 알 수 있다.

Filter-hook driver OS상에 단 하나의 드라이버만 설치될 수 있으며,

이로 인해 다른 Filter-hook driver가 선점하고 있다면, 이후에 등록하려는 Filter-hook dirver는 등록 자체가 실패해 버린다.( 실제로 이러한 문제 때문에 드라이버를 재개발한 케이스가 있으니 참고하기 바란다.)

 

Windows Driver Kit: Network Devices and Protocols

http://msdn.microsoft.com/en-us/library/ff546489.aspx


filter-hook driver
는 네트워크 패킷을 필터링 하는데 사용하는 kernel-mode driver이다. Filter-hook drivers는 시스템이 제공하는 Internet Protocol (IP) filter driver의 기능을 확장한다. filter-hook driver Windows 2000혹은 그 이후의 OS에서만 설치될 수 있다.

오직 하나의 filter-hook 드라이버만이 OS상에 설치될 수 있으며, IP filter driver에 의해 사용될 수 있다. filter-hook driver IP filter driver를 위한 extension hook포인터가 Null인 경우에만 자기 자신을 IP filter driver에 등록할 수 있다. filter-hook driver가 등록된 이후, IP filter driver는 자신에게 extension hook을 설치할 filter-hook드라이버를 위한 file object를 할당한다.

Note Windows Vista의 경우 filter-hook or firewall-hook drivers를 사용하지 말고, 대신에 Windows Filtering Platform Callout Drivers를 사용하라.

 

반응형

'Windows Programming > 드라이버' 카테고리의 다른 글

[TDI Filter Driver] tdifw  (0) 2008.09.23
WDK는 VC6.0에서 빌드되지 않는다.  (0) 2008.07.24
Network Driver의 종류  (0) 2008.07.21
DeviceObject 삭제  (1) 2008.06.20
데이타 버퍼 어드레싱  (0) 2008.06.11
반응형

Windows Driver Kit: Network Devices and Protocols

Using the Network Driver Design Guide (NDIS 5.1)

http://msdn.microsoft.com/en-us/library/ms797076.aspx


Windows 기반 OS는 몇가지 타입의 kernel-mode network driver를 지원한다. 이 문서는 이러한 종류의 네트워크 드라이버를 어떻게 작성하는지 기술하고 있다. topic은 지원되는 네트워크 드라이버 타입과 각 타입의 네트워크 드라이버를 개발하기 전에 읽어야 할 가이드의 섹션에 대해 간략히 설명하고 있다.

Microsoft Windows 2000과 그 이후 버전의 OS는 네 가지 타입의 kernel-mode 네트워크 드라이버를 지원한다.

· Miniport drivers

miniport driver network interface card(NIC) 를 직접관리하고, higher-level 드라이버와의 인터페이스를 제공한다.

· Intermediate drivers

intermediate driver legacy transport driver와 같은 upper-level protocol dirverminiport driver interface역할을 한다. intermediate protocol driver를 개발하는 전형적인 예는 존재하는 lagacy transport driver miniport드라이버(that manages a NIC for a new media type unknown to the transport driver.) 사이의 매채변환(media translation)을 수행하는 것이다.

· Protocol drivers

upper-level protocol driver TDI interface 또는 가능한 application-specific 인터페이스를 기술한다. at its upper edge to provide services to users of the network. At its lower edge, a protocol driver provides a protocol interface to pass packets to and receive incoming packets from the next-lower driver.

Another type of protocol driver is a connection-oriented call manager. A call manager provides call setup and tear-down services for connection-oriented clients, which are also protocol drivers.

· Filter-hook driver

A filter-hook driver는 패킷을 필터링 하는데 사용된다. 이 드라이버는 OS에서 제공하는 IP Filter Driver의 기능을 확장한다.


For general information about Windows network architecture and programming considerations, see Network Architecture for Kernel-Mode Drivers and Network Driver Programming Considerations. For information about network INF files, which are used to install network components, see Installing Network Components. If your network driver requires a notify object—for example, to control bindings—see also Notify Objects for Network Components.

To find out which additional sections to read for a particular driver type, see the following sections.

Miniport Drivers (NDIS 5.1)

There are several types of miniport drivers. Read the sections that are recommended for the type of driver you are writing:

To learn about connectionless miniport drivers

If you are writing a miniport driver that controls a NIC for connectionless network media, such as Ethernet, FDDI, or Token Ring; read:

Introduction to NDIS Miniport Drivers

Overview of Miniport Driver Operations and Functions

Miniport Driver DriverEntry Function and Initialization

Transferring Data

Obtaining and Setting Miniport Driver Information and NDIS Support for WMI

Plug and Play for NDIS Miniport Drivers

Power Management for NDIS Miniport Drivers

Reset, Halt, and Shutdown Functions

To learn about connection-oriented miniport drivers

If you are writing a miniport driver that controls a NIC for connection-oriented network media, such as ATM or ISDN, read:

All the sections listed for connectionless miniport drivers

Connection-Oriented NDIS

To learn about WAN miniport drivers

If you are writing a miniport driver that controls a WAN NIC, read:

All the sections listed for connectionless miniport drivers

WAN Miniport Drivers

To learn about integrated miniport driver call managers (MCM)

If you are writing a miniport driver that controls a connection-oriented NIC and that also provides call manager services, read:

All the sections listed for connectionless miniport drivers

Connection-Oriented NDIS

To learn about miniports with a WDM lower interface

If you are writing a miniport driver that has a WDM lower interface read:

All the sections listed for connectionless miniport drivers

Miniport Driver with a WDM Lower Interface

To learn about IrDA miniport drivers

If you are writing a miniport driver that controls an IrDA adapter, read:

All the sections listed for connectionless miniport drivers

IrDA Miniport Drivers

To learn about additional miniport capabilities

To learn about additional miniport capabilities, read:

Task Offload

Load Balancing and Failover

Intermediate Drivers (NDIS 5.1)

You can write an intermediate driver that has either a connectionless or a connection-oriented lower edge. Read the sections that are recommended for the type of driver you are writing:

To learn about intermediate drivers that have a connectionless lower edge

If you are writing an intermediate driver whose lower edge provides an interface to connectionless miniport drivers, read:

NDIS Intermediate Drivers

To learn about intermediate drivers that have a connection-oriented lower edge

If you are writing an intermediate driver whose lower edge provides an interface to connection-oriented miniport drivers, read:

NDIS Intermediate Drivers

Connection-Oriented NDIS

Protocol Drivers (NDIS 5.1)

You can write a protocol driver that has either a connectionless or a connection-oriented lower edge. In addition, your protocol driver can expose a transport driver interface (TDI) at its upper edge and can also provide Winsock support. Read the sections that are recommended for the type of driver you are writing:

To learn about protocol drivers that have a connectionless lower edge

If you are writing a protocol driver whose lower edge provides an interface to connectionless miniport drivers, read:

NDIS Protocol Drivers

To learn about protocol drivers that are connection-oriented clients, or that are connection-oriented providers of call manager services

If you are writing a connection-oriented client, which provides an interface to connection-oriented miniport drivers, or if you will be writing a connection-oriented call manager, read:

NDIS Protocol Drivers
Connection-Oriented NDIS

To learn about protocol drivers that have a TDI upper edge

If you are writing a protocol that has a TDI upper edge, read:

NDIS Protocol Drivers

TDI Transports and Their Clients

TDI Routines, Macros, and Callbacks

TDI Operations

To learn about protocol drivers that have Winsock support

If you are writing a protocol that provides Winsock support, read:

NDIS Protocol Drivers

Transport Helper DLLs for Windows Sockets

Filter-Hook Drivers (NDIS 5.1)

To learn about filter hook drivers, read the following section:

                 Filter-Hook Drivers

 

반응형

'Windows Programming > 드라이버' 카테고리의 다른 글

WDK는 VC6.0에서 빌드되지 않는다.  (0) 2008.07.24
Filter-Hook Driver  (0) 2008.07.21
DeviceObject 삭제  (1) 2008.06.20
데이타 버퍼 어드레싱  (0) 2008.06.11
Device Object naming  (0) 2008.05.30
반응형

DeviceObject 삭제

 

1.  Driver 서비스 시작 시(StartService호출) ERROR_FILE_NOT_FOUND(0x2)가 발생하는 경우
** 드라이버 서비스 생성시 드라이버 파일 경로를 잘못 설정한 경우는 논외로 함

(1) 현상

1) 재 부팅 후 1회에 한해 StartService 호출이 성공함

2) 서비스 중지 후 다시 서비스를 실행할 경우, ERROR_FILE_NOT_FOUND 에러가 발생함

(2) 원인

1) IoCreateDevice를 통해 생성한 DeviceObject를 드라이버 Unload시 삭제하지 않은 경우 발생한다.

(3) 결론

1) IoCreateDevice를 통해 생성한 DeviceObject는 드라이버 Unload 시점에서 IoDeleteDevice를 호출하여 반드시 삭제 해야함

WDM Driver

u DriverObject->MajorFunction[IRP_MJ_PNP]에 등록한 함수에서 IRP_MN_REMOVE_DEVICE Irp를 받았을 때 삭제

Nt Driver

u DriverObject->DriverUnload에 등록한 함수에서 삭제

u DeviceObject삭제를 위해, DriverEntry에서 해당 포인터를 저장해 놓아야 한다??

 

 

반응형

'Windows Programming > 드라이버' 카테고리의 다른 글

WDK는 VC6.0에서 빌드되지 않는다.  (0) 2008.07.24
Filter-Hook Driver  (0) 2008.07.21
Network Driver의 종류  (0) 2008.07.21
데이타 버퍼 어드레싱  (0) 2008.06.11
Device Object naming  (0) 2008.05.30
반응형

데이타 버퍼 어드레싱

 

n 커널 드라이버는 대부분의 경우 User-Mode 가상 어드레스를 사용하는 메모리에 직접 접근하지 않는다. MS 윈도우즈 NT는 사용자 모드 데이타 버퍼에 접근할 수 있는 3가지 방법을 제공한다.

 

u  Buffered 메소드

ü  I/O 매니저는 User-Mode 데이터 버퍼의 크기와 같은 시스템 버퍼를 만든다. 여러분의 드라이버는 이 시스템 버퍼를 통해 작업할 수 있으며, I/O매니저는 User-Mode 버퍼와 System 버퍼 사이의 데이타를 복사한다.

ü   I/O 매니저가 IRP_MJ_READ 또는 IRP_MJ_WRITE 요청을 만들때 I/O매니저는 새로운 IRP에서 데이터 버퍼를 어떻게 설명하는지를 결정하기 위한 Direct Bufferd 플래그를 조사한다. DO_BUFFERED_IO가 설정되어 있으면 I/O매니저는 사용자 버퍼와 같은 크기의 NonPaged메모리를 할당한다.

ü  메소드 기술

NTSTATUS AddDevice(...)

{

PDEVICE_OBJECT fdo;

IoCreateDevice(..., fdo);

fdo->Flags |= DO_BUFFERED_IO

}

ü  IRP구조체 내의 관련 필드

     Irp->AssociatedIrp.SystemBuffer

ü  IO_STACK_LOCATION 구조체 내의 관련 필드

     READ 요청: stack->Parameters.Read.Length

     WRITE 요청: stact->Parameters.Write.Length

 

u   Direct 메소드

ü  I/O 매니저는 사용자 모드 버퍼를 포함하는 물리적 페이지를 잠그고 잠긴 페이지들을 설명하기 위한 MDL(Memory Descripter List)라고 불리는 보조 데이터 구조체를 생성한다. 여러분은 MDL을 이용하여 작업할 수 있다.

ü  디바이스 객체에 DO_DIRECT_IO 플래그가 설정되어 있다면 I/O매니저는 사용자 모드 데이터버퍼를 포함하는 Locked Page를 설명하는 MDL을 생성한다.

ü  메소드 기술

NTSTATUS AddDevice(...)

{

 PDEVICE_OBJECT fdo;

 IoCreateDevice(..., fdo);

 fdo->Flags |= DO_DIRECT_IO

}

ü  IRP 구조체 내의 관련 필드

     Irp->MdlAddress

ü  메모리를 엑세스하기 위해 MDL 구조체를 직접사용하지는 않으며, 대신 매크로와 서포트 함수를 이용한다.

매크로 또는 함수

IoAllocateMdl

IoBuildPartialMdl

IoFreeMdl

MmBuildMdlForNonPagedPool

MmGetMdlByteCount

MmGetMdlByteOffset

MmGetMdlVirtualAddress

MmGetPhysicalAddress

MmGetSystemAddressForMdl

MmGetSystemAddressForMdlSafe

MmInitializeMdl

MmPrepareMdlForReuse

MmProbeAndLockPages

MmSizeOfMdl

MmUnlockPages

 

u  Neither 메소드

ü  I/O매니저는 단순히 사용자 모드 가상 어드레스를 여러분에게 보낸다. 여러분은 사용자 모드 어드레스와 함께 매우 조심스럽게 작업할 수 있다.

ü  디바이스 객체에 DO_DIRECT_IO 플래그가 설정되어 있다면 I/O매니저는 사용자 모드 데이터버퍼를 포함하는 Locked Page를 설명하는 MDL을 생성한다.

ü  메소드 기술

NTSTATUS AddDevice(...)

{

 PDEVICE_OBJECT fdo;

 IoCreateDevice(..., fdo);

 fdo->Flags |= 0

}

ü  IRP 구조체 내의 관련 필드

     Irp->UserBuffer

ü  IO_STACK_LOCATION 구조체 내의 관련 필드

     stack->Parameters.Read.Length

     stack->Parameters.Write.Length

 

 

반응형

'Windows Programming > 드라이버' 카테고리의 다른 글

WDK는 VC6.0에서 빌드되지 않는다.  (0) 2008.07.24
Filter-Hook Driver  (0) 2008.07.21
Network Driver의 종류  (0) 2008.07.21
DeviceObject 삭제  (1) 2008.06.20
Device Object naming  (0) 2008.05.30

+ Recent posts