Miniport drivers

NDIS 미니포트 드라이버는 두 가지 기본적인 기능을 가지고 있다:

  • NIC를 통해 데이터 송/수신을 포함하는 Netword Interface Card (NIC) 관리.
  • Filter 드라이버, Intermediate 드라이버 그리고 Protocol 드라이버와 같은 상위 레벨 드라이버와의 인터페이싱.

미니포트 드라이버는 NDIS 라이브러리를 통해 NIC와 상위 레벨 드라이버간에 통신을 한다. NDIS 라이브러리는 미니포트 드라이버가 호출 해야 할 모든 운영체제 함수들(NdisMXxx, NdisXxx 함수)을 제공하고 있다. 미니포트 드라이버는 NDIS가 상위 레벨 드라이버를 대신해 미니포트 드라이버에 접근하거나 자체적인 목적을 수행하기 위해 호출 할 경우를 위해 MiniportXxx 함수와 같은 진입점들의 세트를 익스포트 해야만 한다.

다음은 미니포트 드라이버와 상위 레벨 드라이버 간의 송수신 작업에 대한 상호작용을 보여준다:

  • Transport 드라이버에 전송 할 패킷이 있으면 NDIS 라이브러리에서 Export 된 NdisXxx 함수를 호출한다. 그다음 NDIS는 미니포트 드라이버가 Export 한 해당 MiniportXxx 함수를 호출하여 미니포트 드라이버에 패킷을 전달한다. 그런 다음 미니포트 드라이버는 전송을 위해 적절한 NdisXxx 함수를 호출하여 패킷을 NIC에 전달한다.
  • NIC가 스스로에게 지정된 패킷 주소를 받으면, NDIS 또는 NIC의 미니포트 드라이버에 의해 처리되는 하드웨어 인터럽트를 게시 할 수 있게 된다. NDIS는 적절한 MiniportXxx 함수를 호출하여 NIC의 미니포트 드라이버에게 알리게 된다. 미니포트 드라이버는 NIC에서 데이터 전송을 설정하고 해당 NdisXxx 함수를 호출하여 상위 레벨 드라이버에게 바인드 된 패킷의 존재 여부를 알려준다.

Connectionless and Connection-Oriented Miniport Drivers

NDIS는 비연결 환경과 연결 지향 환경 모두를 위한 미니포트 드라이버를 지원한다.

비연결 미니포트 드라이버는 이더넷과 같은 비 연결 네트워크 미디어 용 NIC를 제어한다. 비연결 미니포트 드라이버는 역직렬화(deserialized)와 직렬화(serialized)로 나눠진다.

NOTE: NDIS 6.0 이상의 모든 드라이버는 역직렬화(deserialized) 드라이버다.

역직렬화(deserialized) 드라이버는 자신의 MiniportXxx 함수의 동작을 직렬화(serialize) 하고 모든 들어오는 송신 패킷을 내부에 있는 큐에 저장한다. 드라이버의 크리티컬 섹션(한 번에 하나의 스레드만 실행할 수 있는 코드)이 작게 유지되면 양방향 통신의 성능이 크게 향상 된다.


직렬화(serialize) 
드라이버는 MiniportXxx 함수 호출을 직렬화(serialize)하고 송신 대기열(send queue)을 관리하기 위해 NDIS를 사용한다.

연결지향 미니포트 드라이버는 ISDN과 같은 연결지향 네트워크 미디어 용 NIC를 제어한다. 연결지향 미니포트 드라이버는 항상 역직렬화(deserialized)한다. MiniportXxx 함수를 직렬화(serialize)하고 모든 들어오는 송신 패킷을 내부적으로 대기(queue) 시킨다.

NDIS 미니포트 드라이버는 non-NDIS lower edge를 가질 수도 있다.

NDIS가 아닌 하단 가장자리를 통해 미니포트 드라이버는 USB와 같은 버스 인터페이스를 사용하여 버스 장치를 제어한다. 미니포트 드라이버는 I/O Request Packet(IRP)를 버스에 보내거나 버스에 연결된 원격 장치에 직접 보내 장치와 통신한다. upper edge에서 미니포트 드라이버는 상위 NDIS 드라이버와 통신 할 수 있게 하는 표준 NDIS 미니포트 드라이버 인터페이스를 제공한다.

링크: https://docs.microsoft.com/ko-kr/windows-hardware/drivers/network/ndis-miniport-drivers2

'프로그래밍' 카테고리의 다른 글

Miniport drivers  (0) 2019.06.24
NDIS 드라이버 유형  (0) 2019.06.24
visual studio 2017 에서 Driver 개발  (0) 2019.02.13
MSB8022  (0) 2019.02.13
IrpSp->FileObject  (0) 2017.11.16
IopLoadUnloadDriver  (0) 2014.12.05

Network Driver Interface Specification (NDIS) 라이브러리는 네트워크 드라이버에서 네트워크 하드웨어들을 추상화한다. 또한 NDIS는 네트워크 전송과 같은 상위 레벨 드라이버들에서 하드웨어를 관리하는 하위 레벨 드라이버들이 추상화 된 네트워크 드라이버 계층 간의 표준 인터페이스를 구체적으로 명시한다. 또한 NDIS는 다른 시스템 값과 연결을 위한 매개변수 블록, 핸들 그리고 함수들에 대한 포인터를 포함하는 매개 변수들과 상태 정보를 유지 관리한다.

NDIS가 제공하는 네트워크 드라이버들의 기본적인 유형은 다음과 같다.

  • Miniport Drivers
  • Protocol Drivers
  • Filter Drivers
  • Intermediate Drivers

링크: https://docs.microsoft.com/ko-kr/windows-hardware/drivers/network/ndis-drivers

'프로그래밍' 카테고리의 다른 글

Miniport drivers  (0) 2019.06.24
NDIS 드라이버 유형  (0) 2019.06.24
visual studio 2017 에서 Driver 개발  (0) 2019.02.13
MSB8022  (0) 2019.02.13
IrpSp->FileObject  (0) 2017.11.16
IopLoadUnloadDriver  (0) 2014.12.05
#SingleInstance [ForceIgnoreOff]

이 구문이 들어가면 스크립트가 이미 실행 중인 상황에서 다시 실행할 수 있는지 여부를 결정할 수 있다. ForceIgnoreOff 에 어떠한 내용이 들어가느냐에 따라 결정된다.

#SingleInstance

ForceIgnoreOff 생략 시, 이전에 실행 중인 스크립트를 유지할지 새로 실행할지 묻는 MsgBox를 표시한다.

#SingleInstance force

여부를 묻지 않고 강제로 새로운 스크립트를 실행하게 한다.

#SingleInstance ignore

실행중인 기존 스크립트를 그대로 유지한다.

#SingleInstance off

기존 스크립트를 유지한 상태로, 새로운 스크립트가 별도로 실행 된다.

'AutoHotkey' 카테고리의 다른 글

#SingleInstance  (0) 2019.05.13
AutoHotkey  (0) 2019.05.13

+ Recent posts