Empfangen von Daten in Protokolltreibern
Die folgende Abbildung veranschaulicht einen einfachen Empfangsvorgang, der einen Protokolltreiber, eine NDIS und zugrunde liegende Treiber in einem Treiberstapel umfasst.
NDIS ruft die ProtocolReceiveNetBufferLists-Funktion eines Protokolltreibers auf, um Empfangsanzeigen zu verarbeiten, die von zugrunde liegenden Treibern stammen. NDIS ruft ProtocolReceiveNetBufferLists auf, nachdem ein zugrunde liegender Treiber eine Empfangsanzeigefunktion (z. B. NdisMIndicateReceiveNetBufferLists) aufgerufen hat, um empfangene Netzwerkdaten oder Loopbackdaten anzugeben.
Wenn das NDIS_RECEIVE_FLAGS_RESOURCES-Flag im ReceiveFlags-Parameter von ProtocolReceiveNetBufferLists nicht festgelegt ist, behält der Protokolltreiber den Besitz der NET_BUFFER_LIST-Strukturen , bis er die NdisReturnNetBufferLists-Funktion aufruft . Wenn NDIS das NDIS_RECEIVE_FLAGS_RESOURCES-Flag festlegt, kann der Protokolltreiber die NET_BUFFER_LIST-Struktur und die zugeordneten Ressourcen nicht beibehalten. Das festgelegte NDIS_RECEIVE_FLAGS_RESOURCES-Flag gibt an, dass ein zugrunde liegender Treiber nicht genügend Empfangsressourcen enthält. In diesem Fall sollte die ProtocolReceiveNetBufferLists-Funktion die empfangenen Daten in den protokollseitig zugewiesenen Speicher kopieren und so schnell wie möglich zurückgeben.
Hinweis NDIS kann die Flags ändern, die ein zugrunde liegender Treiber angibt. Wenn beispielsweise ein Miniporttreiber das NDIS_RECEIVE_FLAGS_RESOURCES-Flag im ReceiveFlags-Parameter der NdisMIndicateReceiveNetBufferLists-Funktion festlegt, kann NDIS die angegebenen Daten kopieren und die Kopie an ProtocolReceiveNetBufferLists übergeben, wobei das flag NDIS_RECEIVE_FLAGS_RESOURCES deaktiviert ist.
Hinweis Wenn das flag NDIS_RECEIVE_FLAGS_RESOURCES festgelegt ist, muss der Protokolltreiber den ursprünglichen Satz von NET_BUFFER_LIST Strukturen in der verknüpften Liste beibehalten. Wenn dieses Flag beispielsweise festgelegt ist, kann der Treiber die Strukturen verarbeiten und sie einzeln im Stapel angeben, aber bevor die Funktion zurückgibt, muss sie die ursprüngliche verknüpfte Liste wiederherstellen.
Protokolltreiber rufen die NdisReturnNetBufferLists-Funktion auf, um den Besitz einer Liste von NET_BUFFER_LIST-Strukturen zusammen mit den zugeordneten NET_BUFFER-Strukturen und Netzwerkdaten freizugeben.