Сложно ли открыть сокет из драйвера (tcp или udp)? Есть ли более менее готовые библиотеки? Как понимаю, нужно подключится к драйверу сети.
Windows < Vista Для Windows до Vista задача сводиться к написанию TDI-клиента. Порядок действий примерно такой: 1. ZwOpenFile ( \Device\Tcp или \Device\Udp ) - локальный адрес 2. ZwOpenFile ( \Device\Tcp или \Device\Udp ) - удалённый узел 3. ObReferenceObjectByHandle - на удалённый узел 4. TdiBuildAssociateAddress, IoCallDriver 5. TdiBuildSetEventHandler ( TDI_EVENT_RECEIVE ), IoCallDriver 6. TdiBuildConnect, IoCallDriver 7. TdiBuildSend, IoCallDriver 8. Ждём данные. Будет вызвана наша функция, зарегистрированная на шаге 5. 9. TdiBuildDisconnect, IoCallDriver 10. TdiBuildDisassociateAddress, IoCallDriver 11. TdiBuildSetEventHandler ( TDI_EVENT_RECEIVE == NULL ), IoCallDriver 12. ObDereferenceObject - на удалённый узел 13. ZwClose - удалённый узел 14. ZwClose - локальный адрес Что касается готовых реализаций, да хотя бы вот сюда посмотри: Kernel mode sockets library for the masses Kernel Mode Sockets Library Среди платных разработок есть вот такая, например: Kernel Mode Sockets (KSOCKS) Ну и в поиск, конечно же, например, так. Windows >= Vista В Windows Vista появился компонент под названием Winsock Kernel (в MSDN есть описание), внешне похож на сокеты, но только внешне. В любом случае, стоит подумать о его использовании, вместо TDI-клиента, даже несмотря на то, что TDI-клиенты по-прежнему поддерживаются в Windows Vista и Windows 7, при чём код, написанный для Windows XP, будет работать почти без изменений.