Přístup ke konfiguračnímu prostoru zařízení PCI
Některé operace na zařízení pro propojení periferních komponent (PCI) jsou vyhrazené pro ovladač funkce zařízení. Mezi takové operace patří například přístup ke konfiguračnímu prostoru specifickému pro zařízení sběrnice a programování řadiče přímého přístupu do paměti (DMA). Microsoft poskytuje podporu systému pro přístup ke konfiguračnímu prostoru zařízení PCI dvěma způsoby:
Rozhraní sběrnice BUS_INTERFACE_STANDARD
Pakety požadavků na vstupně-výstupní operace konfigurace (IRP), IRP_MN_READ_CONFIG a IRP_MN_WRITE_CONFIG
Poznámka
Od Windows 10 verze 2004 platí, že pokud má zařízení tabulku SDEV (Secure Devices) ACPI a povolené zabezpečení založené na virtualizaci, omezení se umisťují na nepodporované metody pro přístup ke konfiguračnímu prostoru zařízení PCI. Pokud se ovladač nebo proces pokusí přečíst nebo manipulovat s místem konfigurace zařízení PCI pomocí metody, která není uvedená výše, bude přístup zablokovaný a způsobí kontrolu systémových chyb.
Operační systémy Windows XP a Windows Server 2003 a novější mají výhradní kontrolu nad hlavičkou konfiguračního prostoru definovanou specifikací PCI Local Bus a také všemi možnostmi v propojeném seznamu možností. Řidiči se nesmí pokoušet měnit tyto registry.
Ovladače však mohou zapisovat do konfiguračního prostoru, který nepatří do hlavičky nebo seznamu schopností definovaných dodavatelem, pomocí požadavku IRP_MN_WRITE_CONFIG nebo metody SetBusData metody BUS_INTERFACE_STANDARD. Ovladače můžou také číst funkce zařízení pomocí požadavku IRP_MN_READ_CONFIG nebo metody GetBusData BUS_INTERFACE_STANDARD. Pokud chcete použít IRP_MN_READ_CONFIG nebo IRP_MN_WRITE_CONFIG, musí být ovladače spuštěné na PASSIVE_LEVEL. Seznam funkcí a odpovídajících struktur, na které můžou ovladače dotazovat, najdete v části struktury PCI.
Ovladače mohou číst z rozšířeného konfiguračního prostoru zařízení PCI (tj. více než 256 bajtů konfiguračních dat) pomocí požadavku IRP_MN_READ_CONFIG nebo metody GetBusData BUS_INTERFACE_STANDARD. Ovladače můžou podobně zapisovat do rozšířeného konfiguračního prostoru zařízení PCI pomocí požadavku IRP_MN_WRITE_CONFIG nebo metody SetBusData BUS_INTERFACE_STANDARD. Pokud zařízení nemá rozšířený konfigurační prostor nebo platforma nedefinuje cestu pro rozšířený konfigurační prostor na zařízení, žádosti o čtení se vrátí 0xFFFF a požadavky na zápis nebudou mít žádný vliv. Pokud chcete zjistit, jestli operace proběhla úspěšně, můžou ovladače prozkoumat počet přečtených nebo zapsaných bajtů.
PCI Express a režim PCI-X 2 podporují rozšířený prostor konfigurace zařízení PCI větší než 256 bajtů. Ovladače mohou číst a zapisovat do tohoto konfiguračního prostoru, ale pouze s odpovídající podporou hardwaru a systému BIOS. V systému ACPI BIOS musí mít kořenová sběrnice ID PNP PNP0A08 nebo PNP0A03. U kořenových sběrnic s PNP ID PNP0A03 by metoda _DSM s funkcí 4 měla znamenat, že aktuální režim je PCI-X režim 2. Všechny mosty a zařízení by měly být buď PCI Express, nebo by měly fungovat v režimu PCI-X 2.
Kromě toho by systém měl podporovat přístupy ke konfiguračnímu prostoru mapovanému paměti. To je definováním tabulky MCFG v systémovém systému BIOS/firmwaru.
Varování
HalGetBusDataByOffset a HalSetBusDataByOffset jsou k dispozici pro zpětnou kompatibilitu, ale měly by být použity pouze v případě, že použití výše uvedených dvou metod není možné.