Dela via


Metoder för att komma åt databuffertar

Ett av de primära ansvarsområdena för drivrutinsstackar är att överföra data mellan program i användarläge och ett systems enheter. Operativsystemet tillhandahåller följande tre metoder för att komma åt databuffertar:

Buffrad I/O
Operativsystemet skapar en icke-sidsidig systembuffert som är lika stor som programmets buffert. För skrivåtgärder kopierar I/O-chefen användardata till systembufferten innan drivrutinsstacken anropas. För läsåtgärder kopierar I/O-chefen data från systembufferten till programmets buffert när drivrutinsstacken har slutfört den begärda åtgärden.

Mer information finns i Använda buffrad I/O.

Direkt I/O
Operativsystemet låser programmets buffert i minnet. Den skapar sedan en lista över minnesbeskrivningar (MDL) som identifierar de låsta minnessidorna och skickar MDL till drivrutinsstacken. Drivrutiner kommer åt de låsta sidorna via MDL.

Mer information finns i Använda direkt I/O.

Varken buffrad eller direkt I/O
Operativsystemet skickar programbuffertens virtuella startadress och storlek till drivrutinsstacken. Bufferten är endast tillgänglig från drivrutiner som körs i programmets trådkontext.

För mer information, se Varken buffrad eller direkt I/O används.

För IRP_MJ_READ - och IRP_MJ_WRITE-begäranden anger drivrutinerna I/O-metoden med hjälp av flaggor i varje DEVICE_OBJECT struktur. Mer information finns i Initiera ett enhetsobjekt.

För IRP_MJ_DEVICE_CONTROL och IRP_MJ_INTERNAL_DEVICE_CONTROL begäranden bestäms I/O-metoden av värdet TransferType som finns i varje IOCTL-värde. Mer information finns i Definiera I/O-kontrollkoder.

Alla drivrutiner i en drivrutinsstack måste använda samma buffertåtkomstmetod för varje begäran, med undantag för den högsta drivrutinen (som kan använda metoden "ingen av dem", oavsett vilken metod som används av lägre drivrutiner).