WdfTimerCreate-Funktion (wdftimer.h)
[Gilt für KMDF und UMDF]
Die WdfTimerCreate-Methode erstellt ein Framework-Timerobjekt.
Syntax
NTSTATUS WdfTimerCreate(
[in] PWDF_TIMER_CONFIG Config,
[in] PWDF_OBJECT_ATTRIBUTES Attributes,
[out] WDFTIMER *Timer
);
Parameter
[in] Config
Ein Zeiger auf eine WDF_TIMER_CONFIG-Struktur .
[in] Attributes
Ein Zeiger auf eine WDF_OBJECT_ATTRIBUTES-Struktur , die Objektattribute für das neue Timerobjekt enthält.
[out] Timer
Ein Zeiger auf einen Speicherort, der ein Handle für das neue Framework-Timerobjekt empfängt.
Rückgabewert
WdfTimerCreate gibt STATUS_SUCCESS zurück, wenn der Vorgang erfolgreich ist. Andernfalls gibt diese Methode möglicherweise einen der folgenden Werte zurück:
Rückgabecode | Beschreibung |
---|---|
|
Der Attributes-Parameter war NULL, oder das ParentObject-Element der WDF_OBJECT_ATTRIBUTES-Struktur , die Attributes angibt, war NULL. |
|
Ein ungültiger Parameter wurde angegeben. |
|
Das ParentObject-Element der WDF_OBJECT_ATTRIBUTES-Struktur hat nicht auf ein Framework-Geräteobjekt oder ein Objekt verwiesen, dessen Kette von übergeordneten Elementen zu einem Framework-Geräteobjekt führt. |
|
Es war nicht genügend Arbeitsspeicher vorhanden. |
|
Der AutomaticSerialization-Member der WDF_TIMER_CONFIG-Struktur wurde auf TRUE festgelegt, die Ausführungsebene des übergeordneten Geräteobjekts wurde jedoch auf WdfExecutionLevelPassive festgelegt. |
Eine Liste mit anderen Rückgabewerten, die von der WdfTimerCreate-Methode möglicherweise zurückgegeben werden, finden Sie unter Fehler bei der Erstellung von Frameworkobjekten.
Diese Methode gibt möglicherweise auch andere NTSTATUS-Werte zurück.
Hinweise
Wenn Der Treiber WdfTimerCreate aufruft, muss er eine WDF_OBJECT_ATTRIBUTES Struktur bereitstellen und ein übergeordnetes Objekt im ParentObject-Element der Struktur angeben. Das übergeordnete Objekt kann ein Framework-Geräteobjekt oder ein beliebiges Objekt sein, dessen Kette von übergeordneten Elementen zu einem Framework-Geräteobjekt führt. Das Framework löscht das Timerobjekt, wenn es das Geräteobjekt löscht.
Nach dem Erstellen eines Zeitgeberobjekts muss der Treiber WdfTimerStart aufrufen, um die Uhr des Zeitgebers zu starten, unabhängig davon, ob der Timer periodisch ist oder nicht.
Wenn Ihr Treiber EvtCleanupCallback - oder EvtDestroyCallback-Rückruffunktionen für das Framework-Timerobjekt bereitstellt, beachten Sie, dass das Framework diese Rückruffunktionen unter IRQL = PASSIVE_LEVEL aufruft.
Weitere Informationen zu Framework-Timerobjekten finden Sie unter Verwenden von Timern.
Beispiele
Im folgenden Codebeispiel werden eine WDF_TIMER_CONFIG-Struktur und eine WDF_OBJECT_ATTRIBUTES-Struktur initialisiert und anschließend WdfTimerCreate aufgerufen.
WDF_TIMER_CONFIG timerConfig;
WDF_OBJECT_ATTRIBUTES timerAttributes;
WDFTIMER timerHandle;
NTSTATUS status;
WDF_TIMER_CONFIG_INIT(
&timerConfig,
MyEvtTimerFunc
);
timerConfig.AutomaticSerialization = TRUE;
WDF_OBJECT_ATTRIBUTES_INIT(&timerAttributes);
timerAttributes.ParentObject = DeviceHandle;
status = WdfTimerCreate(
&timerConfig,
&timerAttributes,
&timerHandle
);
if (!NT_SUCCESS(status)) {
return status;
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
KMDF-Mindestversion | 1.0 |
UMDF-Mindestversion | 2.0 |
Kopfzeile | wdftimer.h (include Wdf.h) |
Bibliothek | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <=DISPATCH_LEVEL |
DDI-Complianceregeln | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |