Каков наилучший способ отправки и получения одновременно (не асинхронно) с помощью драйвера NDIS?
Я пытаюсь найти лучший способ одновременной отправки и получения через Ethernet-уровень 2, в данном случае с драйвером NDIS в Windows. Способы, которые я оцениваю, следующие:
- С двумя независимыми потоками и синхронными функциями драйвера 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)
- Использование Miniport MuxNDIS . Я думаю, что это будет работать для отправки и получения одновременно с одной сетевой картой, но я не уверен.
Вопросы:
Каков наилучший способ одновременной связи через один сетевой интерфейс?
Почему не работает функция DeviceIoControl в пункте 1, можно ли связать с периферией только один драйвер или один его экземпляр?
Большое спасибо. С наилучшими пожеланиями.