struktur IO_RESOURCE_DESCRIPTOR (miniport.h)

Struktur IO_RESOURCE_DESCRIPTOR menjelaskan berbagai sumber daya perangkat keras mentah, dari satu jenis, yang dapat digunakan oleh perangkat. Array struktur IO_RESOURCE_DESCRIPTOR terkandung dalam setiap struktur IO_RESOURCE_LIST .

Sintaks

typedef struct _IO_RESOURCE_DESCRIPTOR {
  UCHAR  Option;
  UCHAR  Type;
  UCHAR  ShareDisposition;
  UCHAR  Spare1;
  USHORT Flags;
  USHORT Spare2;
  union {
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Port;
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory;
    struct {
      ULONG             MinimumVector;
      ULONG             MaximumVector;
#if ...
      IRQ_DEVICE_POLICY AffinityPolicy;
      USHORT            Group;
#else
      IRQ_DEVICE_POLICY AffinityPolicy;
#endif
      IRQ_PRIORITY      PriorityPolicy;
      KAFFINITY         TargetedProcessors;
    } Interrupt;
    struct {
      ULONG MinimumChannel;
      ULONG MaximumChannel;
    } Dma;
    struct {
      ULONG RequestLine;
      ULONG Reserved;
      ULONG Channel;
      ULONG TransferWidth;
    } DmaV3;
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Generic;
    struct {
      ULONG Data[3];
    } DevicePrivate;
    struct {
      ULONG Length;
      ULONG MinBusNumber;
      ULONG MaxBusNumber;
      ULONG Reserved;
    } BusNumber;
    struct {
      ULONG Priority;
      ULONG Reserved1;
      ULONG Reserved2;
    } ConfigData;
    struct {
      ULONG            Length40;
      ULONG            Alignment40;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory40;
    struct {
      ULONG            Length48;
      ULONG            Alignment48;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory48;
    struct {
      ULONG            Length64;
      ULONG            Alignment64;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory64;
    struct {
      UCHAR Class;
      UCHAR Type;
      UCHAR Reserved1;
      UCHAR Reserved2;
      ULONG IdLowPart;
      ULONG IdHighPart;
    } Connection;
  } u;
} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;

Anggota

Option

Menentukan apakah deskripsi sumber daya ini diperlukan, lebih disukai, atau alternatif. Salah satu nilai berikut harus digunakan:

Nilai Makna
0 Rentang sumber daya yang ditentukan diperlukan, kecuali rentang alternatif juga ditentukan.
IO_RESOURCE_PREFERRED Rentang sumber daya yang ditentukan lebih disukai dari rentang alternatif apa pun.
IO_RESOURCE_ALTERNATIVE Rentang sumber daya yang ditentukan adalah alternatif untuk rentang sebelumnya. Misalnya, jika satu struktur IO_RESOURCE_DESCRIPTOR menentukan IRQ 5, dengan set IO_RESOURCE_PREFERRED, dan struktur berikutnya menentukan IRQ 3, dengan IO_RESOURCE_ALTERNATIVE diatur, manajer PnP menetapkan IRQ 3 ke perangkat hanya jika IRQ 5 tidak tersedia. (Beberapa alternatif dapat ditentukan untuk setiap sumber daya. Baik IO_RESOURCE_ALTERNATIVE maupun IO_RESOURCE_PREFERRED dapat diatur, menunjukkan alternatif pilihan.)
IO_RESOURCE_DEFAULT Tidak digunakan.

Type

Mengidentifikasi jenis sumber daya. Untuk daftar nilai yang valid, lihat Tipe anggota struktur CM_PARTIAL_RESOURCE_DESCRIPTOR .

ShareDisposition

Menunjukkan apakah sumber daya yang dijelaskan dapat dibagikan. Untuk daftar nilai yang valid, lihat anggota ShareDisposition dari struktur CM_PARTIAL_RESOURCE_DESCRIPTOR .

Spare1

Tidak digunakan.

Flags

Berisi bendera bit yang khusus untuk jenis sumber daya. Tabel berikut ini memperlihatkan bendera yang valid jika Type = CmResourceTypeInterrupt.

Nilai Makna
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE Garis IRQ dipicu tingkat. (IRQ ini biasanya dapat dibagi.)
CM_RESOURCE_INTERRUPT_LATCHED Garis IRQ dipicu tepi.
CM_RESOURCE_INTERRUPT_MESSAGE Jika bendera ini diatur, interupsi adalah interupsi bertanda pesan. Jika tidak, interupsi adalah interupsi berbasis garis.
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED Jika bendera ini diatur, anggota u.Interrupt menyertakan data yang menjelaskan kebijakan interupsi perangkat.
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT Interupsinya adalah interupsi sekunder. Untuk informasi selengkapnya tentang gangguan sekunder, lihat Gangguan GPIO.
CM_RESOURCE_INTERRUPT_WAKE_HINT Gangguan ini mampu membangunkan sistem operasi dari keadaan diam berdaya rendah atau status tidur sistem. Untuk informasi selengkapnya tentang kemampuan bangun, lihat Mengaktifkan Wake-Up Perangkat.

Untuk daftar bendera yang valid untuk jenis sumber daya lainnya, lihat deskripsi anggota Bendera dari struktur CM_PARTIAL_RESOURCE_DESCRIPTOR .

Spare2

Tidak digunakan.

u

Mendefinisikan u union.

u.Port

Menentukan rentang alamat port I/O, menggunakan anggota berikut.

Driver harus menggunakan RtlIoDecodeMemIoResource dan RtlIoEncodeMemIoResource untuk membaca dan memperbarui anggota ini, daripada memperbaruinya secara langsung.

u.Port.Length

Panjangnya, dalam byte, dari rentang alamat port I/O yang dapat ditetapkan.

u.Port.Alignment

Perataan, dalam byte, yang harus dipatuhi oleh alamat awal yang ditetapkan. Alamat awal yang ditetapkan harus berupa kelipatan bilangan bulat Perataan.

u.Port.MinimumAddress

Alamat port I/O relatif bus minimum yang dapat ditetapkan ke perangkat.

u.Port.MaximumAddress

Alamat port I/O relatif bus maksimum yang dapat ditetapkan ke perangkat.

u.Memory

Menentukan rentang alamat memori, menggunakan anggota berikut:

Driver harus menggunakan RtlIoDecodeMemIoResource dan RtlIoEncodeMemIoResource untuk membaca dan memperbarui anggota ini, daripada memperbaruinya secara langsung.

u.Memory.Length

Panjangnya, dalam byte, dari rentang alamat memori yang dapat ditetapkan.

u.Memory.Alignment

Perataan, dalam byte, yang harus dipatuhi oleh alamat awal yang ditetapkan. Alamat awal yang ditetapkan harus berupa kelipatan bilangan bulat Perataan.

u.Memory.MinimumAddress

Alamat memori relatif bus minimum yang dapat ditetapkan ke perangkat.

u.Memory.MaximumAddress

Alamat memori relatif bus maksimum yang dapat ditetapkan ke perangkat.

u.Interrupt

Menentukan rentang vektor interupsi, menggunakan anggota berikut:

u.Interrupt.MinimumVector

Vektor relatif bus minimum yang dapat ditetapkan ke perangkat.

u.Interrupt.MaximumVector

Vektor relatif bus maksimum yang dapat ditetapkan ke perangkat.

Jika bit bendera CM_RESOURCE_INTERRUPT_MESSAGE diatur, nilai anggota MinimumVector dan MaximumVector memiliki arti khusus. Untuk informasi selengkapnya, lihat Menggunakan Deskriptor Sumber Daya Interupsi.

u.Interrupt.AffinityPolicy

Menentukan nilai IRQ_DEVICE_POLICY yang menunjukkan bagaimana sistem harus mendistribusikan gangguan perangkat antar prosesor.

Menentukan nilai IRQ_DEVICE_POLICY yang menunjukkan bagaimana sistem harus mendistribusikan gangguan perangkat antar prosesor.

u.Interrupt.Group

Menentukan nomor grup prosesor. Grup adalah anggota u.Interuppt (tetapi opsional) yang valid. Anggota ini hanya ada jika NT_PROCESSOR_GROUPS ditentukan pada waktu kompilasi. Jika anggota Grup ada, anggota Grup dan TargetedProcessors bersama-sama menentukan afinitas grup yang mengidentifikasi kumpulan prosesor yang harus menangani gangguan perangkat. Untuk menentukan afinitas untuk grup tertentu, atur AffinityPolicy ke IrqPolicySpecifiedProcessors dan atur Grup ke nomor grup yang sesuai. Selain itu, TargetedProcessors harus menentukan prosesor target dalam grup. Jika Anda mengatur AffinityPolicy ke nilai selain IrqPolicySpecifiedProcessors, atur Grup ke ALL_PROCESSOR_GROUPS untuk menunjukkan bahwa driver sadar grup (yaitu, dirancang untuk menangani informasi tentang grup prosesor). Driver tidak dapat menentukan prosesor target jika Grup sama dengan ALL_PROCESSOR_GROUPS; spesifikasi target tersebut diabaikan.

u.Interrupt.PriorityPolicy

Menentukan nilai IRQ_PRIORITY yang menunjukkan prioritas sistem yang harus mengirimkan interupsi perangkat.

u.Interrupt.TargetedProcessors

Menentukan nilai KAFFINITY yang menunjukkan prosesor mana yang harus menangani gangguan perangkat. Nilai ini hanya digunakan jika AffinityPolicy adalah IrqPolicySpecifiedProcessors.

u.Dma

Menentukan pengaturan DMA, menggunakan salah satu anggota berikut:

u.Dma.MinimumChannel

Saluran DMA relatif bus minimum yang dapat ditetapkan ke perangkat.

u.Dma.MaximumChannel

Saluran DMA relatif bus maksimum yang dapat ditetapkan ke perangkat.

u.DmaV3

Menentukan pengaturan DMA untuk driver yang menggunakan versi 3 dari struktur DMA_OPERATIONS .

Anggota u.DmaV3 tersedia dimulai dengan Windows 8.

u.DmaV3.RequestLine

Jumlah baris permintaan pada pengontrol DMA sistem yang dialokasikan untuk perangkat.

u.DmaV3.Reserved

Tidak digunakan.

u.DmaV3.Channel

Jumlah saluran DMA pada pengontrol DMA sistem yang dialokasikan untuk perangkat.

u.DmaV3.TransferWidth

Menentukan lebar, dalam bit, dari bus data yang digunakan sistem pengontrol DMA ke perangkat untuk mentransfer data ke atau dari perangkat.

u.Generic

Tidak digunakan.

u.Generic.Length

Tidak digunakan.

u.Generic.Alignment

Tidak digunakan.

u.Generic.MinimumAddress

Tidak digunakan.

u.Generic.MaximumAddress

Tidak digunakan.

u.DevicePrivate

Dicadangkan untuk penggunaan sistem.

u.DevicePrivate.Data[3]

Dicadangkan untuk penggunaan sistem.

u.BusNumber

Menentukan nomor bus, menggunakan anggota berikut:

u.BusNumber.Length

Jumlah nomor bus yang diperlukan.

u.BusNumber.MinBusNumber

Nomor bus relatif bus minimum yang dapat ditetapkan ke perangkat.

u.BusNumber.MaxBusNumber

Nomor bus relatif bus maksimum yang dapat ditetapkan ke perangkat.

u.BusNumber.Reserved

Tidak digunakan.

u.ConfigData

Dicadangkan untuk penggunaan sistem.

u.ConfigData.Priority

Dicadangkan untuk penggunaan sistem.

u.ConfigData.Reserved1

Dicadangkan untuk penggunaan sistem.

u.ConfigData.Reserved2

Dicadangkan untuk penggunaan sistem.

u.Memory40

Menentukan rentang alamat memori, menggunakan anggota berikut.

Driver harus menggunakan RtlIoDecodeMemIoResource dan RtlIoEncodeMemIoResource untuk membaca dan memperbarui anggota ini, daripada memperbaruinya secara langsung.

u.Memory40.Length40

32 bit tinggi dengan panjang 40-bit, dalam byte, dari rentang alamat memori yang dapat ditetapkan. 8 bit yang lebih rendah diperlakukan sebagai nol.

u.Memory40.Alignment40

32 bit tinggi dari perataan 40-bit, dalam byte, yang harus dipatuhi oleh alamat awal yang ditetapkan. 8 bit yang lebih rendah diperlakukan sebagai nol. Alamat awal yang ditetapkan akan menjadi kelipatan perataan.

u.Memory40.MinimumAddress

Alamat memori relatif bus minimum yang dapat ditetapkan ke perangkat.

u.Memory40.MaximumAddress

Alamat memori relatif bus maksimum yang dapat ditetapkan ke perangkat.

u.Memory48

Menentukan rentang alamat memori, menggunakan anggota berikut.

Driver harus menggunakan RtlIoDecodeMemIoResource dan RtlIoEncodeMemIoResource untuk membaca dan memperbarui anggota ini, daripada memperbaruinya secara langsung.

u.Memory48.Length48

Panjang 32 bit tinggi dari panjang 48-bit, dalam byte, dari rentang alamat memori yang dapat ditetapkan. 16 bit yang lebih rendah diperlakukan sebagai nol.

u.Memory48.Alignment48

32 bit tinggi dari perataan 48-bit, dalam byte, yang harus dipatuhi oleh alamat awal yang ditetapkan. 16 bit yang lebih rendah diperlakukan sebagai nol. Alamat awal yang ditetapkan akan menjadi kelipatan perataan.

u.Memory48.MinimumAddress

Alamat memori relatif bus minimum yang dapat ditetapkan ke perangkat.

u.Memory48.MaximumAddress

Alamat memori relatif bus maksimum yang dapat ditetapkan ke perangkat.

u.Memory64

Menentukan rentang alamat memori, menggunakan anggota berikut.

Driver harus menggunakan RtlIoDecodeMemIoResource dan RtlIoEncodeMemIoResource untuk membaca dan memperbarui anggota ini, daripada memperbaruinya secara langsung.

u.Memory64.Length64

Panjang 32 bit tinggi dari panjang 64-bit, dalam byte, dari rentang alamat memori yang dapat ditetapkan. 32 bit yang lebih rendah diperlakukan sebagai nol.

u.Memory64.Alignment64

32 bit tinggi dari perataan 64-bit, dalam byte, yang harus dipatuhi oleh alamat awal yang ditetapkan. 32 bit yang lebih rendah diperlakukan sebagai nol. Alamat awal yang ditetapkan akan menjadi kelipatan perataan.

u.Memory64.MinimumAddress

Alamat memori relatif bus minimum yang dapat ditetapkan ke perangkat.

u.Memory64.MaximumAddress

Alamat memori relatif bus maksimum yang dapat ditetapkan ke perangkat.

u.Connection

Menentukan koneksi ke bus serial atau port serial, atau ke satu set atau beberapa pin I/O tujuan umum (GPIO).

Anggota u.Connection tersedia dimulai dengan Windows 8.

Anggota berikut menjelaskan koneksi ini.

u.Connection.Class

Kelas koneksi. Anggota ini diatur ke salah satu nilai berikut:

Nilai Makna
CM_RESOURCE_CONNECTION_CLASS_GPIO Akses perangkat melalui satu atau beberapa pin pada pengontrol GPIO.
CM_RESOURCE_CONNECTION_CLASS_SERIAL Akses perangkat melalui bus serial atau port serial.

u.Connection.Type

Jenis koneksi. Jika Kelas = CM_RESOURCE_CONNECTION_CLASS_GPIO, Jenis diatur ke nilai berikut:

Nilai Makna
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO Akses perangkat melalui pin GPIO yang dikonfigurasi untuk I/O.

Pin GPIO yang dikonfigurasi sebagai input permintaan interupsi diakses sebagai sumber daya interupsi biasa (CmResourceTypeInterrupt).

Jika Kelas = CM_RESOURCE_CONNECTION_CLASS_SERIAL, Jenis diatur ke salah satu nilai berikut:

Nilai Makna
CM_RESOURCE_CONNECTION_TYPE_SERIAL_I2C Perangkat terhubung ke bus I2C.
CM_RESOURCE_CONNECTION_TYPE_SERIAL_SPI Perangkat terhubung ke bus SPI.
CM_RESOURCE_CONNECTION_TYPE_SERIAL_UART Perangkat terhubung ke port serial.

u.Connection.Reserved1

Tidak digunakan.

u.Connection.Reserved2

Tidak digunakan.

u.Connection.IdLowPart

32 bit yang lebih rendah dari ID koneksi 64-bit.

u.Connection.IdHighPart

32 bit atas ID koneksi 64-bit.

Persyaratan

Persyaratan Nilai
Header miniport.h (termasuk Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)

Lihat juga

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt