Freigeben über


FILE_OBJECT-Struktur (wdm.h)

Die FILE_OBJECT-Struktur wird vom System verwendet, um ein Dateiobjekt darzustellen. Für vom Benutzermodus geschützte Subsysteme stellt ein Dateiobjekt eine offene instance einer Datei, eines Geräts, eines Verzeichnisses oder volumes dar. Für Geräte- und Zwischentreiber stellt ein Dateiobjekt in der Regel ein Geräteobjekt dar. Für Treiber im Dateisystemstapel stellt ein Dateiobjekt in der Regel ein Verzeichnis oder eine Datei dar.

Ein Dateiobjekt ist teilweise undurchsichtig. Bestimmte Arten von Treibern, z. B. Dateisystemtreiber und Netzwerktransporttreiber, verwenden einige felder von Dateiobjekten.

Syntax

typedef struct _FILE_OBJECT {
  CSHORT                                Type;
  CSHORT                                Size;
  PDEVICE_OBJECT                        DeviceObject;
  PVPB                                  Vpb;
  PVOID                                 FsContext;
  PVOID                                 FsContext2;
  PSECTION_OBJECT_POINTERS              SectionObjectPointer;
  PVOID                                 PrivateCacheMap;
  NTSTATUS                              FinalStatus;
  struct _FILE_OBJECT                   *RelatedFileObject;
  BOOLEAN                               LockOperation;
  BOOLEAN                               DeletePending;
  BOOLEAN                               ReadAccess;
  BOOLEAN                               WriteAccess;
  BOOLEAN                               DeleteAccess;
  BOOLEAN                               SharedRead;
  BOOLEAN                               SharedWrite;
  BOOLEAN                               SharedDelete;
  ULONG                                 Flags;
  UNICODE_STRING                        FileName;
  LARGE_INTEGER                         CurrentByteOffset;
  __volatile ULONG                      Waiters;
  __volatile ULONG                      Busy;
  PVOID                                 LastLock;
  KEVENT                                Lock;
  KEVENT                                Event;
  __volatile PIO_COMPLETION_CONTEXT     CompletionContext;
  KSPIN_LOCK                            IrpListLock;
  LIST_ENTRY                            IrpList;
  __volatile _IOP_FILE_OBJECT_EXTENSION *FileObjectExtension;
  struct                                _IOP_FILE_OBJECT_EXTENSION;
} FILE_OBJECT, *PFILE_OBJECT;

Member

Type

Ein schreibgeschützter Member, der vom System verwendet wird, um anzugeben, dass das Objekt ein Dateiobjekt ist. Wenn es sich bei dem Objekt um ein Dateiobjekt handelt, ist der Wert dieses Members 5.

Size

Ein schreibgeschützter Member, der die Größe des Dateiobjekts in Bytes angibt. Diese Größe enthält nicht die Dateiobjekterweiterung, sofern vorhanden.

DeviceObject

Ein Zeiger auf das Geräteobjekt, auf dem die Datei geöffnet wird.

Vpb

Ein Zeiger auf den Volumeparameterblock, der dem Dateiobjekt zugeordnet ist.

Beachten Sie, dass sich die Datei auf einem bereitgestellten Volume befindet, wenn der Vpb-Member nicht NULL ist.

FsContext

Ein Zeiger auf den optionalen Zustand, den ein Treiber über das Dateiobjekt verwaltet; andernfalls NULL. Bei Dateisystemtreibern muss dieser Member auf eine FSRTL_ADVANCED_FCB_HEADER Headerstruktur verweisen, die in einer dateisystemspezifischen Struktur enthalten ist. Andernfalls kann es zu Systeminstabilität führen. Normalerweise wird diese Headerstruktur in einen Dateisteuerungsblock (FCB) eingebettet. Bei einigen Dateisystemen, die mehrere Datenströme unterstützen, z. B. NTFS, ist diese Headerstruktur jedoch ein Stream Control Block (SCB).

In einem WDM-Gerätestapel kann nur das funktionale Geräteobjekt (Functional Device Object, FDO) die beiden Kontextzeiger verwenden. Dateisystemtreiber teilen dieses Element über mehrere Geöffnete für denselben Datenstrom.

FsContext2

Ein Zeiger auf den zusätzlichen Zustand, den ein Treiber über das Dateiobjekt verwaltet; andernfalls NULL.

Dieser Member ist für Treiber im Dateisystemstapel nicht transparent, da das zugrunde liegende Dateisystem diesen Member verwendet.

SectionObjectPointer

Ein Zeiger auf das schreibgeschützte Abschnittsobjekt des Dateiobjekts. Dieser Member wird nur von Dateisystemen festgelegt und für die Cache-Manager-Interaktion verwendet.

PrivateCacheMap

Ein nicht transparentes Element, das nur von Dateisystemen festgelegt wird, das auf handle-spezifische Informationen verweist und für die Cache-Manager-Interaktion verwendet wird.

FinalStatus

Ein schreibgeschützter Member, der in bestimmten synchronen Fällen verwendet wird, um die endgültige status der E/A-Anforderung des Dateiobjekts anzugeben.

RelatedFileObject

Ein Zeiger auf eine FILE_OBJECT Struktur, die angibt, dass das aktuelle Dateiobjekt relativ zu einem bereits geöffneten Dateiobjekt geöffnet wurde. Das Dateiobjekt, auf das dieses Element verweist, ist in der Regel ein Verzeichnis (d. h. die aktuelle Datei wurde relativ zu diesem Verzeichnis geöffnet). Eine Datei kann jedoch relativ zu sich selbst erneut geöffnet werden, und alternative Datenströme für eine Datei können relativ zu einem bereits geöffneten primären Datenstrom für dieselbe Datei geöffnet werden. Das RelatedFileObject-Element ist nur während der Verarbeitung der IRP_MJ_CREATE-Anforderungen gültig.

LockOperation

Ein schreibgeschützter Member. Wenn FALSE, wurde noch nie ein Sperrvorgang (NtLockFile) für das Dateiobjekt ausgeführt. Wenn TRUE, wurde mindestens ein Sperrvorgang für das Dateiobjekt ausgeführt. Nach dem Festlegen auf TRUE bleibt dieser Member immer TRUE (z. B. wird durch das Freigeben von Dateisperren für das Dateiobjekt dieser Member nicht auf FALSE zurückgesetzt).

DeletePending

Ein schreibgeschützter Member. Wenn TRUE, ist ein Löschvorgang für die Datei vorhanden, die dem Dateiobjekt zugeordnet ist. Bei FALSE ist derzeit kein Löschvorgang für das Dateiobjekt ausstehend.

ReadAccess

Ein schreibgeschützter Member. True gibt an, dass die dem Dateiobjekt zugeordnete Datei für den Lesezugriff geöffnet wurde. Bei FALSE wurde die Datei ohne Lesezugriff geöffnet. Diese Informationen werden beim Überprüfen und/oder Festlegen des Freigabezugriffs auf die Datei verwendet.

WriteAccess

Ein schreibgeschützter Member. True gibt an, dass die dem Dateiobjekt zugeordnete Datei für den Schreibzugriff geöffnet wurde. Bei FALSE wurde die Datei ohne Schreibzugriff geöffnet. Diese Informationen werden beim Überprüfen und/oder Festlegen des Freigabezugriffs auf die Datei verwendet.

DeleteAccess

Ein schreibgeschützter Member. True gibt an, dass die dem Dateiobjekt zugeordnete Datei für den Löschzugriff geöffnet wurde. Bei FALSE wurde die Datei ohne Löschzugriff geöffnet. Diese Informationen werden beim Überprüfen und/oder Festlegen des Freigabezugriffs auf die Datei verwendet.

SharedRead

Ein schreibgeschützter Member. True gibt an, dass die dem Dateiobjekt zugeordnete Datei für den Lesefreigabezugriff geöffnet wurde. Bei FALSE wurde die Datei ohne Lesefreigabezugriff geöffnet. Diese Informationen werden beim Überprüfen und/oder Festlegen des Freigabezugriffs auf die Datei verwendet.

SharedWrite

Ein schreibgeschützter Member. True gibt an, dass die dem Dateiobjekt zugeordnete Datei für den Schreibfreigabezugriff geöffnet wurde. Bei FALSE wurde die Datei ohne Schreibfreigabezugriff geöffnet. Diese Informationen werden beim Überprüfen und/oder Festlegen des Freigabezugriffs auf die Datei verwendet.

SharedDelete

Ein schreibgeschützter Member. True gibt an, dass die dem Dateiobjekt zugeordnete Datei zum Löschen des Freigabezugriffs geöffnet wurde. Bei FALSE wurde die Datei ohne Freigabezugriff geöffnet. Diese Informationen werden beim Überprüfen und/oder Festlegen des Freigabezugriffs auf die Datei verwendet.

Flags

Ein schreibgeschützter Member, der vom System verwendet wird, um einen oder mehrere (eine bitweise inklusive OR-Kombination) der folgenden privaten Flagwerte zu enthalten.

Flag Bedeutung
FO_FILE_OPEN Veraltet.
FO_SYNCHRONOUS_IO Das Dateiobjekt wird für synchrone E/A-Vorgänge geöffnet.
FO_ALERTABLE_IO Jede Wartezeit im E/A-Manager als Ergebnis einer Anforderung an dieses Dateiobjekt ist warnbar.
FO_NO_INTERMEDIATE_BUFFERING Die dem Dateiobjekt zugeordnete Datei kann nicht zwischengespeichert oder in den internen Puffern eines Treibers gepuffert werden.
FO_WRITE_THROUGH Systemdienste, Dateisystemtreiber und Treiber, die Daten in die Datei schreiben, müssen die Daten in die Datei übertragen, bevor ein angeforderter Schreibvorgang als abgeschlossen betrachtet wird.
FO_SEQUENTIAL_ONLY Die dem Dateiobjekt zugeordnete Datei wurde nur für sequenzielle E/A-Vorgänge geöffnet.
FO_CACHE_SUPPORTED Die dem Dateiobjekt zugeordnete Datei kann zwischengespeichert werden. Dieses Flag sollte nur von einem Dateisystemtreiber festgelegt werden, und nur, wenn der FsContext-Member auf eine gültige FSRTL_ADVANCED_FCB_HEADER-Struktur verweist.
FO_NAMED_PIPE Das Dateiobjekt stellt eine Named Pipe dar.
FO_STREAM_FILE Das Dateiobjekt stellt einen Dateidatenstrom dar.
FO_MAILSLOT Das Dateiobjekt stellt ein Maillot dar.
FO_GENERATE_AUDIT_ON_CLOSE Veraltet.
FO_QUEUE_IRP_TO_THREAD IRPs werden nicht in die Warteschlange dieses Dateiobjekts eingereiht.
FO_DIRECT_DEVICE_OPEN Das Gerät, auf das dieses Dateiobjekt abzielt, wurde direkt geöffnet.
FO_FILE_MODIFIED Die dem Dateiobjekt zugeordnete Datei wurde geändert.
FO_FILE_SIZE_CHANGED Die dem Dateiobjekt zugeordnete Datei hat sich in der Größe geändert.
FO_CLEANUP_COMPLETE Das Dateisystem hat die Bereinigung für dieses Dateiobjekt abgeschlossen.
FO_TEMPORARY_FILE Die dem Dateiobjekt zugeordnete Datei ist eine temporäre Datei.
FO_DELETE_ON_CLOSE Die dem Dateiobjekt zugeordnete Datei wird beim Schließen vom Dateisystem gelöscht.
FO_OPENED_CASE_SENSITIVE Der Dateiname der Datei, die dem Dateiobjekt zugeordnet ist, wird berücksichtigt.
FO_HANDLE_CREATED Für das Dateiobjekt wurde ein Dateihandle erstellt.
FO_FILE_FAST_IO_READ Für dieses Dateiobjekt wurde ein schneller E/A-Lesevorgang durchgeführt.
FO_RANDOM_ACCESS Die dem Dateiobjekt zugeordnete Datei wurde für den zufälligen Zugriff geöffnet.
FO_FILE_OPEN_CANCELLED Die Erstellungsanforderung für dieses Dateiobjekt wurde vor Abschluss abgebrochen.
FO_VOLUME_OPEN Das Dateiobjekt stellt eine volume open request dar.
FO_REMOTE_ORIGIN Die Erstellungsanforderung für die Datei, die dem Dateiobjekt zugeordnet ist, stammt auf einem Remotecomputer.
FO_SKIP_COMPLETION_PORT Für ein einem Port zugeordnetes Dateiobjekt bestimmt, ob das System die Warteschlangen bis zum Vervollständigungsport überspringen soll, wenn der IRP synchron mit einem Nichtfehler status Rückgabewert abgeschlossen wird.
FO_SKIP_SET_EVENT Überspringen Sie das Festlegen des Ereignisses für das Dateiobjekt nach IRP-Abschluss.
FO_SKIP_SET_FAST_IO Überspringen Sie das Festlegen eines Für einen Systemdienst bereitgestellten Ereignisses, wenn der schnelle E/A-Pfad erfolgreich ist.

FileName

Eine UNICODE_STRING-Struktur , deren Buffer-Member auf eine schreibgeschützte Unicode-Zeichenfolge verweist, die den Namen der datei enthält, die auf dem Volume geöffnet wurde. Wenn das Volume geöffnet wird, ist das Length-Element der UNICODE_STRING-Struktur 0. Beachten Sie, dass der Dateiname in dieser Zeichenfolge nur während der erstverarbeitung einer IRP_MJ_CREATE-Anforderung gültig ist. Dieser Dateiname sollte nicht als gültig betrachtet werden, nachdem das Dateisystem mit der Verarbeitung der IRP_MJ_CREATE Anforderung begonnen hat. Der Speicher für die Zeichenfolge, auf die der Puffermember der UNICODE_STRING-Struktur verweist, wird im ausgelagerten Systemspeicher zugeordnet. Weitere Informationen zum Abrufen eines Dateinamens finden Sie unter FltGetFileNameInformation.

CurrentByteOffset

Ein schreibgeschütztes Element, das den Dateioffset in Bytes angibt, der dem Dateiobjekt zugeordnet ist.

Waiters

Ein schreibgeschütztes Element, das vom System verwendet wird, um die Anzahl der ausstehenden Kellner für ein Dateiobjekt zu zählen, das für den synchronen Zugriff geöffnet wurde.

Busy

Ein schreibgeschütztes Element, das vom System verwendet wird, um anzugeben, ob ein für den synchronen Zugriff geöffnetes Dateiobjekt derzeit ausgelastet ist.

LastLock

Ein undurchsichtiger Zeiger auf die letzte Sperre, die auf das Dateiobjekt angewendet wurde.

Lock

Ein undurchsichtiges Element, das vom System verwendet wird, um eine Dateiobjektereignissperre zu speichern. Die Ereignissperre wird verwendet, um den synchronen Zugriff auf das Dateiobjekt zu steuern. Gilt nur für Dateiobjekte, die für den synchronen Zugriff geöffnet werden.

Event

Ein undurchsichtiger Member, der vom System zum Speichern eines Ereignisobjekts für das Dateiobjekt verwendet wird. Das Ereignisobjekt wird verwendet, um den Abschluss einer E/A-Anforderung für das Dateiobjekt zu signalisieren, wenn kein Benutzerereignis angegeben oder eine synchrone API aufgerufen wurde.

CompletionContext

Ein undurchsichtiger Zeiger auf die Vervollständigungsportinformationen (Portzeiger und Schlüssel), die dem Dateiobjekt zugeordnet sind, falls vorhanden.

IrpListLock

Ein undurchsichtiger Zeiger auf eine KSPIN_LOCK-Struktur , die als Drehsperre dient, mit der der Zugriff auf die IRP-Liste des Dateiobjekts synchronisiert wird.

IrpList

Ein undurchsichtiger Zeiger auf den Kopf der IRP-Liste, die dem Dateiobjekt zugeordnet ist.

FileObjectExtension

Ein undurchsichtiger Zeiger auf die FOBX-Struktur (File Object Extension) des Dateiobjekts. Die FOBX-Struktur enthält verschiedene undurchsichtige Kontexte, die intern verwendet werden, sowie die Objektkontexte pro Datei, die über FsRtlXxx-Routinen verfügbar sind.

_IOP_FILE_OBJECT_EXTENSION

Eine _IOP_FILE_OBJECT_EXTENSION-Struktur .

Hinweise

Treiber können die Elemente FsContext und FsContext2 verwenden, um den treiberbestimmten Zustand eines geöffneten Dateiobjekts beizubehalten. Ein Treiber kann diese Member nur verwenden, wenn auf das Dateiobjekt im E/A-Stapelspeicherort eines IRP des Treibers zugegriffen werden kann.

Alle verbleibenden Member in einem Dateiobjekt sind entweder undurchsichtig oder schreibgeschützt:

  • Undurchsichtige Elemente innerhalb eines Dateiobjekts sollten als nicht zugänglich betrachtet werden. Treiber mit Abhängigkeiten von Objektfeldstandorten oder Zugriff auf undurchsichtige Member bleiben möglicherweise nicht portabel und interoperabel mit anderen Treibern im Laufe der Zeit.

  • Treiber können schreibgeschützte Member verwenden, um relevante Informationen zu erhalten, dürfen aber nicht schreibgeschützte Member und, wenn ein Zeiger, das Objekt ändern, auf das das Element verweist.

Während der Verarbeitung einer IRP_MJ_CREATE Anforderung ruft ein Dateisystemtreiber die IoSetShareAccess-Routine (wenn der Client die Datei zuerst öffnet) oder die IoCheckShareAccess-Routine (für nachfolgende Clients, die die Datei freigeben möchten) auf. IoSetShareAccess und IoCheckShareAccess aktualisieren die Member ReadAccess, WriteAccess und DeleteAccess , um die Zugriffsrechte anzugeben, die dem Client gewährt werden, wenn der Client exklusiven Zugriff auf die Datei hat. Darüber hinaus aktualisiert IoCheckShareAccess die Member SharedRead, SharedWrite und SharedDelete , um die Zugriffsrechte anzugeben, die gleichzeitig zwei oder mehr Clients gewährt werden, die die Datei gemeinsam nutzen. Wenn der Treiber für ein anderes Gerät als ein Dateisystem die Zugriffsrechte von Clients überwachen muss, speichert dieser Treiber in der Regel Zugriffsberechtigungsinformationen in Kontextpuffern, auf die die Mitglieder fsContext und FsContext2 verweisen.

Der Typ des Objekts (z. B. eine Datei, ein Verzeichnis oder ein Volume), den ein bestimmtes Dateiobjekt darstellt, kann nicht nur durch die Untersuchung des Inhalts der Dateiobjektstruktur bestimmt werden. Informationen zum Bestimmen des Typs des Objekts, das ein Dateiobjekt darstellt, finden Sie unter ZwQueryInformationFile.

Das Common Log File System (CLFS) verwendet die LOG_FILE_OBJECT-Struktur , um Protokolle darzustellen. Die ClfsCreateLogFile-Funktion gibt einen Zeiger auf eine LOG_FILE_OBJECT-Struktur zurück, die clients dann an andere CLFS-Funktionen übergeben.

CLFS-Clients greifen nicht direkt auf die Member einer LOG_FILE_OBJECT-Struktur zu.

typedef FILE_OBJECT LOG_FILE_OBJECT, *PLOG_FILE_OBJECT, **PPLOG_FILE_OBJECT;

Anforderungen

Anforderung Wert
Header wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)

Weitere Informationen

DEVICE_OBJECT

FOBX

FSRTL_ADVANCED_FCB_HEADER

IRP_MJ_CREATE

IoCheckShareAccess

IoGetDeviceObjectPointer

IoSetShareAccess

ObDereferenceObject

ZwQueryInformationFile