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 Instanz einer Datei, eines Geräts, eines Verzeichnisses oder eines 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 Typen von Treibern, z. B. Dateisystemtreiber und Netzwerktransporttreiber, verwenden einige der 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;

Angehörige

Type

Ein schreibgeschütztes Element, das 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 Elements 5.

Size

Ein schreibgeschütztes Element, das die Größe des Dateiobjekts in Bytes angibt. Diese Größe enthält nicht die Dateiobjekterweiterung, falls 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 das Vpb- Mitglied nichtNULL-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 die Systeminstabilität dazu führen. In der Regel ist diese Headerstruktur in einen Dateisteuerungsblock (FILE Control Block, FCB) eingebettet. Bei einigen Dateisystemen, die mehrere Datenströme unterstützen, z. B. NTFS, ist diese Headerstruktur jedoch ein Datenstromsteuerungsblock (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 Mitglied ü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-.

Dieses Element ist für Treiber im Dateisystemstapel nicht transparent, da das zugrunde liegende Dateisystem dieses Element verwendet.

SectionObjectPointer

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

PrivateCacheMap

Ein undurchsichtiges Element, das nur von Dateisystemen festgelegt wird, das auf die Verarbeitung bestimmter Informationen verweist und für die Interaktion des Cache-Managers verwendet wird.

FinalStatus

Ein schreibgeschütztes Element, das in bestimmten synchronen Fällen verwendet wird, um den endgültigen Status der E/A-Anforderung des Dateiobjekts anzugeben.

RelatedFileObject

Ein Zeiger auf eine FILE_OBJECT Struktur, die verwendet wird, um anzugeben, dass das aktuelle Dateiobjekt relativ zu einem bereits geöffneten Dateiobjekt geöffnet wurde. Das dateiobjekt, auf das dieses Mitglied 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 Member ist nur während der Verarbeitung der IRP_MJ_CREATE Anforderungen gültig.

LockOperation

Ein schreibgeschütztes Mitglied. Wenn FALSE-, wurde nie ein Sperrvorgang (NtLockFile) für das Dateiobjekt ausgeführt. Wenn TRUE-, wurde mindestens ein Sperrvorgang für das Dateiobjekt ausgeführt. Nachdem dieses Element auf TRUEfestgelegt ist, bleibt dieses Element immer TRUE (z. B. das Freigeben von Dateisperren für das Dateiobjekt setzt dieses Element nicht auf FALSEzurück).

DeletePending

Ein schreibgeschütztes Mitglied. Wenn TRUE, ist ein Löschvorgang für die datei zugeordnete Datei vorhanden. Wenn FALSE-, steht derzeit kein Löschvorgang für das Dateiobjekt aus.

ReadAccess

Ein schreibgeschütztes Mitglied. Wenn TRUE-, wurde die dem Dateiobjekt zugeordnete Datei für den Lesezugriff geöffnet. Wenn FALSE-, wurde die Datei ohne Lesezugriff geöffnet. Diese Informationen werden beim Überprüfen und/oder Festlegen des Freigabezugriffs der Datei verwendet.

WriteAccess

Ein schreibgeschütztes Mitglied. Wenn TRUE-, wurde die dem Dateiobjekt zugeordnete Datei für den Schreibzugriff geöffnet. Wenn FALSE, wurde die Datei ohne Schreibzugriff geöffnet. Diese Informationen werden beim Überprüfen und/oder Festlegen des Freigabezugriffs der Datei verwendet.

DeleteAccess

Ein schreibgeschütztes Mitglied. Wenn TRUE-, wurde die dem Dateiobjekt zugeordnete Datei für den Löschzugriff geöffnet. Wenn FALSE-, wurde die Datei ohne Löschzugriff geöffnet. Diese Informationen werden beim Überprüfen und/oder Festlegen des Freigabezugriffs der Datei verwendet.

SharedRead

Ein schreibgeschütztes Mitglied. Wenn TRUE, wurde die datei, die dem Dateiobjekt zugeordnet ist, für den Lesefreigabezugriff geöffnet. Wenn FALSE-, wurde die Datei ohne Lesezugriff geöffnet. Diese Informationen werden beim Überprüfen und/oder Festlegen des Freigabezugriffs der Datei verwendet.

SharedWrite

Ein schreibgeschütztes Mitglied. Wenn TRUE, wurde die dem Dateiobjekt zugeordnete Datei für den Schreibzugriff geöffnet. Wenn FALSE-, wurde die Datei ohne Schreibzugriff geöffnet. Diese Informationen werden beim Überprüfen und/oder Festlegen des Freigabezugriffs der Datei verwendet.

SharedDelete

Ein schreibgeschütztes Mitglied. Wenn TRUE-, wurde die dem Dateiobjekt zugeordnete Datei zum Löschen des Freigabezugriffs geöffnet. Wenn FALSE-, wurde die Datei ohne Freigabezugriff geöffnet. Diese Informationen werden beim Überprüfen und/oder Festlegen des Freigabezugriffs der Datei verwendet.

Flags

Ein schreibgeschütztes Element, das vom System verwendet wird, um eine oder mehrere (bitweise inklusive ODER-Kombination) der folgenden privaten Flagwerte zu enthalten.

Flagge Bedeutung
FO_FILE_OPEN Veraltet.
FO_SYNCHRONOUS_IO Das Dateiobjekt wird für synchrone E/A geöffnet.
FO_ALERTABLE_IO Alle Wartezeiten im E/A-Manager als Ergebnis einer Anforderung an dieses Dateiobjekt sind warnungsfähig.
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 Datei, die dem Dateiobjekt zugeordnet ist, 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 benannte Pipe dar.
FO_STREAM_FILE Das Dateiobjekt stellt einen Dateidatenstrom dar.
FO_MAILSLOT Das Dateiobjekt stellt einen 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 Von diesem Dateiobjekt gezielte Gerät wurde direkt geöffnet.
FO_FILE_MODIFIED Die Datei, die dem Dateiobjekt zugeordnet ist, wurde geändert.
FO_FILE_SIZE_CHANGED Die Datei, die dem Dateiobjekt zugeordnet ist, 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 Die Groß-/Kleinschreibung 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 ausgeführt.
FO_RANDOM_ACCESS Die Datei, die dem Dateiobjekt zugeordnet ist, 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 Bei einem Dateiobjekt, das einem Port zugeordnet ist, wird ermittelt, ob das System die Warteschlange zum Abschlussport überspringen soll, wenn das IRP synchron mit einem Rückgabewert ohne Fehlerstatus abgeschlossen wird.
FO_SKIP_SET_EVENT Überspringen Sie das Festlegen des Ereignisses für das Dateiobjekt nach Abschluss von IRP.
FO_SKIP_SET_FAST_IO Überspringen Sie das Festlegen eines Ereignisses, das an einen Systemdienst übermittelt wird, 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 ist. Wenn das Volume geöffnet wird, ist das Length Member der UNICODE_STRING Struktur null. Beachten Sie, dass der Dateiname in dieser Zeichenfolge nur während der anfänglichen Verarbeitung 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 vom Buffer Member der UNICODE_STRING Struktur verwiesen wird, wird im ausgelagerten Systemspeicher zugewiesen. Weitere Informationen zum Abrufen eines Dateinamens finden Sie unter FltGetFileNameInformation.

CurrentByteOffset

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

Waiters

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

Busy

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

LastLock

Ein undurchsichtiger Zeiger auf die zuletzt auf das Dateiobjekt angewendete Sperre.

Lock

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

Event

Ein undurchsichtiges Element, das 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 wurde oder eine synchrone API aufgerufen wurde.

CompletionContext

Ein undurchsichtiger Zeiger zum Abschluss der Portinformationen (Portzeiger und Schlüssel), die dem Dateiobjekt zugeordnet sind, falls vorhanden.

IrpListLock

Ein undurchsichtiger Zeiger auf eine KSPIN_LOCK Struktur, die als Drehsperre dient, die verwendet wird, um den Zugriff auf die IRP-Liste des Dateiobjekts zu synchronisieren.

IrpList

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

FileObjectExtension

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

_IOP_FILE_OBJECT_EXTENSION

Eine _IOP_FILE_OBJECT_EXTENSION Struktur.

Bemerkungen

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

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

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

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

Während der Verarbeitung einer IRP_MJ_CREATE Anforderung ruft ein Dateisystemtreiber die IoSetShareAccess Routine auf (wenn der Client der erste ist, um die Datei zu öffnen) oder die IoCheckShareAccess Routine (für nachfolgende Clients, die die Datei freigeben möchten). IoSetShareAccess und IoCheckShareAccess aktualisieren die ReadAccess, WriteAccessund DeleteAccess Member, 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 SharedRead, SharedWriteund SharedDelete Member, um die Zugriffsrechte anzugeben, die gleichzeitig zwei oder mehr Clients gewährt werden, die die Datei freigeben. 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 von den FsContext- und FsContext2 Member verwiesen werden.

Der Objekttyp (z. B. eine Datei, ein Verzeichnis oder ein Volume), die ein bestimmtes Dateiobjekt darstellt, kann nicht 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)

Siehe auch

DEVICE_OBJECT

FOBX-

FSRTL_ADVANCED_FCB_HEADER

IRP_MJ_CREATE

IoCheckShareAccess-

IoGetDeviceObjectPointer-

IoSetShareAccess-

ObDereferenceObject

ZwQueryInformationFile-