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