IoCreateStreamFileObjectEx2-Funktion (ntifs.h)
Die IoCreateStreamFileObjectEx2 Routine erstellt ein neues Streamdateiobjekt mit Erstellungsoptionen für ein Zielgerätobjekt.
Syntax
NTSTATUS IoCreateStreamFileObjectEx2(
[in] PIO_CREATE_STREAM_FILE_OPTIONS CreateOptions,
[in, optional] PFILE_OBJECT FileObject,
[in, optional] PDEVICE_OBJECT DeviceObject,
[out] PFILE_OBJECT *StreamFileObject,
[out, optional] PHANDLE FileHandle
);
Parameter
[in] CreateOptions
Zeiger einer IO_CREATE_STREAM_FILE_OPTIONS Struktur, die die Erstellungsoptionen für das neue Streamdateiobjekt enthält.
[in, optional] FileObject
Zeigen Sie auf das Dateiobjekt, mit dem die neue Datenstromdatei verknüpft ist. Dieser Parameter ist optional und kann NULL sein.
[in, optional] DeviceObject
Zeigen Sie auf ein Geräteobjekt für das Gerät, auf dem die Streamdatei geöffnet werden soll. Wenn der Aufrufer einen Wert ungleich NULL für FileObject-angibt, wird der Wert DeviceObject- ignoriert. Andernfalls muss der Aufrufer einen Wert ungleich NULL für DeviceObject-angeben.
[out] StreamFileObject
Zeigen Sie auf einen Geräteobjektzeiger, um das Streamdateiobjekt zu empfangen.
[out, optional] FileHandle
Ein Zeiger auf ein Dateihandle für den Datenstrom bei der Ausgabe. Dieser Parameter ist optional und kann NULL sein.
Rückgabewert
IoCreateStreamFileObjectEx2- gibt einen Zeiger auf das neu erstellte Streamdateiobjekt zurück.
Bemerkungen
Dateisysteme rufen IoCreateStreamFileObjectEx2- auf, um ein neues Streamdateiobjekt zu erstellen. Ein Streamdateiobjekt ist mit einem normalen Dateiobjekt identisch, mit der Ausnahme, dass das FO_STREAM_FILE Dateiobjekt-Flag festgelegt ist.
Ein Streamdateiobjekt wird häufig verwendet, um einen internen Datenstrom für ein vom Dateisystem bereitgestelltes Volume darzustellen. Diese virtuelle Volumedatei ermöglicht es dem Dateisystem, die Struktur des Volumes auf dem Datenträger anzuzeigen, zu ändern und zwischenzuspeichern, als wäre es eine normale Datei. In diesem Fall gibt der DeviceObject Parameter im Aufruf von IoCreateStreamFileObjectEx2 das Volumegeräteobjekt (Volume Device Object, VDO) für das Volume an.
Ein Streamdateiobjekt kann auch verwendet werden, um einen alternativen Datenstrom für den Zugriff auf die Metadaten einer Datei darzustellen, z. B. erweiterte Attribute oder Sicherheitsdeskriptoren. In diesem Fall gibt der parameter FileObject im Aufruf von IoCreateStreamFileObjectEx2 ein vorhandenes Dateiobjekt für die Datei an. Das neu erstellte Streamdateiobjekt ermöglicht es dem Dateisystem, die Metadaten der Datei anzuzeigen, zu ändern und zwischenzuspeichern, als wäre es eine normale Datei.
Wenn das Streamdateiobjekt nicht mehr benötigt wird, muss der Aufrufer seine Verweisanzahl durch Aufrufen von ObDereferenceObjecterhöhen. Wenn die Referenzanzahl des Streamdateiobjekts null erreicht, wird eine IRP_MJ_CLOSE Anforderung an den Dateisystemtreiberstapel für das Volume gesendet.
Autoren des Dateisystemfiltertreibers sollten beachten, dass IoCreateStreamFileObjectEx2- bewirkt, dass eine IRP_MJ_CLEANUP Anforderung an den Dateisystemtreiberstapel für das Volume gesendet wird. Da Dateisysteme häufig Streamdateiobjekte als Nebenwirkung anderer Vorgänge als IRP_MJ_CREATEerstellen, ist es für Filtertreiber schwierig, die Erstellung von Datenstromobjekten zuverlässig zu erkennen. Daher sollte ein Filtertreiber erwarten, dass ichIRP_MJ_CLEANUP und IRP_MJ_CLOSE Anforderungen für zuvor nicht empfangene Dateiobjekte erhalten sollte.
Wenn ein Poolzuordnungsfehler auftritt, löst IoCreateStreamFileObjectEx2 eine STATUS_INSUFFICIENT_RESOURCES Ausnahme aus.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows 8 |
Zielplattform- | Universal |
Header- | ntifs.h (einschließlich Ntifs.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | PASSIV |