Freigeben über


ClfsCreateLogFile-Funktion (wdm.h)

Die ClfsCreateLogFile-Routine erstellt oder öffnet einen CLFS-Stream. Bei Bedarf erstellt ClfsCreateLogFile auch das zugrunde liegende physische Protokoll, das die Datensätze des Datenstroms enthält.

Syntax

CLFSUSER_API NTSTATUS ClfsCreateLogFile(
  [out]          PPLOG_FILE_OBJECT    pplfoLog,
  [in]           PUNICODE_STRING      puszLogFileName,
  [in]           ACCESS_MASK          fDesiredAccess,
  [in]           ULONG                dwShareMode,
  [in, optional] PSECURITY_DESCRIPTOR psdLogFile,
  [in]           ULONG                fCreateDisposition,
  [in]           ULONG                fCreateOptions,
  [in]           ULONG                fFlagsAndAttributes,
  [in]           ULONG                fLogOptionFlag,
  [in, optional] PVOID                pvContext,
  [in]           ULONG                cbContext
);

Parameter

[out] pplfoLog

Ein Zeiger auf eine Variable, die einen Zeiger auf eine LOG_FILE_OBJECT Struktur empfängt, die eine offene instance des Datenstroms darstellt.

[in] puszLogFileName

Ein Zeiger auf eine UNICODE_STRING-Struktur , die den Namen des Datenstroms oder des zugrunde liegenden physischen Protokolls angibt.

Wenn der Stream bereits vorhanden ist und der einzige Stream eines dedizierten Protokolls ist, hat der Name das Format log:physical log name. Dabei ist der Name des physischen Protokolls der Pfadname des vorhandenen physischen Protokolls, das die Datensätze des Datenstroms enthält, im zugrunde liegenden Dateisystem.

Wenn der Stream noch nicht vorhanden ist und der einzige Stream eines dedizierten Protokolls werden soll (das noch nicht vorhanden ist), hat der Name das Format log:Physischer Protokollname, wobei der Name des physischen Protokolls im zugrunde liegenden Dateisystem der Pfadname des physischen Protokolls ist, das für die Datensätze des Datenstroms erstellt wird.

Wenn der Stream einer der Datenströme eines Multiplexprotokolls ist (oder werden soll), hat der Name das Format log:physical log name::stream name, wobei der name des physischen Protokolls im zugrunde liegenden Dateisystem der Pfadname des physischen Protokolls ist, das die Datensätze des Datenstroms enthält, und der Streamname ist der Name eines Datenstroms, der dieses physische Protokoll teilt (oder freigeben wird).

Wenn Sie ein Multiplexprotokoll erstellen möchten, das derzeit keine Streams enthält, verwenden Sie einen Namen des Formulars log:physical log name::, wobei der Name des physischen Protokolls der Pfadname des zu erstellenden physischen Protokolls im zugrunde liegenden Dateisystem ist.

Die folgende Liste enthält einige Beispiele für gültige Namen.

  • "Log:c:\myLog" erstellt oder öffnet ein dediziertes Protokoll und seinen einen Stream.
  • "Log:c:\myCommonLog::" erstellt ein Multiplexprotokoll, das noch keine Streams enthält.
  • "Log:c:\myCommonLog::Stream1" erstellt oder öffnet einen der Streams (Stream1) eines Multiplexprotokolls.

[in] fDesiredAccess

Eine ACCESS_MASK , die den Typ des Zugriffs angibt, den der Client (mithilfe des in pplfoLog zurückgegebenen Zeigers) auf den Stream hat. Wenn dieser Parameter 0 ist, können Clients den Stream nach seinen Attributen abfragen, aber nicht aus dem Stream lesen oder in diesen schreiben. Dieser Parameter kann null oder eine beliebige Kombination der folgenden Flags sein:

Flag Bedeutung
GENERIC_READ Der Client hat Lesezugriff auf den Stream.
GENERIC_WRITE Der Client hat Schreibzugriff auf den Stream.
Delete Der Client kann den Stream zum Löschen markieren.

[in] dwShareMode

Der Freigabemodus des Streams, der null (nicht freigegeben) oder eine beliebige Kombination der folgenden Flags sein kann:

Flag Bedeutung
FILE_SHARE_DELETE Nachfolgende Anforderungen zum Öffnen des Datenstroms mit Löschzugriff sind erfolgreich.
FILE_SHARE_READ Nachfolgende Anforderungen zum Öffnen des Datenstroms mit Lesezugriff sind erfolgreich.
FILE_SHARE_WRITE Nachfolgende Anforderungen zum Öffnen des Datenstroms mit Schreibzugriff sind erfolgreich.

[in, optional] psdLogFile

Ein Zeiger auf eine SECURITY_DESCRIPTOR-Struktur , die Sicherheitsattribute für den Stream bereitstellt. Dieser Parameter kann NULL sein.

[in] fCreateDisposition

Die auszuführende Aktion hängt davon ab, ob der Stream bereits vorhanden ist. Dieser Parameter muss auf einen der folgenden Werte festgelegt werden:

Wert Bedeutung
CREATE_NEW Erstellen Sie einen neuen Stream, wenn der Stream nicht bereits beendet wird. Schlägt fehl, wenn der Stream bereits vorhanden ist.
OPEN_EXISTING Öffnen Sie einen vorhandenen Stream. Schlägt fehl, wenn der Stream noch nicht vorhanden ist.
OPEN_ALWAYS Öffnen Sie einen vorhandenen Stream. Erstellen Sie den Stream, falls er noch nicht vorhanden ist.

[in] fCreateOptions

Eine Reihe von Flags, die Optionen angeben, die beim Erstellen oder Öffnen des Datenstroms angewendet werden sollen. Dieser Parameter kann null oder eine kompatible Kombination der folgenden Flags sein:

Flag Bedeutung
FILE_NO_INTERMEDIATE_BUFFERING Die Datensätze des Streams können nicht in den internen Puffern eines Treibers zwischengespeichert werden.
FILE_SYNCHRONOUS_IO_ALERT Alle Vorgänge für den Stream werden synchron ausgeführt. Jede Wartezeit im Namen des Anrufers unterliegt der vorzeitigen Beendigung von Warnungen. Wenn dieses Flag festgelegt ist, muss das FILE_SYNCHRONOUS_IO_NONALERT Flag gelöscht werden.
FILE_SYNCHRONOUS_IO_NONALERT Alle Vorgänge für den Stream werden synchron ausgeführt. Wartezeiten im System, die E/A-Warteschlangen und Vervollständigung synchronisieren, unterliegen keinen Warnungen. Wenn dieses Flag festgelegt ist, muss das FILE_SYNCHRONOUS_IO_ALERT-Flag gelöscht werden.

[in] fFlagsAndAttributes

Ein Wert, der angibt, ob der Stream für normalen oder schreibgeschützten Zugriff geöffnet wird. Dieser Parameter muss auf einen der beiden Parameter festgelegt werden.

FILE_ATTRIBUTE_NORMAL oder FILE_ATTRIBUTE_READONLY.

[in] fLogOptionFlag

Ein Hinweis auf die Beziehung zwischen CLFS und der Komponente, die den Stream erstellt oder öffnet. Dieser Parameter muss auf einen der folgenden Werte festgelegt werden:

Wert Bedeutung
CLFS_FLAG_NO_FLAGS CLFS und die erstellender Komponente verfügen über die Standard-Normalbeziehung. Kernelmoduskomponenten verwenden diesen Wert, es sei denn, sie fallen in eine der drei anderen Kategorien, die in dieser Tabelle aufgeführt sind. Wenn pvContext nicht NULL ist, überprüft CLFS, ob cbContext größer als 0 ist. Andernfalls werden pvContext und cbContext ignoriert.
CLFS_FLAG_REENTRANT_FILE_SYSTEM Die erstellungskomponente ist das Dateisystem, das den zugrunde liegenden Speicher für CLFS bereitstellt. CLFS verwendet das Dateisystem für die Zuweisung von Containern, und das Dateisystem verwendet CLFS-Streams. In diesem Fall ist es möglich, dass das Dateisystem CLFS aufruft, und CLFS kann für denselben Thread oder andere Threads Wiederaufrufe an das Dateisystem vornehmen. Wenn pvContext nicht NULL ist, überprüft CLFS, ob cbContext größer als 0 ist. Andernfalls werden pvContext und cbContext ignoriert.
CLFS_FLAG_NON_REENTRANT_FILTER Die erstellende Komponente ist ein Dateisystemfiltertreiber, der alle CLFS-E/A-Vorgänge an eine angegebene Ebene unterhalb des Filterstapels sendet. Mit dieser Option kann ein Filtertreiber ein CLFS-Protokoll erstellen, ohne eigene Protokollierungs-E/A zu sehen. Der Aufrufer übergibt das Nicht-NULL-Zielgerätobjekt im pvContext-Parameter, wobei cbContext auf die entsprechende Größe festgelegt ist. CLFS verwendet die IoCreateFileSpecifyDeviceObjectHint-Routine , um Container auf einer zielorientierten Ebene im vom Geräteobjekt angegebenen E/A-Filterstapel zu erstellen.
CLFS_FLAG_REENTRANT_FILTER Die erstellende Komponente ist ein Dateisystemfiltertreiber, der alle CLFS-E/A-Vorgänge an den Anfang des Filterstapels sendet. Der Filter verfügt über eine rekursive Beziehung mit CLFS, da er seine eigenen Protokollierungs-E/A filtert, wenn CLFS einen Dateisystemvorgang für seine Container ausführt. Der pvContext-Parameter bietet eine Möglichkeit für Filter, seinen CLFS-Containern einen erkennbaren Kontext zuzuordnen, da Protokoll-E/A den Filterstapel herunterkommt. Der cbContext-Parameter gibt die Größe des undurchsichtigen Kontexts in Bytes an.
CLFS_FLAG_MINIFILTER_LEVEL Die Erstellungskomponente ist ein Dateisystem-Minifiltertreiber, der alle CLFS-E/A-Vorgänge an eine angegebene Ebene unterhalb des Filterstapels sendet. Mit dieser Option kann ein Minifilter ein CLFS-Protokoll erstellen, ohne eigene Protokollierungs-E/A-Vorgänge anzuzeigen. Der Aufrufer übergibt das Nicht-NULL-Minifilterkontextobjekt im pvContext-Parameter, wobei cbContext auf die entsprechende Größe festgelegt ist. CLFS verwendet die IoCreateFileSpecifyDeviceObjectHint-Routine , um Container in einer Höhe (angegeben im Minifilterkontext) im Minifilterstapel des Filter-Managers zu erstellen.

[in, optional] pvContext

Ein Zeiger auf einen Kontext. Die Art und Weise, wie der Kontext interpretiert wird, hängt vom Wert ab, der an fLogOptionsFlag übergeben wird.

[in] cbContext

Die Größe des Kontexts in Bytes, auf den pvContext verweist. Wenn pvContext nicht NULL ist, muss dieser Parameter größer als 0 sein.

Rückgabewert

ClfsCreateLogFile gibt bei Erfolg STATUS_SUCCESS zurück. Andernfalls wird einer der in "Ntstatus.h" definierten Fehlercodes zurückgegeben.

Hinweise

Wenn Sie einen CLFS-Stream erstellen, wird er von einem zugrunde liegenden physischen CLFS-Protokoll unterstützt. Das zugrunde liegende Protokoll kann entweder dediziert (nur einen Stream) oder multiplexed (mehrere Streams) sein. Ein dediziertes Protokoll kann nicht in ein Multiplexprotokoll konvertiert werden, und ein multiplexiertes Protokoll kann nicht in ein dediziertes Protokoll konvertiert werden.

Ein physischer CLFS-Protokollname enthält nicht die BLF-Erweiterung.

Eine Erläuterung der CLFS-Konzepte und -Terminologie finden Sie unter Common Log File System( Common Log File System).

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows Server 2003 R2, Windows Vista und höheren Versionen von Windows.
Zielplattform Desktop
Kopfzeile wdm.h (wdm.h einschließen)
Bibliothek Clfs.lib
DLL Clfs.sys
IRQL <= APC_LEVEL

Weitere Informationen

ClfsCloseAndResetLogFile

ClfsCloseLogFileObject

ClfsDeleteLogByPointer

ClfsDeleteLogFile