Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
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).