Freigeben über


ExCreateCallback-Funktion (wdm.h)

Die ExCreateCallback Routine erstellt entweder ein neues Rückrufobjekt oder öffnet ein vorhandenes Rückrufobjekt im Namen des Aufrufers.

Syntax

NTSTATUS ExCreateCallback(
  [out] PCALLBACK_OBJECT   *CallbackObject,
  [in]  POBJECT_ATTRIBUTES ObjectAttributes,
  [in]  BOOLEAN            Create,
  [in]  BOOLEAN            AllowMultipleCallbacks
);

Parameter

[out] CallbackObject

Ein Zeiger auf eine Position, die einen Zeiger auf ein Rückrufobjekt empfängt, bei dem es sich um eine undurchsichtige Systemstruktur handelt. Wenn der ExCreateCallback Aufruf erfolgreich ist, schreibt die Routine die Adresse des neu erstellten oder geöffneten Rückrufobjekts an diesen Speicherort. Der von dieser Routine abgerufene Rückrufobjektzeiger kann als Parameter für die ExRegisterCallback- oder ExNotifyCallback Routine bereitgestellt werden.

[in] ObjectAttributes

Ein Zeiger auf eine OBJECT_ATTRIBUTES Struktur, die die Attribute des Rückrufobjekts enthält. Diese Struktur wurde zuvor von der InitializeObjectAttributes Routine initialisiert.

[in] Create

Gibt an, ob ein Rückrufobjekt erstellt werden soll. Legen Sie auf TRUE- fest, um ein neues Rückrufobjekt zu erstellen, wenn das angeforderte Objekt nicht geöffnet werden kann. Andernfalls wird auf FALSE-festgelegt.

[in] AllowMultipleCallbacks

Gibt an, ob ein neu erstelltes Rückrufobjekt mehrere registrierte Rückrufroutinen zulassen soll. Legen Sie auf TRUE- fest, um mehrere registrierte Rückrufroutinen zuzulassen. Andernfalls wird auf FALSE-festgelegt. Dieser Parameter wird ignoriert, wenn CreateFALSE- oder beim Öffnen eines vorhandenen Objekts ist.

Rückgabewert

ExCreateCallback gibt STATUS_SUCCESS zurück, wenn ein Rückrufobjekt geöffnet oder erstellt wurde. Andernfalls wird ein NTSTATUS-Fehlercode zurückgegeben, der die Art des Fehlers angibt.

Bemerkungen

Ein Treiber ruft ExCreateCallback auf, um ein neues Rückrufobjekt zu erstellen oder ein vorhandenes Rückrufobjekt zu öffnen. Nachdem das Objekt erstellt oder geöffnet wurde, können andere Komponenten die ExRegisterCallback- Routine aufrufen, um Rückrufroutinen beim Rückrufobjekt zu registrieren.

Vor dem Aufrufen ExCreateCallback-muss der Treiber InitializeObjectAttributes aufrufen, um die OBJECT_ATTRIBUTES Struktur für das Rückrufobjekt zu initialisieren. Nicht benannte Rückrufobjekte sind nicht zulässig. Der Aufrufer muss einen Namen für das Objekt angeben; andernfalls schlägt der Anruf mit STATUS_UNSUCCESSFUL fehl. Der Aufrufer sollte das attribut OBJ_PERMANENT im Rückrufobjekt angeben, um zu verhindern, dass das Objekt gelöscht wird, bevor es beim Objekt-Manager registriert werden kann. Der Aufrufer sollte auch alle anderen Attribute angeben, z. B. OBJ_CASE_INSENSITIVE, die möglicherweise erforderlich sind.

Wenn alle Vorgänge mit dem Rückrufobjekt abgeschlossen wurden, muss der Treiber das Objekt löschen, um einen Speicherverlust zu verhindern. Informationen zum Löschen eines Objekts, das mit dem OBJ_PERMANENT-Objekt-Attribut erstellt wurde, finden Sie unter ObDereferenceObject.

In der folgenden Tabelle sind die Rückrufobjekte aufgeführt, die vom Betriebssystem für die Verwendung durch Treiber erstellt werden.

Name des Rückrufobjekts Verwendung
\Rückruf\SetSystemTime Das Betriebssystem ruft alle für dieses Objekt registrierten Rückrufroutinen auf, wenn sich die Systemzeit ändert.
\Rückruf\PowerState Das Betriebssystem ruft alle für dieses Objekt registrierten Rückrufroutinen auf, wenn bestimmte Systemleistungsmerkmale geändert werden. Wenn sich ein Treiber für die Rückrufbenachrichtigung registriert (durch Aufrufen ExRegisterCallback), kann er die Änderungen angeben, für die er benachrichtigt werden soll.
 

Weitere Informationen zu Rückrufobjekten finden Sie unter Callback Objects.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Ab Windows 2000 verfügbar.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= APC_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlExApcLte2(wdm), IrqlExPassive

Siehe auch

ExNotifyCallback-

ExRegisterCallback-

InitializeObjectAttributes-

ObDereferenceObject