Каков наилучший способ отправки и получения одновременно (не асинхронно) с помощью драйвера NDIS?

Я пытаюсь найти лучший способ одновременной отправки и получения через Ethernet-уровень 2, в данном случае с драйвером NDIS в Windows. Способы, которые я оцениваю, следующие:

  1. С двумя независимыми потоками и синхронными функциями драйвера NDIS (fileapi.h Win32). Таким образом мне удается открыть два дескриптора для драйвера, но мне не удается дважды связать сетевую карту независимо друг от друга. С двумя независимыми картами, одной для чтения и одной для записи, все работает без проблем. Информация: Разместите там, где указано (в последних комментариях @falstaff), где этот метод возможен.

Первая функция корректно работает в обоих потоках, а вторая (DeviceIoControl) дает сбой при втором выполнении. Это указывает на то, что невозможно повторить вторую привязку, что, как я надеялся, будет возможно с отдельным потоком.

      Handle = CreateFileA(
            pDeviceName,
            DesiredAccess,
            ShareMode,
            lpSecurityAttributes,
            CreationDistribution,
            FlagsAndAttributes,
            NULL
            );
DeviceIoControl(
            Handle,
            IOCTL_NDISPROT_BIND_WAIT,
            NULL,
            0,
            NULL,
            0,
            &BytesReturned,
            NULL)
  1. Использование Miniport MuxNDIS . Я думаю, что это будет работать для отправки и получения одновременно с одной сетевой картой, но я не уверен.

Вопросы:

  • Каков наилучший способ одновременной связи через один сетевой интерфейс?

  • Почему не работает функция DeviceIoControl в пункте 1, можно ли связать с периферией только один драйвер или один его экземпляр?

Большое спасибо. С наилучшими пожеланиями.

0 ответов

Другие вопросы по тегам