Deserializowane sterowniki miniportu NDIS
Wszystkie sterowniki NDIS 6.0 lub nowsze są deserializowane.
deserializowany sterownik miniportu NDIS serializuje działanie własnych funkcji MiniportXxx i wewnętrznie kolekuje wszystkie żądania wysyłania, zamiast polegać na NDIS w wykonywaniu tych funkcji. W rezultacie zdeserializowany sterownik miniportu może osiągnąć znacznie lepszą wydajność pełnodupleksową niż serializowany sterownik miniportu.
Model sterownika deserializowanego jest domyślnym modelem sterownika miniportu NDIS. Sterowniki miniportów zorientowanych na połączenie, a także sterowniki miniportu z dolną krawędzią WDM, muszą być deserializowanymi sterownikami. Podczas pisania nowego sterownika miniportu NDIS należy napisać sterownik deserializowany. Jeśli to możliwe, należy również przenieść starsze sterowniki do sieci NDIS 6.0 lub nowszej. Aby uzyskać więcej informacji na temat przenoszenia sterowników, zapoznaj się z:
- Przenoszenie sterowników NDIS 5.x do NDIS 6.0
- Przenoszenie sterowników NDIS 6.x na NDIS 6.20
- Przenoszenie sterowników NDIS 6.x do NDIS 6.30
Sterownik deserializowanego miniportu musi spełniać następujące wymagania, gdy interfejsuje się z NDIS:
Deserializowany sterownik miniportu musi identyfikować się jako taki do NDIS podczas inicjowania.
Zdeserializowany sterownik mini-portu musi asynchronicznie ukończyć wszystkie żądania wysyłania. Aby ukończyć żądanie przesyłania, sterowniki miniportów NDIS 6.0 i nowszych w trybie bezpołączeniowym wywołują funkcję NdisMSendNetBufferListsComplete. Sterowniki NDIS 6.0 lub nowszych miniportów zorientowane na połączenie wywołają funkcję NdisMCoSendNetBufferListsComplete.
Zdeserializowany sterownik miniportu, który obsługuje NDIS 6.0 lub nowszy, ustawia składową Status struktury NET_BUFFER_LIST, która zostanie przekazana do NdisMSendNetBufferListsComplete.
Jeśli zdeserializowany sterownik miniportu nie może natychmiast ukończyć żądań wysyłania, nie może zwrócić żądań do sieci NDIS w celu ponownego kolejkowania. Zamiast tego sterownik miniportu musi wewnętrznie kolejkować żądania wysyłania, dopóki wystarczające zasoby nie będą dostępne do przesyłania danych.
Zdeserializowany sterownik miniportu nie może zbadać struktur, które przekazuje do NDIS w sygnałach odbierających, dopóki nie zwróci ich NDIS. NDIS zwraca struktury NET_BUFFER_LIST do funkcji MiniportReturnNetBufferLists sterownika miniportu.
Zdeserializowany sterownik miniportu musi spełniać następujące wymagania wewnętrzne sterownika:
Zdeserializowany sterownik miniportu musi chronić kolejki buforów sieciowych za pomocą blokad spinowych . Zdserializowany sterownik typu miniport musi również chronić swój współdzielony stan przed jednoczesnym dostępem przez własne funkcje MiniportXxx.
Funkcje zdeserializowanego sterownika miniportu mogą działać na poziomie IRQL <= DISPATCH_LEVEL. W związku z tym twórca sterownika nie może założyć, że funkcje MiniportXxx będą wywoływane w sekwencji, w jakiej przetwarzają żądania. Jedna funkcja MiniportXxx może wyprzedać inną funkcję MiniportXxx działającą w niższym środowisku IRQL.
Sterownik miniportu po deserializacji jest odpowiedzialny za zarządzanie buforami i kolejkami sieciowymi. Gdy sterownik miniportu napotyka problem z zasobem, nie może zwracać żądań wysyłania do usługi NDIS do ponownego ustawiania w kolejce. Zamiast tego sterownik miniportu musi kolejkować wewnętrznie wszystkie żądania wysyłania, dopóki nie będą dostępne wystarczające zasoby do wysłania danych.
Deserializowany sterownik miniportu powinien ukończyć wysyłanie żądań w określonej przez protokół kolejności.
Aby uzyskać więcej informacji o wymaganiach dotyczących operacji wysyłania i odbierania w przypadku sterowników NDIS, zobacz Operacje wysyłania i odbierania.
Należy pamiętać, że zdeserializowany sterownik miniportu zwykle kończy wysyłanie żądań w określonej przez protokół kolejności. Jednak sterownik miniportu obsługujący priorytet pakietu (na przykład IEEE 802.1p) może zmienić kolejność żądań wysyłania na podstawie informacji o priorytcie.