struktur FILE_OBJECT (wdm.h)

Struktur FILE_OBJECT digunakan oleh sistem untuk mewakili objek file. Untuk subsistem yang dilindungi mode pengguna, objek file mewakili instans terbuka file, perangkat, direktori, atau volume. Untuk perangkat dan driver perantara, objek file biasanya mewakili objek perangkat. Untuk driver dalam tumpukan sistem file, objek file biasanya mewakili direktori atau file.

Objek file buram sebagian. Jenis driver tertentu, seperti driver sistem file dan driver transportasi jaringan, menggunakan beberapa bidang objek file.

Sintaks

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;

Anggota

Type

Anggota baca-saja yang digunakan oleh sistem untuk menunjukkan bahwa objek adalah objek file. Jika objek adalah objek file, nilai anggota ini adalah 5.

Size

Anggota baca-saja yang menentukan ukuran, dalam byte, dari objek file. Ukuran ini tidak termasuk ekstensi objek file, jika ada.

DeviceObject

Penunjuk ke objek perangkat tempat file dibuka.

Vpb

Penunjuk ke blok parameter volume yang terkait dengan objek file.

Perhatikan bahwa jika anggota Vpb bukan NULL, file berada pada volume yang dipasang.

FsContext

Penunjuk ke status opsional apa pun yang dipertahankan driver tentang objek file; jika tidak, NULL. Untuk driver sistem file, anggota ini harus menunjuk ke struktur header FSRTL_ADVANCED_FCB_HEADER yang terkandung dalam struktur khusus sistem file; jika tidak, ketidakstabilan sistem dapat mengakibatkan. Biasanya, struktur header ini disematkan dalam blok kontrol file (FCB). Namun, pada beberapa sistem file yang mendukung beberapa aliran data, seperti NTFS, struktur header ini adalah blok kontrol aliran (SCB).

Dalam tumpukan perangkat WDM, hanya objek perangkat fungsi (FDO) yang dapat menggunakan dua penunjuk konteks. Driver sistem file berbagi anggota ini di beberapa terbuka ke aliran data yang sama.

FsContext2

Penunjuk ke status tambahan apa pun yang dipertahankan driver tentang objek file; jika tidak, NULL.

Anggota ini buram untuk driver dalam tumpukan sistem file karena sistem file yang mendasar menggunakan anggota ini.

SectionObjectPointer

Penunjuk ke objek bagian baca-saja objek file. Anggota ini hanya diatur oleh sistem file dan digunakan untuk interaksi Cache Manager.

PrivateCacheMap

Anggota buram, hanya diatur oleh sistem file, yang menunjuk ke informasi khusus penanganan dan yang digunakan untuk interaksi Cache Manager.

FinalStatus

Anggota baca-saja yang digunakan, dalam kasus sinkron tertentu, untuk menunjukkan status akhir permintaan I/O objek file.

RelatedFileObject

Penunjuk ke struktur FILE_OBJECT yang digunakan untuk menunjukkan bahwa objek file saat ini telah dibuka relatif terhadap objek file yang sudah terbuka. Objek file yang diarahkan oleh anggota ini biasanya adalah direktori (artinya file saat ini telah dibuka relatif terhadap direktori ini). Namun, file dapat dibuka kembali relatif terhadap dirinya sendiri, dan aliran data alternatif untuk file dapat dibuka relatif terhadap aliran data utama yang sudah terbuka untuk file yang sama. Anggota RelatedFileObject hanya valid selama pemrosesan permintaan IRP_MJ_CREATE .

LockOperation

Anggota baca-saja. Jika FALSE, operasi penguncian (NtLockFile) belum pernah dilakukan pada objek file. Jika TRUE, setidaknya satu operasi penguncian telah dilakukan pada objek file. Setelah diatur ke TRUE, anggota ini selalu tetap TRUE (misalnya, melepaskan kunci file pada objek file tidak mengatur ulang anggota ini ke FALSE).

DeletePending

Anggota baca-saja. Jika TRUE, operasi penghapusan untuk file yang terkait dengan objek file ada. Jika FALSE, saat ini tidak ada operasi penghapusan yang tertunda untuk objek file.

ReadAccess

Anggota baca-saja. Jika TRUE, file yang terkait dengan objek file telah dibuka untuk akses baca. Jika FALSE, file telah dibuka tanpa akses baca. Informasi ini digunakan saat memeriksa dan/atau mengatur akses berbagi file.

WriteAccess

Anggota baca-saja. Jika TRUE, file yang terkait dengan objek file telah dibuka untuk akses tulis. Jika FALSE, file telah dibuka tanpa akses tulis. Informasi ini digunakan saat memeriksa dan/atau mengatur akses berbagi file.

DeleteAccess

Anggota baca-saja. Jika TRUE, file yang terkait dengan objek file telah dibuka untuk akses penghapusan. Jika FALSE, file telah dibuka tanpa menghapus akses. Informasi ini digunakan saat memeriksa dan/atau mengatur akses berbagi file.

SharedRead

Anggota baca-saja. Jika TRUE, file yang terkait dengan objek file telah dibuka untuk akses berbagi baca. Jika FALSE, file telah dibuka tanpa membaca akses berbagi. Informasi ini digunakan saat memeriksa dan/atau mengatur akses berbagi file.

SharedWrite

Anggota baca-saja. Jika TRUE, file yang terkait dengan objek file telah dibuka untuk akses berbagi tulis. Jika FALSE, file telah dibuka tanpa akses berbagi tulis. Informasi ini digunakan saat memeriksa dan/atau mengatur akses berbagi file.

SharedDelete

Anggota baca-saja. Jika TRUE, file yang terkait dengan objek file telah dibuka untuk menghapus akses berbagi. Jika FALSE, file telah dibuka tanpa menghapus akses berbagi. Informasi ini digunakan saat memeriksa dan/atau mengatur akses berbagi file.

Flags

Anggota baca-saja yang digunakan oleh sistem untuk menahan satu atau beberapa (kombinasi OR inklusif bit) dari nilai bendera privat berikut.

Bendera Makna
FO_FILE_OPEN Dihentikan.
FO_SYNCHRONOUS_IO Objek file dibuka untuk I/O sinkron.
FO_ALERTABLE_IO Setiap tunggu di manajer I/O, sebagai akibat dari permintaan yang dibuat untuk objek file ini, dapat diperingatkan.
FO_NO_INTERMEDIATE_BUFFERING File yang terkait dengan objek file tidak dapat di-cache atau di-buffer dalam buffer internal driver.
FO_WRITE_THROUGH Layanan sistem, driver sistem file, dan driver yang menulis data ke file harus mentransfer data ke dalam file sebelum operasi tulis yang diminta dianggap selesai.
FO_SEQUENTIAL_ONLY File yang terkait dengan objek file dibuka hanya untuk operasi I/O berurutan.
FO_CACHE_SUPPORTED File yang terkait dengan objek file dapat di-cache. Bendera ini harus diatur hanya oleh driver sistem file, dan hanya jika anggota FsContext menunjuk ke struktur FSRTL_ADVANCED_FCB_HEADER yang valid.
FO_NAMED_PIPE Objek file mewakili pipa bernama.
FO_STREAM_FILE Objek file mewakili aliran file.
FO_MAILSLOT Objek file mewakili mailslot.
FO_GENERATE_AUDIT_ON_CLOSE Dihentikan.
FO_QUEUE_IRP_TO_THREAD IRP tidak akan diantrekan ke objek file ini.
FO_DIRECT_DEVICE_OPEN Perangkat yang ditargetkan oleh objek file ini dibuka secara langsung.
FO_FILE_MODIFIED File yang terkait dengan objek file telah dimodifikasi.
FO_FILE_SIZE_CHANGED Ukuran file yang terkait dengan objek file telah berubah.
FO_CLEANUP_COMPLETE Sistem file telah menyelesaikan pembersihannya untuk obyek berkas ini.
FO_TEMPORARY_FILE File yang terkait dengan objek file adalah file sementara.
FO_DELETE_ON_CLOSE File yang terkait dengan objek file akan dihapus oleh sistem file setelah ditutup.
FO_OPENED_CASE_SENSITIVE Kasus nama file dari file yang terkait dengan objek file dihormati.
FO_HANDLE_CREATED Handel file dibuat untuk objek file.
FO_FILE_FAST_IO_READ Pembacaan I/O cepat dilakukan pada objek file ini.
FO_RANDOM_ACCESS File yang terkait dengan objek file dibuka untuk akses acak.
FO_FILE_OPEN_CANCELLED Permintaan buat untuk objek file ini dibatalkan sebelum selesai.
FO_VOLUME_OPEN Objek file mewakili permintaan buka volume.
FO_REMOTE_ORIGIN Permintaan buat untuk file yang terkait dengan objek file yang berasal dari komputer jarak jauh.
FO_SKIP_COMPLETION_PORT Untuk objek file yang terkait dengan port, menentukan apakah sistem harus melewati antrean ke port penyelesaian ketika IRP selesai secara sinkron dengan nilai pengembalian status non-kesalahan.
FO_SKIP_SET_EVENT Lewati pengaturan peristiwa untuk objek file setelah penyelesaian IRP.
FO_SKIP_SET_FAST_IO Lewati pengaturan peristiwa yang disediakan ke layanan sistem ketika jalur I/O cepat berhasil.

FileName

Struktur UNICODE_STRING yang anggota Buffer-nya menunjuk ke string Unicode baca-saja yang menyimpan nama file yang dibuka pada volume. Jika volume sedang dibuka, anggota Panjang struktur UNICODE_STRING akan menjadi nol. Perhatikan bahwa nama file dalam string ini hanya valid selama pemrosesan awal permintaan IRP_MJ_CREATE . Nama file ini tidak boleh dianggap valid setelah sistem file mulai memproses permintaan IRP_MJ_CREATE . Penyimpanan untuk string yang diacu oleh anggota Buffer dari struktur UNICODE_STRING dialokasikan dalam memori sistem halaman. Untuk informasi selengkapnya tentang mendapatkan nama file, lihat FltGetFileNameInformation.

CurrentByteOffset

Anggota baca-saja yang menentukan offset file, dalam byte, yang terkait dengan objek file.

Waiters

Anggota baca-saja yang digunakan oleh sistem untuk menghitung jumlah pelayan yang beredar pada objek file yang dibuka untuk akses sinkron.

Busy

Anggota baca-saja yang digunakan oleh sistem untuk menunjukkan apakah objek file yang dibuka untuk akses sinkron saat ini sibuk.

LastLock

Penunjuk buram ke kunci terakhir yang diterapkan ke objek file.

Lock

Anggota buram yang digunakan oleh sistem untuk menahan kunci peristiwa objek file. Kunci peristiwa digunakan untuk mengontrol akses sinkron ke objek file. Hanya berlaku untuk objek file yang dibuka untuk akses sinkron.

Event

Anggota buram yang digunakan oleh sistem untuk menyimpan objek peristiwa untuk objek file. Objek peristiwa digunakan untuk memberi sinyal penyelesaian permintaan I/O pada objek file jika tidak ada peristiwa pengguna yang disediakan atau API sinkron dipanggil.

CompletionContext

Penunjuk buram ke informasi port penyelesaian (penunjuk port dan kunci) yang terkait dengan objek file, jika ada.

IrpListLock

Pointer buram ke struktur KSPIN_LOCK yang berfungsi sebagai kunci putaran yang digunakan untuk menyinkronkan akses ke daftar IRP objek file.

IrpList

Penunjuk buram ke kepala daftar IRP yang terkait dengan objek file.

FileObjectExtension

Penunjuk buram ke struktur ekstensi objek file objek file (FOBX). Struktur FOBX berisi berbagai konteks buram yang digunakan secara internal serta konteks objek per file yang tersedia melalui rutinitas FsRtlXxx .

Keterangan

Driver dapat menggunakan anggota FsContext dan FsContext2 untuk mempertahankan status yang ditentukan driver tentang objek file terbuka. Driver tidak dapat menggunakan anggota ini kecuali objek file dapat diakses di lokasi tumpukan I/O driver dari IRP.

Semua anggota yang tersisa dalam objek file buram atau baca-saja:

  • Anggota buram dalam objek file harus dianggap tidak dapat diakses. Driver dengan dependensi pada lokasi bidang objek atau akses ke anggota buram mungkin tidak tetap portabel dan dapat dioperasikan dengan driver lain dari waktu ke waktu.

  • Driver dapat menggunakan anggota baca-saja untuk memperoleh informasi yang relevan tetapi tidak boleh memodifikasi anggota baca-saja dan, jika pointer, objek yang dirujuk anggota.

Selama pemrosesan permintaan IRP_MJ_CREATE , driver sistem file memanggil rutinitas IoSetShareAccess (jika klien adalah yang pertama membuka file) atau rutinitas IoCheckShareAccess (untuk klien berikutnya yang ingin berbagi file). IoSetShareAccess dan IoCheckShareAccess memperbarui anggota ReadAccess, WriteAccess, dan DeleteAccess untuk menunjukkan hak akses yang diberikan kepada klien jika klien memiliki akses eksklusif ke file. Selain itu, IoCheckShareAccess memperbarui anggota SharedRead, SharedWrite, dan SharedDelete untuk menunjukkan hak akses yang secara bersamaan diberikan kepada dua klien atau lebih yang berbagi file. Jika driver untuk perangkat selain sistem file harus memantau hak akses klien, driver ini biasanya menyimpan informasi hak akses dalam buffer konteks yang ditujukan oleh anggota FsContext dan FsContext2 .

Jenis objek (misalnya, file, direktori, atau volume) yang diwakili objek file tertentu tidak dapat ditentukan dengan hanya memeriksa konten struktur objek file. Untuk informasi tentang cara menentukan jenis objek yang diwakili objek file, lihat ZwQueryInformationFile.

Common Log File System (CLFS) menggunakan struktur LOG_FILE_OBJECT untuk mewakili log. Fungsi ClfsCreateLogFile mengembalikan pointer ke struktur LOG_FILE_OBJECT , yang kemudian diteruskan klien ke fungsi CLFS lainnya.

Klien CLFS tidak secara langsung mengakses anggota struktur LOG_FILE_OBJECT .

typedef FILE_OBJECT LOG_FILE_OBJECT, *PLOG_FILE_OBJECT, **PPLOG_FILE_OBJECT;

Persyaratan

Persyaratan Nilai
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)

Lihat juga

DEVICE_OBJECT

FOBX

FSRTL_ADVANCED_FCB_HEADER

IRP_MJ_CREATE

IoCheckShareAccess

IoGetDeviceObjectPointer

IoSetShareAccess

ObDereferenceObject

ZwQueryInformationFile