客戶問題經常追蹤到外部元件,例如執行下列動作的第三方 裝置安裝應用程式:
刪除重要的登錄機碼。
修改重要登錄機碼的訪問許可權。
在外部元件中發現的許多問題都是由於使用了 KEY_ALL_ACCESS 註冊表機碼存取許可權所造成的。 從 Windows Server 2003 開始, SetupDiCreateDevRegKey 只會授與KEY_READ和KEY_WRITE訪問許可權,而不是KEY_ALL_ACCESS。 從 Windows Vista 開始,會強制執行其他 KEY_ALL_ACCESS 限制。
請遵循下列指導方針,安全地存取登錄機碼:
只使用 SetupAPI、 Configuration Manager 函式和其他支援的裝置相關 API 來開啟裝置登錄機碼,特別是裝置 的硬體密鑰 和 軟體密鑰 。
這些函式可解決因訪問許可權限制而產生的常見問題。
登錄機碼的位置和格式可能會在不同的 Windows 版本之間變更。 請勿假設用於裝置和驅動程式安裝的位置、格式或登錄機碼或值的意義。
如需登錄機碼和樹狀架構的詳細資訊,請參閱 裝置和驅動程式的登錄樹狀架構和機碼。
請勿使用登錄直接存取或修改裝置的內部設定。
只要求每個工作所需的最小存取權限,例如:
KEY_SET_VALUE
KEY_CREATE_SUB_KEY
KEY_QUERY_VALUE
子鍵列舉權限
請勿直接存取登錄檔中的裝置設定類別金鑰。 如同任何登錄機碼,裝置安裝類別機碼的位置和名稱可能會在 Windows 版本之間變更。 如需如何正確存取裝置安裝類別密鑰的資訊,請參閱 開啟裝置安裝類別的登錄機碼
請勿直接在登錄中開啟裝置介面類別機碼。 如同任何登錄機碼,裝置介面類別機碼的位置和名稱可能會在 Windows 版本之間變更。
若要安全地開啟裝置介面類別密鑰,請使用 CM_Open_Class_Key 搭配 ulFlags 參數中的設定CM_OPEN_CLASS_KEY_INTERFACE,或使用 SetupDiOpenClassRegKeyEx 並在 Flags 參數中設定DIOCR_INSTALLER。
僅限使用 INF 指示詞來修改保留供作業系統使用的登錄機碼。 如需更多資訊,請參閱 INF 指導原則的摘要。
類別安裝程式 和 共同安裝程式 無法呼叫登錄函式,以建立、變更或刪除保留供作系統使用的登錄值。
如需登錄機碼訪問許可權的詳細資訊,請參閱 登錄機碼安全性和訪問許可權。