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 _IOP_FILE_OBJECT_EXTENSION *FileObjectExtension;
struct _IOP_FILE_OBJECT_EXTENSION;
} 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 .
_IOP_FILE_OBJECT_EXTENSION
Struktur _IOP_FILE_OBJECT_EXTENSION .
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) |