Freigeben über


PoFxIdleComponent-Funktion (wdm.h)

Die PoFxIdleComponent-Routine verringert die Anzahl der Aktivierungsverweis für die angegebene Komponente.

Syntax

void PoFxIdleComponent(
  [in] POHANDLE Handle,
  [in] ULONG    Component,
  [in] ULONG    Flags
);

Parameter

[in] Handle

Ein Handle, das die Registrierung des Geräts mit dem Power Management Framework (PoFx) darstellt. Der Gerätetreiber hat dieses Handle zuvor von der PoFxRegisterDevice-Routine erhalten.

[in] Component

Der Index, der die Komponente identifiziert. Dieser Parameter ist ein Index im Komponentenarray in der PO_FX_DEVICE Struktur, die der Gerätetreiber zum Registrieren des Geräts bei PoFx verwendet hat. Wenn das Komponentenarray N-Elemente enthält, reichen die Komponentenindizes von 0 bis N–1.

[in] Flags

Die Flags für den Leerlaufvorgang. Legen Sie dieses Element auf null oder auf eines der folgenden Flags PO_FX_FLAG_XXX Bits fest:

  • PO_FX_FLAG_BLOCKING
  • PO_FX_FLAG_ASYNC_ONLY
Diese beiden Flagbits schließen sich gegenseitig aus. Weitere Informationen finden Sie in den Hinweisen.

Rückgabewert

Keine

Bemerkungen

Ein Gerätetreiber ruft PoFxIdleComponent auf, um einen Aktivierungsverweis für eine Komponente auf einem Gerät freizugeben. Der Treiber hat die Aktivierungsreferenz in einem vorherigen Aufruf der PoFxActivateComponent-Routine abgerufen. Der Treiber sollte nur einen Aktivierungsverweis für eine Komponente enthalten, während der Treiber auf die Komponente zugreifen muss. Wenn Sie einen Aktivierungsverweis für eine Komponente halten möchten, die nicht verwendet wird, wird verhindert, dass die Komponente in einen Low-Power Fx-Zustand wechselt.

Wenn der Treiber keine anderen Aktivierungsverweise auf die Komponente enthält, initiiert PoFxIdleComponent einen Übergang von der aktiven Bedingung zur Leerlaufbedingung. Wenn dieser Übergang abgeschlossen ist, ruft PoFx die ComponentIdleConditionCallback-Routine des Treibers auf, um den Treiber zu benachrichtigen. Wenn der Treiber mindestens einen zusätzlichen Aktivierungsverweis für die Komponente beibehält, verbleibt die Komponente in der aktiven Bedingung, und die ComponentIdleConditionCallback-Routine wird nicht aufgerufen.

PoFx verwaltet eine Aktivierungsverweisanzahl für jede Komponente im Gerät. Die PoFxActivateComponent-Routine erhöht diese Anzahl, und PoFxIdleComponent dekrementiert sie. Die Komponente verbleibt in der aktiven Bedingung, während diese Anzahl ungleich null ist. Wenn der Treiber seinen letzten Aktivierungsverweis auf eine Komponente freigibt, verringert sich die Anzahl auf Null, und die Komponente wechselt in die Leerlaufbedingung. Nachdem die Komponente in den Leerlaufzustand gewechselt ist, kann PoFx die Komponente möglicherweise in einen Low-Power-Fx-Zustand umschalten. Weitere Informationen finden Sie unter PoFxActivateComponent.

Wenn Flags = PO_FX_FLAG_BLOCKING, ist der PoFxIdleComponent-Aufruf synchron. In diesem Fall wartet PoFxIdleComponent auf die Rückgabe, bis die Komponente den Übergang zur Leerlaufbedingung abgeschlossen hat. PoFxIdleComponent ruft die ComponentIdleConditionCallback-Rückrufroutine des Treibers auf, um den Treiber darüber zu informieren, dass sich die Komponente im Leerlauf befindet. Dieser Rückruf erfolgt im selben Thread wie der Aufruf von PoFxIdleComponent, und PoFxIdleComponent wird erst zurückgegeben, nachdem der ComponentIdleConditionCallback-Rückruf zurückgegeben wurde.

Wenn Flags = PO_FX_FLAG_ASYNC_ONLY, ist der PoFxIdleComponent-Aufruf asynchron. In diesem Fall plant PoFxIdleComponent den ComponentIdleConditionCallback-Rückruf in einem anderen Thread und gibt dann zurück, ohne auf den Rückruf zu warten. Der Rückruf kann vor oder nach der Rückgabe von PoFxIdleComponent erfolgen. Der Treiber sollte sich auf den ComponentIdleConditionCallback-Rückruf verlassen, um zu bestimmen, wann die Komponente den Übergang zur Leerlaufbedingung abgeschlossen hat. Bis zu diesem Rückruf sollte der Treiber davon ausgehen, dass sich die Komponente möglicherweise noch im aktiven Zustand befindet.

Der Treiber kann Flags = 0 festlegen, um anzugeben, dass es nicht darum geht, ob der PoFxIdleComponent-Aufruf synchron oder asynchron ist. In diesem Fall entscheidet PoFx, ob der Aufruf synchron oder asynchron ausgeführt werden soll.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 8.
Zielplattform Universell
Header wdm.h
Bibliothek Ntoskrnl.lib
DLL Ntoskrnl.exe
IRQL <= DISPATCH_LEVEL

Weitere Informationen

ComponentIdleConditionCallback

PO_FX_DEVICE

PO_FX_FLAG_XXX

PoFxActivateComponent

PoFxRegisterDevice