struttura FILE_OBJECT (wdm.h)

La struttura FILE_OBJECT viene usata dal sistema per rappresentare un oggetto file. Per i sottosistemi protetti in modalità utente, un oggetto file rappresenta un'istanza aperta di un file, un dispositivo, una directory o un volume. Per dispositivi e driver intermedi, un oggetto file rappresenta in genere un oggetto dispositivo. Per i driver nello stack del file system, un oggetto file rappresenta in genere una directory o un file.

Un oggetto file è parzialmente opaco. Alcuni tipi di driver, ad esempio driver di file system e driver di trasporto di rete, usano alcuni dei campi degli oggetti file.

Sintassi

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 PVOID                  FileObjectExtension;
} FILE_OBJECT, *PFILE_OBJECT;

Members

Type

Membro di sola lettura utilizzato dal sistema per indicare che l'oggetto è un oggetto file. Se l'oggetto è un oggetto file, il valore di questo membro è 5.

Size

Membro di sola lettura che specifica le dimensioni, in byte, dell'oggetto file. Questa dimensione non include l'estensione dell'oggetto file, se presente.

DeviceObject

Puntatore all'oggetto dispositivo in cui viene aperto il file.

Vpb

Puntatore al blocco di parametri del volume associato all'oggetto file.

Si noti che se il membro Vpb non è NULL, il file si trova in un volume montato.

FsContext

Puntatore a qualsiasi stato facoltativo gestito da un driver sull'oggetto file; in caso contrario, NULL. Per i driver del file system, questo membro deve puntare a una struttura di intestazione FSRTL_ADVANCED_FCB_HEADER contenuta all'interno di una struttura specifica del file system; in caso contrario, l'instabilità del sistema può causare. In genere, questa struttura di intestazione è incorporata in un blocco di controllo file (FCB). Tuttavia, in alcuni file system che supportano più flussi di dati, ad esempio NTFS, questa struttura di intestazione è un blocco di controllo di flusso (SCB).

In uno stack di dispositivi WDM solo l'oggetto dispositivo funzionale (FDO) può usare i due puntatori di contesto. I driver di file system condividono questo membro tra più apre lo stesso flusso di dati.

FsContext2

Puntatore a qualsiasi altro stato gestito da un driver sull'oggetto file; in caso contrario, NULL.

Questo membro è opaco per i driver nello stack del file system perché il file system sottostante usa questo membro.

SectionObjectPointer

Puntatore all'oggetto di sola lettura dell'oggetto file. Questo membro viene impostato solo dai file system e usato per l'interazione con Cache Manager.

PrivateCacheMap

Un membro opaco, impostato solo da file system, che punta a gestire informazioni specifiche e che viene usato per l'interazione con Cache Manager.

FinalStatus

Membro di sola lettura usato in determinati casi sincroni per indicare lo stato finale della richiesta di I/O dell'oggetto file.

RelatedFileObject

Puntatore a una struttura FILE_OBJECT utilizzata per indicare che l'oggetto file corrente è stato aperto rispetto a un oggetto file già aperto. L'oggetto file a cui fa riferimento questo membro è in genere una directory ( ovvero il file corrente è stato aperto rispetto a questa directory). Tuttavia, un file può essere riaperto rispetto a se stesso e i flussi di dati alternativi per un file possono essere aperti rispetto a un flusso di dati primario già aperto per lo stesso file. Il membro RelatedFileObject è valido solo durante l'elaborazione delle richieste di IRP_MJ_CREATE .

LockOperation

Membro di sola lettura. Se FALSE, un'operazione di blocco (NtLockFile) non è mai stata eseguita sull'oggetto file. Se TRUE, almeno un'operazione di blocco è stata eseguita sull'oggetto file. Dopo aver impostato su TRUE, questo membro rimane sempre TRUE , ad esempio rilasciando blocchi di file sull'oggetto file non reimposta questo membro su FALSE.

DeletePending

Membro di sola lettura. Se TRUE, esiste un'operazione di eliminazione per il file associato all'oggetto file. Se FALSE, non esiste attualmente alcuna operazione di eliminazione in sospeso per l'oggetto file.

ReadAccess

Membro di sola lettura. Se TRUE, il file associato all'oggetto file è stato aperto per l'accesso in lettura. Se FALSE, il file è stato aperto senza accesso in lettura. Queste informazioni vengono usate durante il controllo e/o l'impostazione dell'accesso di condivisione del file.

WriteAccess

Membro di sola lettura. Se TRUE, il file associato all'oggetto file è stato aperto per l'accesso in scrittura. Se FALSE, il file è stato aperto senza accesso in scrittura. Queste informazioni vengono usate durante il controllo e/o l'impostazione dell'accesso di condivisione del file.

DeleteAccess

Membro di sola lettura. Se TRUE, il file associato all'oggetto file è stato aperto per eliminare l'accesso. Se FALSE, il file è stato aperto senza eliminare l'accesso. Queste informazioni vengono usate durante il controllo e/o l'impostazione dell'accesso di condivisione del file.

SharedRead

Membro di sola lettura. Se TRUE, il file associato all'oggetto file è stato aperto per l'accesso alla condivisione in lettura. Se FALSE, il file è stato aperto senza l'accesso in lettura. Queste informazioni vengono usate durante il controllo e/o l'impostazione dell'accesso di condivisione del file.

SharedWrite

Membro di sola lettura. Se TRUE, il file associato all'oggetto file è stato aperto per l'accesso alla condivisione di scrittura. Se FALSE, il file è stato aperto senza l'accesso alla condivisione di scrittura. Queste informazioni vengono usate durante il controllo e/o l'impostazione dell'accesso di condivisione del file.

SharedDelete

Membro di sola lettura. Se TRUE, il file associato all'oggetto file è stato aperto per eliminare l'accesso alla condivisione. Se FALSE, il file è stato aperto senza eliminare l'accesso alla condivisione. Queste informazioni vengono usate durante il controllo e/o l'impostazione dell'accesso di condivisione del file.

Flags

Membro di sola lettura usato dal sistema per contenere una o più (combinazione OR inclusiva bit per bit) dei valori del flag privato seguenti.

Contrassegno Significato
FO_FILE_OPEN Deprecato.
FO_SYNCHRONOUS_IO L'oggetto file viene aperto per I/O sincrono.
FO_ALERTABLE_IO Qualsiasi attesa nella gestione I/O, in seguito a una richiesta effettuata a questo oggetto file, è avvisabile.
FO_NO_INTERMEDIATE_BUFFERING Il file associato all'oggetto file non può essere memorizzato nella cache o nel buffer interno di un driver.
FO_WRITE_THROUGH I servizi di sistema, i driver del file system e i driver che scrivono dati nel file devono trasferire i dati nel file prima che venga considerata completata qualsiasi operazione di scrittura richiesta.
FO_SEQUENTIAL_ONLY Il file associato all'oggetto file è stato aperto solo per operazioni di I/O sequenziali.
FO_CACHE_SUPPORTED Il file associato all'oggetto file è memorizzato nella cache. Questo flag deve essere impostato solo da un driver di file system e solo se il membro FsContext punta a una struttura di FSRTL_ADVANCED_FCB_HEADER valida.
FO_NAMED_PIPE L'oggetto file rappresenta una pipe denominata.
FO_STREAM_FILE L'oggetto file rappresenta un flusso di file.
FO_MAILSLOT L'oggetto file rappresenta una mailslot.
FO_GENERATE_AUDIT_ON_CLOSE Deprecato.
FO_QUEUE_IRP_TO_THREAD Gli irP non verranno accodati a questo oggetto file.
FO_DIRECT_DEVICE_OPEN Il dispositivo di destinazione di questo oggetto file è stato aperto direttamente.
FO_FILE_MODIFIED Il file associato all'oggetto file è stato modificato.
FO_FILE_SIZE_CHANGED Il file associato all'oggetto file è cambiato in dimensioni.
FO_CLEANUP_COMPLETE Il file system ha completato la pulizia per questo oggetto file.
FO_TEMPORARY_FILE Il file associato all'oggetto file è un file temporaneo.
FO_DELETE_ON_CLOSE Il file associato all'oggetto file verrà eliminato dal file system al momento della chiusura.
FO_OPENED_CASE_SENSITIVE Il caso del nome file del file associato all'oggetto file viene rispettato.
FO_HANDLE_CREATED È stato creato un handle di file per l'oggetto file.
FO_FILE_FAST_IO_READ È stata eseguita una lettura di I/O veloce su questo oggetto file.
FO_RANDOM_ACCESS Il file associato all'oggetto file è stato aperto per l'accesso casuale.
FO_FILE_OPEN_CANCELLED La richiesta di creazione per questo oggetto file è stata annullata prima del completamento.
FO_VOLUME_OPEN L'oggetto file rappresenta una richiesta di apertura del volume.
FO_REMOTE_ORIGIN Richiesta di creazione per il file associato all'oggetto file originato in un computer remoto.
FO_SKIP_COMPLETION_PORT Per un oggetto file associato a una porta, determina se il sistema deve ignorare l'accodamento alla porta di completamento quando l'IRP viene completato in modo sincrono con un valore restituito di stato non di errore.
FO_SKIP_SET_EVENT Ignorare l'impostazione dell'evento per l'oggetto file al completamento di IRP.
FO_SKIP_SET_FAST_IO Ignorare l'impostazione di un evento fornito a un servizio di sistema quando il percorso di I/O rapido ha esito positivo.

FileName

Struttura UNICODE_STRING il cui membro Buffer punta a una stringa Unicode di sola lettura che contiene il nome del file aperto nel volume. Se il volume viene aperto, il membro Length della struttura UNICODE_STRING sarà zero. Si noti che il nome del file in questa stringa è valido solo durante l'elaborazione iniziale di una richiesta di IRP_MJ_CREATE . Questo nome file non deve essere considerato valido dopo che il file system inizia a elaborare la richiesta di IRP_MJ_CREATE . La risorsa di archiviazione per la stringa a cui punta il membro Buffer della struttura UNICODE_STRING viene allocata nella memoria di sistema di paging. Per altre informazioni su come ottenere un nome file, vedere FltGetFileNameInformation.

CurrentByteOffset

Membro di sola lettura che specifica l'offset del file, in byte, associato all'oggetto file.

Waiters

Membro di sola lettura utilizzato dal sistema per contare il numero di waiter in attesa su un oggetto file aperto per l'accesso sincrono.

Busy

Membro di sola lettura utilizzato dal sistema per indicare se un oggetto file aperto per l'accesso sincrono è attualmente occupato.

LastLock

Puntatore opaco all'ultimo blocco applicato all'oggetto file.

Lock

Membro opaco utilizzato dal sistema per contenere un blocco eventi dell'oggetto file. Il blocco eventi viene usato per controllare l'accesso sincrono all'oggetto file. Applicabile solo agli oggetti file aperti per l'accesso sincrono.

Event

Membro opaco utilizzato dal sistema per contenere un oggetto evento per l'oggetto file. L'oggetto evento viene usato per segnalare il completamento di una richiesta di I/O sull'oggetto file se non è stato fornito alcun evento utente o è stata chiamata un'API sincrona.

CompletionContext

Puntatore opaco alle informazioni sulla porta di completamento (puntatore e chiave) associate all'oggetto file, se presente.

IrpListLock

Puntatore opaco a una struttura KSPIN_LOCK che funge da blocco spin utilizzato per sincronizzare l'accesso all'elenco IRP dell'oggetto file.

IrpList

Puntatore opaco all'intestazione dell'elenco IRP associato all'oggetto file.

FileObjectExtension

Puntatore opaco alla struttura FOBX (File Object Extension) dell'oggetto file. La struttura FOBX contiene vari contesti opachi usati internamente, nonché i contesti di oggetto per file disponibili tramite routine FsRtlXxx .

Commenti

I driver possono utilizzare i membri FsContext e FsContext2 per mantenere lo stato determinato dal driver su un oggetto file aperto. Un driver non può usare questi membri a meno che l'oggetto file non sia accessibile nel percorso dello stack I/O del driver di un IRP.

Tutti i membri rimanenti in un oggetto file sono opachi o di sola lettura:

  • I membri opachi all'interno di un oggetto file devono essere considerati inaccessibili. I driver con dipendenze da posizioni dei campi oggetto o l'accesso a membri opachi potrebbero non rimanere portabili e interoperabili con altri driver nel tempo.

  • I driver possono utilizzare membri di sola lettura per acquisire informazioni pertinenti, ma non modificare i membri di sola lettura e, se un puntatore, l'oggetto a cui punta il membro.

Durante l'elaborazione di una richiesta di IRP_MJ_CREATE , un driver del file system chiama la routine IoSetShareAccess (se il client è il primo ad aprire il file) o la routine IoCheckShareAccess (per i client successivi che vogliono condividere il file). IoSetShareAccess e IoCheckShareAccess aggiornano i membri ReadAccess, WriteAccess e DeleteAccess per indicare i diritti di accesso concessi al client se il client ha accesso esclusivo al file. Inoltre, IoCheckShareAccess aggiorna i membri SharedRead, SharedWrite e SharedDelete per indicare i diritti di accesso concessi contemporaneamente a due o più client che condividono il file. Se il driver per un dispositivo diverso da un file system deve monitorare i diritti di accesso dei client, questo driver archivia in genere le informazioni sui diritti di accesso nei buffer di contesto a cui puntano i membri FsContext e FsContext2 .

Il tipo di oggetto (ad esempio, un file, una directory o un volume) rappresentato da un determinato oggetto file non può essere determinato esaminando solo il contenuto della struttura dell'oggetto file. Per informazioni su come determinare il tipo di oggetto rappresentato da un oggetto file, vedere ZwQueryInformationFile.

Common Log File System (CLFS) usa la struttura LOG_FILE_OBJECT per rappresentare i log. La funzione ClfsCreateLogFile restituisce un puntatore a una struttura LOG_FILE_OBJECT , che i client passano quindi ad altre funzioni CLFS.

I client CLFS non accedono direttamente ai membri di una struttura di LOG_FILE_OBJECT .

typedef FILE_OBJECT LOG_FILE_OBJECT, *PLOG_FILE_OBJECT, **PPLOG_FILE_OBJECT;

Requisiti

Requisito Valore
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)

Vedi anche

DEVICE_OBJECT

FOBX

FSRTL_ADVANCED_FCB_HEADER

IRP_MJ_CREATE

IoCheckShareAccess

IoGetDeviceObjectPointer

IoSetShareAccess

ObDereferenceObject

ZwQueryInformationFile