P>Предупреждая твой следующих ход: обработка NDIS_STATUS_PENDING в результате NdisSend
>тоже легко решается.
P>И здесь, и в ProtocolSendComplete.
Да это как раз тривиально в любом языке:
NdisSend(&Status, Binding->LowerAdapter, Packet);
if( Status != NDIS_STATUS_PENDING )
ProtocolSendComplete(Binding, Packet, Status);
Флаг вот только в руки реализовывать __CxxFrameHandler в ядре. На DISPATCH_LEVEL же это вообще невозможно, потому как exceptions основаны на thread local storage (сегмент FS), а на DISPATCH_LEVEL это понятие размыто. Запачкаешь FS:[0] какой-то нити, спасибо за это никто не скажет
Еще нюанс. После NdisSend пакет нам не принадлежит. Надо не забыть занулить поле в классе, чтобы деструктор по выходу из блока не решил уничтожить не-принадлежащий нам пакет. В итоге сложности вырастают, они всего лишь заталкиваются внутрь враппера.
Еще нюанс. Написание враппера вокруг обоих структур, а потом еще и "кода по делу" — дольше будет.
Еще нюанс. В отладчике страшно будет