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.
En drivrutin kan skapa ett återuppringningsobjekt, genom vilket andra drivrutiner kan begära notifiering om villkor som definierats av den skapande drivrutinen. Följande figur visar stegen som ingår i att definiera ett callback-objekt.
Innan du skapar objektet anropar drivrutinen InitializeObjectAttributes för att ange dess attribut. Ett återanropsobjekt måste ha ett namn som inte kan matcha namnet på ett systemdefinierat återanrop. Den får ha vilka andra attribut som helst som skaparen anser lämpliga, vanligtvis OBJ_CASE_INSENSITIVE. Därefter anropar drivrutinen ExCreateCallback och skickar en pekare till de initierade attributen och en plats för att ta emot en referens till återkopplingsobjektet. Det skickar också två booleska värden som anger om systemet ska skapa motringningsobjektet om ett sådant namngivet objekt inte redan finns och om objektet ska tillåta mer än en registrerad återanropsrutin.
Drivrutinen definierar de villkor under vilka den ska anropa de registrerade återanropsrutinerna. Villkoren har formen av två argument som var och en pekar på en parameter som definierats av drivrutinen som skapar återanropet. Du bör dokumentera dessa villkor, tillsammans med namnet på motringningsobjektet och den IRQL-nivå vid vilken det begär notifiering, för drivrutinsklienterna.
När återanropsvillkoret inträffar anropar drivrutinen ExNotifyCallback och förmedlar sitt handtag till återanropsobjektet och de två argumenten. Systemet anropar sedan alla återanropsrutiner som registrerats för motringningsobjektet, i den ordning de registrerades, och skickar de två argumenten och en pekare till den kontext som angavs när rutinen registrerades. Drivrutinen måste anropa ExNotifyCallback på IRQL <= DISPATCH_LEVEL. Systemet anropar återanropsrutinerna på samma IRQL där drivrutinen gjorde det här anropet.
När alla operationer har slutförts med callback-objektet bör drivrutinen som skapade callbacken anropa ObDereferenceObject för att minska referensantalet och se till att objektet tas bort.