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) |