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
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