Verwendung von Zuordnungspuffern im Storport-E/A-Modell
Im E/A-Modell des SCSI-Ports können Miniporttreiber den Porttreiber zum Zuordnen und Zuordnen des virtuellen Systemspeichers für SRB-E/A-Puffer erfordern. Miniporttreiber konfigurieren den Porttreiber zum Zuordnen von E/A-Puffern, indem sie den MapBuffers-Member der PORT_CONFIGURATION_INFORMATION-Struktur (SCSI) auf TRUE festlegen.
Wenn der Porttreiber mit MapBuffers auf TRUE konfiguriert ist, enthält das DataBuffer-Element jedes SRB, den der Miniporttreiber empfängt, eine virtuelle Systemadresse eines E/A-Puffers. Diese Adresse ist im Adressraum aller Prozesse im System gültig. Außerdem kann der Miniporttreiber direkt auf den E/A-Puffer zugreifen.
Wenn der Miniporttreiber MapBuffers hingegen auf FALSE festlegt, enthält DataBuffer eine virtuelle Adresse, die zu einem bestimmten Prozess gehört, die nicht unbedingt in dem Kontext gültig ist, in dem der Miniporttreiber ausgeführt wird. Daher kann der Miniporttreiber nicht auf den Speicherbereich zugreifen, auf den DataBuffer verweist.
Im Storport-E/A-Modell sind Miniporttreiber erforderlich, um DMA-basierte E/A zu unterstützen. Wenn DMA verwendet wird, sollten Miniporttreiber nicht erforderlich sein, um indirekt über eine systemweite virtuelle Adresse auf die E/A-Puffer eines SRB zuzugreifen. In diesem Fall definiert das Storport-E/A-Modell einen anderen Satz von Werten für das MapBuffers-Element von PORT_CONFIGURATION_INFORMATION (STORPORT).
Wert | Bedeutung |
---|---|
STOR_MAP_NO_BUFFERS |
Der Storport-Treiber zuordnen keine Datenpuffer für einen SRB-Typ. Daher dürfen die Miniporttreiber nicht direkt auf die Daten zugreifen, auf die vom DataBuffer-Member in einer der empfangenen SRBs verwiesen wird. |
STOR_MAP_ALL_BUFFERS |
Diese Funktion ist noch nicht implementiert. Wenn dem MapBuffers-Member dieser Wert zugewiesen wird, interpretiert er vom Storport-Treiber so, als wäre er STOR_MAP_NON_READ_WRITE_BUFFERS. |
STOR_MAP_NON_READ_WRITE_BUFFERS |
Der Storport-Treiber ordnet die Datenpuffer für die Anforderung zu, sofern es sich nicht um eine Datenübertragungsanforderung (Lese- und Schreibanforderung) handelt. Ebenso können Miniporttreiber auf Daten im SRB zugreifen, sofern der SRB nicht zu einer Lese- oder Schreibanforderung gehört. |