警告
UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的UMDF驅動程式都應該使用UMDF 2撰寫。 未將新功能新增至 UMDF 1,而且較新版本的 Windows 10 上對 UMDF 1 的支援有限。 通用 Windows 驅動程式必須使用 UMDF 2。
封存的 UMDF 1 範例可在 Windows 11 版本 22H2 - 2022 年 5 月驅動程式範例更新中找到。
如需詳細資訊,請參閱 開始使用UMDF。
從UMDF 1.11版開始,架構會提供一組常式來存取記憶體空間和I/O埠空間中的暫存器。 UMDF 快取程式/埠存取例程與內核模式驅動程式所使用的 HAL 例程非常類似。 在驅動程式完成暫存器對應後,如 在 UMDF 驅動程式中尋找和對應硬體資源中所述,驅動程式會使用 READ/WRITE_REGISTER_Xxx 例程來讀取和寫入個別暫存器。 針對 I/O 連接埠,驅動程式會呼叫 READ/WRITE_PORT_Xxx 例程。
此範例示範如何寫入記憶體對應暫存器。
VOID
CMyQueue::WriteToDevice(
__in IWDFDevice3* pWdfDevice,
__in UCHAR Value
)
{
//
// Write the UCHAR value at offset 2 from register base
//
WRITE_REGISTER_UCHAR(pWdfDevice,
(m_MyDevice->m_RegBase)+2,
Value);
}
根據預設,UMDF 會在內部使用系統呼叫來存取對應到記憶體空間或 I/O 埠空間的暫存器。 I/O 埠空間中的寄存器始終透過系統呼叫進行存取。 不過,存取記憶體對應緩存器時,UMDF 驅動程式可能會藉由將 INF 指示詞 UmdfRegisterAccessMode 設定為 RegisterAccessUsingUserModeMapping,讓架構將記憶體對應緩存器對應至使用者模式地址空間。 某些驅動程式可能需要基於效能考慮來執行此動作。 如需 UMDF INF 指示詞的完整清單,請參閱 在 INF 檔案中指定 WDF 指示詞。
驅動程式應該使用 READ/WRITE_REGISTER_Xxx 例程,即使它已將緩存器對應到使用者模式也一樣。 這些例程會驗證驅動程式輸入,並確保驅動程式不會要求存取無效的位置。 驅動程式很少需要直接存取使用者模式對應的緩存器,而不需使用這些例程。 若要這樣做,驅動程式會在對應的基礎位址上呼叫 IWDFDevice3::GetHardwareRegisterMappedAddress,以擷取使用者模式的對應位址。 因為 UMDF 不會驗證以這種方式執行的讀取和寫入存取,因此不建議使用這項技術進行註冊存取。