Uzyskiwanie dostępu do przestrzeni konfiguracji urządzenia PCI
Niektóre operacje na urządzeniu połączonym ze składnikiem peryferyjnym (PCI) są zarezerwowane dla sterownika funkcji urządzenia. Takie operacje obejmują na przykład dostęp do przestrzeni konfiguracji specyficznej dla urządzenia magistrali i programowanie bezpośredniego kontrolera dostępu do pamięci (DMA). Firma Microsoft zapewnia obsługę systemu na potrzeby uzyskiwania dostępu do przestrzeni konfiguracji urządzeń PCI za pomocą dwóch metod:
Interfejs magistrali BUS_INTERFACE_STANDARD
Pakiety żądań we/wy konfiguracji (IRP), IRP_MN_READ_CONFIG i IRP_MN_WRITE_CONFIG
Notatka
Począwszy od systemu Windows 10 w wersji 2004, jeśli urządzenie ma tabelę SECURE Devices (SDEV) ACPI i zabezpieczenia oparte na wirtualizacji, ograniczenia są nakładane na nieobsługiwane metody uzyskiwania dostępu do przestrzeni konfiguracji urządzenia PCI. Jeśli sterownik lub proces próbuje odczytać lub manipulować miejscem konfiguracji urządzenia PCI przy użyciu metody, która nie jest wymieniona powyżej, dostęp zostanie zablokowany i spowoduje sprawdzenie błędów systemowych.
Systemy operacyjne Windows XP i Windows Server 2003 i nowsze mają wyłączną kontrolę nad nagłówkiem obszaru konfiguracji zgodnie z definicją specyfikacji magistrali lokalnej PCI , a także wszystkimi możliwościami w liście połączonych możliwości. Kierowcy nie mogą próbować modyfikować tych rejestrów.
Jednak sterowniki mogą zapisywać w przestrzeni konfiguracji, która nie należy do nagłówka lub listy możliwości zdefiniowanych przez dostawcę, przy użyciu żądania IRP_MN_WRITE_CONFIG lub metody SetBusData BUS_INTERFACE_STANDARD. Sterowniki mogą również odczytywać możliwości urządzenia przy użyciu żądania IRP_MN_READ_CONFIG lub metody GetBusData BUS_INTERFACE_STANDARD. Aby użyć IRP_MN_READ_CONFIG lub IRP_MN_WRITE_CONFIG, sterowniki muszą być uruchomione na poziomie PASSIVE_LEVEL. Aby zapoznać się z listą możliwości i odpowiednimi strukturami, dla których sterowniki mogą wykonywać zapytania, zobacz sekcję PCI Structures.
Sterowniki mogą odczytywać z rozszerzonej przestrzeni konfiguracji urządzenia PCI (czyli więcej niż 256 bajtów danych konfiguracji) przy użyciu żądania IRP_MN_READ_CONFIG lub metody GetBusData BUS_INTERFACE_STANDARD. Podobnie, sterowniki mogą zapisywać w rozszerzonej przestrzeni konfiguracji urządzenia PCI, używając żądania IRP_MN_WRITE_CONFIG lub metody SetBusData standardu BUS_INTERFACE_STANDARD. Jeśli urządzenie nie ma rozszerzonej przestrzeni konfiguracji lub platforma nie definiuje ścieżki dla rozszerzonego miejsca konfiguracji na urządzeniu, żądania odczytu będą zwracać 0xFFFF, a żądania zapisu nie będą miały żadnego wpływu. Aby określić, czy operacja zakończyła się pomyślnie, sterowniki mogą zbadać liczbę bajtów odczytanych lub zapisanych.
Pci Express i tryb PCI-X 2 obsługują rozszerzoną przestrzeń konfiguracji urządzenia PCI większą niż 256 bajtów. Sterowniki mogą odczytywać i zapisywać w tej przestrzeni konfiguracyjnej, ale tylko z odpowiednim wsparciem sprzętowym i BIOS. W systemie BIOS ACPI magistrala główna musi mieć identyfikator PNP PNP0A08 lub PNP0A03. W przypadku magistrali głównych z identyfikatorem PNP PNP0A03 metoda _DSM z funkcją 4 powinna wskazywać, że bieżący tryb jest w trybie PCI-X, tryb 2. Wszystkie mostki i urządzenia powinny być PCI Express lub działać w trybie PCI-X 2.
Ponadto system powinien obsługiwać dostęp do przestrzeni konfiguracji mapowanej w pamięci. Jest to definiowanie tabeli MCFG w systemie BIOS/firmware.
Ostrzeżenie
HalGetBusDataByOffset i HalSetBusDataByOffset są udostępniane dla zachowania zgodności wstecznej, ale powinny być używane tylko wtedy, gdy zastosowanie powyższych dwóch metod nie jest możliwe.