Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En drivrutins dispatchrutiner (se DRIVER_DISPATCH) hanterar IRP:er med I/O-funktionskoder för IRP_MJ_DEVICE_CONTROL respektive IRP_MJ_INTERNAL_DEVICE_CONTROL.
För varje vanlig typ av kringutrustning definierar systemet en uppsättning I/O-kontrollkoder för IRP_MJ_DEVICE_CONTROL begäranden. Nya drivrutiner för varje typ av enhet måste ha stöd för dessa begäranden. I de flesta fall exporteras inte dessa offentliga I/O-kontrollkoder för varje typ av enhet till program i användarläge.
Vissa av dessa systemdefinierade I/O-kontrollkoder används av drivrutiner på högre nivå som skapar IP-adresser för den underliggande enhetsdrivrutinen genom att anropa IoBuildDeviceIoControlRequest. Andra används av Win32-komponenter för att kommunicera med en underliggande enhetsdrivrutin genom att anropa Win32-funktionen DeviceIoControl (beskrivs i Microsoft Windows SDK-dokumentationen) som i sin tur anropar en systemtjänst. I/O-chefen konfigurerar en IRP och lagrar den viktigaste funktionskoden IRP_MJ_DEVICE_CONTROL och den angivna I/O-kontrollkoden i IO_STACK_LOCATION-strukturen på Parameters.DeviceIoControl.IoControlCode. Sedan anropar I/O-chefen DispatchDeviceControl-rutinen för den högsta drivrutinen i kedjan.
För vissa drivrutiner som tillhandahålls av systemet och som är utformade för att samverka med och stödja nya drivrutiner definierar operativsystemet även en uppsättning I/O-kontrollkoder för IRP_MJ_INTERNAL_DEVICE_CONTROL begäranden. I de flesta fall tillåter dessa offentliga I/O-kontrollkoder att tilläggsdrivrutiner på högre nivå samverkar med en underliggande enhetsdrivrutin.
Som exempel stöder de systemlevererade parallella drivrutinerna en uppsättning interna I/O-kontrollkoder som skickas av leverantörsdrivrutiner i IRP_MJ_INTERNAL_DEVICE_CONTROL-begäranden. Mer information finns i designguiden för parallella enhetsdrivrutiner.
Nästan alla åtgärder som begärs via systemdefinierade I/O-kontrollkoder använder buffrad I/O, eftersom den här typen av begäran sällan kräver överföring av stora mängder data. Det vill säga, även drivrutiner som ställer in sina enhetsobjekt för direkt I/O skickas IRP:er för enhetskontrollbegäranden med data som ska överföras till eller från bufferten i Irp-AssociatedIrp.SystemBuffer> (med undantag för vissa typer av högsta nivå-drivrutiner som är nära kopplade till Win32-multimediadrivrutiner).
Dessutom kan en drivrutin definiera en uppsättning privata I/O-kontrollkoder som andra drivrutiner kan använda för att kommunicera med den. Nya offentliga I/O-kontrollkoder kan endast läggas till i systemet i samarbete med Microsoft Corporation, eftersom offentliga I/O-kontrollkoder är inbyggda i själva operativsystemet.
Specifik information om den uppsättning offentliga I/O-kontrollkoder som olika typer av drivrutiner måste ha stöd för och om hur du definierar privata I/O-kontrollkoder finns i de enhetsspecifika referensavsnitten i Windows Driver Kit (WDK).