2010-08-13 2 views
0

질문은 꽤 자명하다. 나는 Windows XP에서 커널 모드 드라이버로 소켓을 열고 제어 할 수 있어야한다. 나는 Vista와 이후에 커널 모드 winsock을 제공하지만 XP에서는 그런 일이 없다는 것을 안다.커널 모드 드라이버에서 네트워킹하기

건배

편집 나는 사용자 모드 서비스가 TDI를 사용하는 소켓 작업을하고, 하나 가지고 추천을 했어. 어느 것이 가장 좋습니까?

+0

정말 필요한가요? 사용자 모드 서비스를 만들고이를 사용하여 통신합니다. 이것이 가능하지 않은 이유가 있습니까? – Christopher

+0

사용자 모드 서비스가 더 합리적인 방법이라고 생각하면 성능 문제가있을 수 있다고 생각합니다. – Kazar

+0

커널 모드에서 인터넷의 parson 데이터에 보안 문제가있을 수 있습니다. –

답변

1

TDI는 사용하기 쉬운 인터페이스가 아닙니다. 응용 프로그램에서 네트워크 전송 드라이버 (TCP, NetBEUI, AppleTalk 등)를 추상화하도록 설계되었습니다. 소켓 작업에 API를 사용할 수 있도록 API를 완전히 이해해야합니다. 이는 사용자 모드 서비스를 작성하고 통신하는 것보다 훨씬 더 많은 작업입니다. 서비스에서 드라이버로 역방향 IRP를 발행 할 수 있으므로 드라이버가 필요할 때 통신을 시작할 수 있습니다.

또한 드라이버에서 제거하는 복잡성 (여기서는 사용자 모드)이 좋을수록 좋습니다.

그러나 사용자 모드 서비스를 사용하려면 드라이버에 대한 데이터 전송 당 컨텍스트 스위치 이 필요합니다. 이는 패킷 단위 일 수 있습니다. 이것은 가장 피해야하는 오버 헤드입니다.

왜 드라이버가 네트워크 I/O를 수행해야하는지 궁금합니다. 표면적으로 적어도 디자인 문제를 나타내는 것 같습니다.

+0

예, TDI를 간략하게 살펴보면 엄청난 복잡성이 드러났기 때문에 이것을 받아 들일 것입니다. 나는 드라이버로부터의 통보를 위해 계류중인 IRP를 가진 사용자 모드 서비스를 구현하고, 드라이버로부터 소켓까지, 그리고 소켓으로부터 드라이버까지 데이터를 전달했다. 필요한 컨텍스트 스위치 수를 줄이기 위해 데이터를 청크 했으므로 예를 들어 드라이버에 보내기 전에 소켓에서 사용 가능한 모든 데이터를 가져옵니다. 마지막으로, 네트워크 I/O를 수행 할 드라이버가 필요한 이유는 가상 직렬 포트 였기 때문입니다. – Kazar

1

TDI 인터페이스를 사용하면 XP 및 Vista에서 사용할 수 있습니다.

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

+1

아마도이 기능은 더 이상 사용되지 않으며 제거 될 수 있습니다. 그것은 Windows 7에서 사용할 수 남아있는 것 같습니다. – Jan

+0

이 문제를 자세히 설명하는 'Rootkits'http://www.amazon.com/Rootkits-Subverting-Windows-Greg-Hoglund/dp/0321294319 책을 살펴볼 수 있습니다. – Justin

관련 문제