Freigeben über


Bereitstellen von IoTimer-Kontextinformationen

Der an IoInitializeTimer übergebene Kontextzeiger identifiziert einen Kontextbereich, in dem andere Treiberroutinen und die IoTimer-Routine selbst zustandsbezogene Vorgänge verwalten können. Der E/A-Manager übergibt den Kontextzeiger , wenn er die IoTimer-Routine aufruft.

Da eine IoTimer-Routine bei IRQL = DISPATCH_LEVEL ausgeführt wird, muss sich der Kontextbereich in einem residenten Speicher im Systemspeicher befinden. Die meisten Treiber, die Über IoTimer-Routinen verfügen, verwenden die Geräteerweiterung des zugeordneten Geräteobjekts als Kontextzugriffsbereich, aber der Kontext kann sich stattdessen in einer Controllererweiterung befinden, wenn der Treiber ein Controllerobjekt oder in einem vom Treiber zugewiesenen Nichtpagepool verwendet.

Befolgen Sie die folgenden Richtlinien für den Kontextbereich einer IoTimer-Routine:

  • Wenn die IoTimer-Routine ihren Kontextbereich mit dem ISR des Treibers teilt, muss keSynchronizeExecution verwendet werden, um eine SynchCritSection-Routine aufzurufen, die auf den Kontextbereich auf eine multiprozessorsichere Weise zugreift. Weitere Informationen finden Sie unter Verwenden kritischer Abschnitte.

  • Wenn die IoTimer-Routine ihren Kontextbereich nicht mit einem ISR teilt, sie aber mit einer anderen Treiberroutine teilt, muss der Treiber den freigegebenen Kontextbereich mit einer initialisierten Spin-Sperre für Führungskräfte schützen, um auf die Kontextinformationen auf sichere Weise zuzugreifen. Weitere Informationen finden Sie unter Spin Locks.