struktur DEVICE_OBJECT (wdm.h)
Struktur DEVICE_OBJECT digunakan oleh sistem operasi untuk mewakili objek perangkat. Objek perangkat mewakili perangkat logis, virtual, atau fisik yang drivernya menangani permintaan I/O.
Sintaks
typedef struct _DEVICE_OBJECT {
CSHORT Type;
USHORT Size;
LONG ReferenceCount;
struct _DRIVER_OBJECT *DriverObject;
struct _DEVICE_OBJECT *NextDevice;
struct _DEVICE_OBJECT *AttachedDevice;
struct _IRP *CurrentIrp;
PIO_TIMER Timer;
ULONG Flags;
ULONG Characteristics;
__volatile PVPB Vpb;
PVOID DeviceExtension;
DEVICE_TYPE DeviceType;
CCHAR StackSize;
union {
LIST_ENTRY ListEntry;
WAIT_CONTEXT_BLOCK Wcb;
} Queue;
ULONG AlignmentRequirement;
KDEVICE_QUEUE DeviceQueue;
KDPC Dpc;
ULONG ActiveThreadCount;
PSECURITY_DESCRIPTOR SecurityDescriptor;
KEVENT DeviceLock;
USHORT SectorSize;
USHORT Spare1;
struct _DEVOBJ_EXTENSION *DeviceObjectExtension;
PVOID Reserved;
} DEVICE_OBJECT, *PDEVICE_OBJECT;
Anggota
Type
Digunakan oleh sistem operasi untuk menunjukkan bahwa objek adalah objek perangkat. Untuk objek perangkat, nilai anggota ini adalah 3. Ini adalah anggota baca-saja.
Size
Menentukan ukuran, dalam byte, dari objek perangkat. Ukuran ini mencakup ekstensi perangkat yang ditentukan driver yang ditujukkan oleh anggota DeviceExtension , tetapi tidak termasuk ekstensi objek perangkat buram yang ditujukkan oleh anggota DeviceObjectExtension . Ukuran adalah anggota baca-saja.
ReferenceCount
Digunakan oleh manajer I/O untuk melacak jumlah handel terbuka untuk perangkat yang terkait dengan objek perangkat. Ini memungkinkan manajer I/O untuk menghindari pembongkaran driver ketika ada handel yang luar biasa untuk perangkat driver. Ini adalah anggota baca-saja.
DriverObject
Penunjuk ke objek driver (DRIVER_OBJECT), yang mewakili gambar driver yang dimuat yang dimasukkan ke rutinitas DriverEntry dan AddDevice . Anggota ini ditetapkan oleh manajer I/O setelah panggilan berhasil ke IoCreateDevice atau IoCreateDeviceSecure. Ini adalah anggota baca-saja.
NextDevice
Penunjuk ke objek perangkat berikutnya, jika ada, yang dibuat oleh driver yang sama. Manajer I/O memperbarui daftar ini di setiap panggilan yang berhasil ke IoCreateDevice atau IoCreateDeviceSecure.
Driver non-Plug and Play (PnP) yang sedang dibongkar harus melintasi ("berjalan") daftar objek perangkatnya dan menghapusnya. Driver PnP tidak harus memandu daftar objek perangkat ini. Sebagai gantinya, driver PnP melakukan pembersihan selama operasi PnP penghapusan perangkat (IRP_MN_REMOVE_DEVICE).
Driver yang membuat ulang objek perangkatnya secara dinamis juga menggunakan anggota ini. Ini adalah anggota baca/tulis.
AttachedDevice
Penunjuk ke objek perangkat yang terpasang. Jika tidak ada objek perangkat terlampir, anggota ini ADALAH NULL. Objek perangkat yang diacu oleh anggota AttachedDevice biasanya adalah objek perangkat driver filter, yang mencegat permintaan I/O yang awalnya ditargetkan ke perangkat yang diwakili oleh objek perangkat. Untuk informasi selengkapnya, lihat topik IoAttachDevice dan IoAttachDeviceByPointer . Ini adalah anggota buram.
CurrentIrp
Penunjuk ke IRP saat ini jika driver memiliki rutinitas StartIo yang titik masuknya diatur dalam objek driver dan jika driver saat ini memproses IRP. Jika tidak, anggota ini NULL. Untuk informasi selengkapnya, lihat topik IoStartPacket dan IoStartNextPacket . Ini adalah anggota baca-saja.
Timer
Penunjuk ke objek timer. Ini memungkinkan manajer I/O untuk memanggil rutinitas timer yang disediakan driver setiap detik. Untuk informasi selengkapnya, lihat IoInitializeTimer. Ini adalah anggota baca/tulis.
Flags
Driver perangkat melakukan operasi bitwise OR dengan anggota ini di objek perangkat yang baru dibuat dengan menggunakan satu atau beberapa nilai yang ditentukan sistem berikut.
Untuk informasi selengkapnya tentang cara mengatur anggota Bendera , lihat Menginisialisasi Objek Perangkat.
Nilai | Makna |
---|---|
DO_VERIFY_VOLUME (0x00000002) | Driver media yang dapat dilepas mengatur bendera ini saat mereka memproses permintaan transfer. Driver tersebut juga harus memeriksa bendera ini di target untuk permintaan transfer sebelum mereka mentransfer data apa pun. Untuk informasi selengkapnya, lihat topik Mendukung Media yang Dapat Dilepas . |
DO_BUFFERED_IO (0x00000004) | Menentukan jenis buffering yang digunakan oleh manajer I/O untuk permintaan I/O yang dikirim ke tumpukan perangkat. Driver tingkat lebih tinggi ATAU anggota ini dengan nilai yang sama dengan driver berikutnya yang lebih rendah di tumpukan, kecuali mungkin untuk driver tingkat tertinggi. |
DO_EXCLUSIVE (0x00000008) | Menunjukkan bahwa layanan driver perangkat eksklusif, seperti video, serial, paralel, atau perangkat suara. Driver WDM tidak boleh mengatur bendera ini. Untuk informasi selengkapnya, lihat topik Menentukan Akses Eksklusif ke Objek Perangkat . |
DO_DIRECT_IO (0x00000010) | Lihat DO_BUFFERED_IO. |
DO_MAP_IO_BUFFER (0x00000020) | Bendera ini tidak lagi digunakan. Driver tidak boleh mengatur bendera ini. |
DO_DEVICE_INITIALIZING (0x00000080) | Manajer I/O mengatur bendera ini saat membuat objek perangkat. Driver fungsi perangkat atau driver filter menghapus bendera dalam rutinitas AddDevice-nya , setelah itu: (1) Melampirkan objek perangkat ke tumpukan perangkat. (2) Menetapkan status daya perangkat. (3) Melakukan operasi bitwise OR pada anggota dengan salah satu bendera daya (jika perlu). Manajer Plug and Play (PnP) memeriksa bahwa bendera jelas setelah rutinitas AddDevice kembali. |
DO_SHUTDOWN_REGISTERED (0x00000800) | Digunakan oleh manajer I/O untuk menunjukkan bahwa driver telah mendaftarkan objek perangkat untuk pemberitahuan matikan. Bendera ini tidak boleh digunakan oleh driver. |
DO_BUS_ENUMERATED_DEVICE (0x00001000) | Sistem operasi menetapkan bendera ini di setiap objek perangkat fisik (PDO). Driver tidak boleh mengubah bendera ini. |
DO_POWER_PAGABLE (0x00002000) | Driver yang dapat di-pageable yang kompatibel dengan Microsoft Windows 2000 dan versi Windows yang lebih baru, bukan bagian dari jalur halaman, dan tidak memerlukan inrush saat ini harus mengatur bendera ini. Sistem memanggil driver tersebut di IRQL = PASSIVE_LEVEL. Driver tidak dapat mengatur bendera ini dan DO_POWER_INRUSH. Semua driver untuk WDM, Microsoft Windows 98, dan Windows Millennium Edition harus diatur DO_POWER_PAGABLE. |
DO_POWER_INRUSH (0x00004000) | Driver perangkat yang memerlukan inrush saat ini ketika perangkat dinyalakan harus mengatur bendera ini. Driver tidak dapat mengatur bendera ini dan DO_POWER_PAGABLE. |
DO_DEVICE_TO_BE_RESET (0x04000000) | Manajer I/O menetapkan bendera ini sebagai sinyal bagi pengemudi bus untuk mengatur ulang perangkat. Driver lain tidak boleh menggunakan bendera ini. |
DO_DAX_VOLUME (0x10000000) | Menunjukkan bahwa volume adalah volume DAX. |
Characteristics
Menentukan satu atau beberapa konstanta yang ditentukan sistem, dikombinasikan dengan operasi OR bitwise, yang memberikan informasi tambahan tentang perangkat driver. Konstanta ini mencakup hal-hal berikut:
Nilai | Makna |
---|---|
FILE_AUTOGENERATED_DEVICE_NAME | Mengarahkan manajer I/O untuk menghasilkan nama untuk perangkat, alih-alih pemanggil yang menentukan DeviceName saat memanggil rutinitas ini. Manajer I/O memastikan bahwa namanya unik. Karakteristik ini biasanya ditentukan oleh driver bus PnP untuk menghasilkan nama untuk objek perangkat fisik (PDO) untuk perangkat anak pada bus yang sama. |
FILE_CHARACTERISTIC_PNP_DEVICE | Menunjukkan bahwa objek perangkat adalah bagian dari tumpukan Plug and Play (PnP). Karakteristik ini diperlukan jika pengemudi bus (atau sopir filter bus) mendaftarkan dukungan WMI untuk objek perangkat yang belum menerima permintaan IRP_MN_START_DEVICE . FILE_CHARACTERISTIC_PNP_DEVICE juga diperlukan jika fungsi atau driver filter mendaftar untuk WMI sebelum melampirkan ke tumpukan perangkatnya. |
FILE_CHARACTERISTIC_TS_DEVICE | Menunjukkan bahwa objek perangkat adalah bagian dari tumpukan perangkat Layanan Terminal. Driver tidak boleh mengatur karakteristik ini. |
FILE_CHARACTERISTIC_WEBDAV_DEVICE | Menunjukkan bahwa sistem file Penulisan dan Penerapan Versi Terdistribusi (WebDAV) berbasis Web dipasang pada perangkat. Driver tidak boleh mengatur karakteristik ini. |
FILE_DEVICE_IS_MOUNTED | Menunjukkan bahwa sistem file dipasang pada perangkat. Driver tidak boleh mengatur karakteristik ini. |
FILE_DEVICE_SECURE_OPEN | Mengarahkan manajer I/O untuk menerapkan pendeskripsi keamanan objek perangkat ke relatif terbuka dan nama file berikutnya terbuka untuk perangkat. Untuk informasi selengkapnya, lihat topik Mengontrol Akses Namespace Perangkat . |
FILE_FLOPPY_DISKETTE | Menunjukkan bahwa perangkat adalah perangkat disket. |
FILE_READ_ONLY_DEVICE | Menunjukkan bahwa perangkat tidak dapat ditulis. |
FILE_REMOTE_DEVICE | Menunjukkan bahwa perangkat jarak jauh. |
FILE_REMOVABLE_MEDIA | Menunjukkan bahwa perangkat penyimpanan mendukung media yang dapat dilepas. Perhatikan bahwa karakteristik ini menunjukkan media yang dapat dilepas, bukan perangkat yang dapat dilepas. Misalnya, driver untuk perangkat drive JAZ harus menentukan karakteristik ini, tetapi driver untuk disk flash PCMCIA tidak boleh. |
FILE_VIRTUAL_VOLUME | Menunjukkan bahwa volumenya virtual. Driver tidak boleh mengatur karakteristik ini. |
FILE_WRITE_ONCE_MEDIA | Menunjukkan bahwa perangkat mendukung media write-once. Driver tidak mengatur anggota ini secara langsung. Untuk informasi selengkapnya tentang cara mengatur karakteristik perangkat, lihat topik Menentukan Karakteristik Perangkat . |
FILE_CHARACTERISTIC_CSV | Menunjukkan bahwa perangkat adalah Cluster Shared Volume (CSV). |
FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL | Manajer IO biasanya melakukan pemeriksaan keamanan penuh untuk akses melintasi pada setiap file yang terbuka ketika klien adalah kontainer aplikasi. Pengaturan bendera ini melewati pemeriksaan akses melintasi yang diberlakukan ini jika token klien sudah memiliki hak istimewa melintasi. |
FILE_PORTABLE_DEVICE | Menunjukkan bahwa tumpukan yang mendasar mempertimbangkan perangkat portabel. Ini digunakan oleh tumpukan penyimpanan dan berarti bahwa perangkat tidak berada dalam kontainer komputer lokal dan tidak pada jenis bus tetap. |
Vpb
Penunjuk ke blok parameter volume (VPB) yang terkait dengan objek perangkat. Untuk driver sistem file, VPB dapat menyediakan koneksi ke objek perangkat logis yang tidak disebutkan namanya yang mewakili instans volume yang dipasang. Ini adalah anggota buram.
DeviceExtension
Penunjuk ke ekstensi perangkat. Struktur dan isi ekstensi perangkat ditentukan driver. Ukurannya ditentukan driver, ditentukan dalam panggilan driver ke IoCreateDevice atau IoCreateDeviceSecure. Untuk informasi selengkapnya tentang ekstensi perangkat, lihat Ekstensi Perangkat. Ini adalah anggota baca-saja. Namun, objek yang dirujuk anggota dapat dimodifikasi oleh driver.
DeviceType
Diatur oleh IoCreateDevice dan IoCreateDeviceSecure menggunakan nilai yang ditentukan untuk parameter DeviceType rutin tersebut. Untuk informasi selengkapnya, lihat topik Menentukan Jenis Perangkat .
StackSize
Menentukan jumlah minimum lokasi tumpukan dalam RUN yang akan dikirim ke driver ini. IoCreateDevice dan IoCreateDeviceSecure mengatur anggota ini ke 1 di objek perangkat yang baru dibuat; Oleh karena itu, driver tingkat terendah dapat mengabaikan anggota ini. Manajer I/O secara otomatis mengatur anggota StackSize dalam objek perangkat driver tingkat yang lebih tinggi ke nilai yang sesuai jika driver memanggil IoAttachDevice atau IoAttachDeviceToDeviceStack. Hanya driver tingkat yang lebih tinggi yang merantai sendiri melalui driver lain dengan IoGetDeviceObjectPointer yang harus secara eksplisit mengatur nilai StackSize dalam objek perangkatnya sendiri ke 1 + nilai StackSize dari objek perangkat driver yang lebih rendah berikutnya.
Queue
Digunakan secara internal oleh manajer I/O untuk mengantre objek perangkat saat diperlukan. Ini adalah anggota buram.
Queue.ListEntry
Struktur LIST_ENTRY yang berisi penunjuk maju dan mundur untuk daftar yang ditautkan bergantian.
Queue.Wcb
Informasi konteks perangkat yang digunakan oleh manajer I/O.
AlignmentRequirement
Menentukan persyaratan penyelarasan alamat perangkat untuk transfer data. Nilai harus salah satu nilai FILE_XXX_ALIGNMENT yang ditentukan dalam Wdm.h. Untuk informasi selengkapnya, lihat topik Menginisialisasi Objek Perangkat, GetDmaAlignment, dan ZwQueryInformationFile .
DeviceQueue
Objek antrean perangkat untuk objek perangkat. Objek antrean perangkat berisi IRP apa pun yang menunggu untuk diproses oleh driver yang terkait dengan objek perangkat. Untuk informasi selengkapnya, lihat topik Antrean IRP yang Dikelola Driver . Ini adalah anggota buram.
Dpc
Objek panggilan prosedur yang ditangguhkan (DPC) untuk objek perangkat. Untuk informasi selengkapnya, lihat topik Pengantar Objek DPC . Ini adalah anggota buram.
ActiveThreadCount
Disiapkan untuk penggunaan masa mendatang. Ini adalah anggota buram.
SecurityDescriptor
Menentukan pendeskripsi keamanan (SECURITY_DESCRIPTOR) untuk objek perangkat saat objek perangkat dibuat. Jika anggota ini NULL, objek perangkat akan menerima pengaturan keamanan default. Ini adalah anggota baca-saja, meskipun anggota dapat dimodifikasi melalui fungsi ZwSetSecurityObject .
DeviceLock
Objek peristiwa sinkronisasi yang dialokasikan oleh manajer I/O. Manajer I/O mendapatkan objek peristiwanya sebelum mengirimkan permintaan mount atau mount-verify ke driver sistem file. Ini adalah anggota buram.
SectorSize
Jika objek perangkat tidak mewakili volume, anggota ini diatur ke nol. Jika objek perangkat mewakili volume, anggota ini menentukan ukuran sektor volume, dalam byte. Manajer I/O menggunakan anggota ini untuk memastikan bahwa semua operasi baca, operasi tulis, dan operasi posisi file yang dikeluarkan diselaraskan dengan benar ketika buffering perantara dinonaktifkan. Nilai byte-per-sektor sistem default digunakan ketika objek perangkat dibuat, namun, driver sistem file; dan lebih jarang, driver warisan dan minifilter, dapat memperbarui nilai ini yang didasarkan pada geometri perangkat keras volume yang mendasar ketika pemasangan terjadi. Driver lain tidak boleh mengubah anggota ini.
Spare1
Dicadangkan untuk penggunaan sistem. Ini adalah anggota buram.
DeviceObjectExtension
Penunjuk ke ekstensi objek perangkat yang digunakan oleh manajer I/O dan manajer PnP untuk menyimpan informasi tentang status perangkat. Ini adalah anggota buram.
Reserved
Dicadangkan untuk penggunaan sistem. Ini adalah anggota buram.
Keterangan
Sistem operasi mewakili perangkat berdasarkan objek perangkat. Untuk informasi selengkapnya, lihat topik Objek Perangkat dan Tumpukan Perangkat .
Driver membuat objek perangkat dengan menggunakan rutinitas IoCreateDevice dan IoCreateDeviceSecure . Untuk informasi selengkapnya tentang cara membuat objek perangkat, lihat Membuat Objek Perangkat.
Objek perangkat buram sebagian. Driver tidak mengatur anggota objek perangkat secara langsung, kecuali didokumentasikan lain. Untuk informasi selengkapnya tentang anggota yang dapat dimodifikasi driver secara langsung, lihat Menginisialisasi Objek Perangkat. Untuk informasi tentang properti objek perangkat lainnya, lihat Properti Objek Perangkat.
Anggota buram dalam objek perangkat harus dianggap tidak dapat diakses. Driver yang memiliki dependensi pada lokasi anggota objek atau akses ke anggota buram mungkin tidak tetap portabel dan dapat dioperasikan dengan driver lain dari waktu ke waktu.
Driver port video yang disediakan sistem mengatur bidang objek perangkat yang dibuatnya atas nama driver miniport video.
Driver port SCSI yang disediakan sistem mengatur bidang objek perangkat yang dibuatnya atas nama driver miniport SCSI.
Pustaka NDIS yang disediakan sistem menyiapkan bidang objek perangkat yang dibuatnya atas nama driver miniport NDIS.
Persyaratan
Persyaratan | Nilai |
---|---|
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h) |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk