TDI не простой интерфейс для использования. Он предназначен для абстрагирования драйверов сетевого транспорта (TCP, NetBEUI, AppleTalk и т. Д.) От приложений. Вам нужно будет полностью понять API, чтобы иметь возможность использовать его для работы с сокетами - это, безусловно, гораздо больше, чем написание службы в пользовательском режиме и взаимодействие с ней. Вы можете выдать обратный IRP от службы к драйверу, чтобы драйвер мог запускать связь, когда это необходимо.
Кроме того, чем больше сложностей вы убираете из своего драйвера (здесь, в пользовательском режиме), тем лучше.
Однако для использования службы в режиме пользователя потребуется переключение контекста для каждой передачи данных в драйвер , что для вас может быть для каждого пакета. Это накладные расходы, которых лучше избегать.
Мне интересно, почему драйвер должен выполнять сетевой ввод-вывод. По крайней мере, это поверхностно, по-видимому, указывает на проблему дизайна.