安全地存取登錄機碼
客戶問題經常會追蹤到外部元件,例如執行下列動作的第三方 裝置安裝應用程式:
刪除重要的登錄機碼。
修改重要登錄機碼的訪問許可權。
使用登錄機碼的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
KEY_ENUMERATE_SUB_KEYS
請勿直接在登錄中開啟裝置安裝類別機碼。 如同任何登錄機碼,裝置安裝類別機碼的位置和名稱可能會在 Windows 版本之間變更。 如需如何正確存取裝置安裝類別機碼的資訊,請參閱 開啟裝置安裝類別的登錄機碼
請勿直接在登錄中開啟裝置介面類別機碼。 如同任何登錄機碼,裝置介面類別機碼的位置和名稱可能會在 Windows 版本之間變更。
若要安全地開啟裝置介面類別密鑰,請使用CM_Open_Class_Key搭配在 ulFlags 參數中設定CM_OPEN_CLASS_KEY_INTERFACE,或使用 SetupDiOpenClassRegKeyEx 並在 Flags 參數中設定DIOCR_INSTALLER。
僅使用 INF 指示詞來修改保留供作業系統使用的登錄機碼。 如需詳細資訊,請參閱 INF 指示詞的摘要。
類別安裝程式 和 共同安裝程式 無法呼叫登錄函式,以建立、變更或刪除保留供操作系統使用的登錄值。
如需登錄機碼訪問許可權的詳細資訊,請參閱 登錄機碼安全性和訪問許可權。