2013-07-03 36 views
-1

我想問一下,如何打開註冊表項來保護它。在我閱讀時,我應該使用RegCreateKeyEx而不是RegOpenKeyEx,但是如何打開應該看起來像其他進程不能刪除它。RegCreateKeyEx上的其他參數保護註冊表項

我用:

long lResult = RegOpenKeyEx(HKEY_CLASSES_ROOT, L"TypeLib\\{0971C3C0-FEA6-49BA-AFEA-7C898DBE175B}\\9.0\\HELPDIR", NULL, KEY_ALL_ACCESS, &hKey); 

我應該如何改寫它,使註冊表保護。

+1

你是什麼意思的「保護」?您是否希望防止人們在打開時修改/刪除它,或者您是否希望在將來防止修改/刪除? – Ben

+0

@Ben如果有可能我想知道如何做這兩件事,但我一直在考慮第一個問題,在它被打開時保護它。 – ST3

+1

爲什麼你需要這樣做?一般來說,您無法阻止擁有與您相同的登錄和擔保權利的人執行任何您可以執行的操作。這是設計。如果你告訴我們你想要達到的目標,我們可以提供更多幫助。 – Ben

回答

1

備註:我同意上述MSalters。我建議你在刪除註冊表項的時候非常小心,因爲這些註冊表項你並沒有放在那裏。刪除隨機typelib的條目不一定是個好主意,除非你是某些他們不是所需的 - 例如,如果它們屬於您嘗試刪除的可能不需要的軟件。

你想防止你的軟件刪除一個密鑰,以便重現錯誤,並讓你的軟件繼續它的工作。 然而,有(至少)三個可能的原因,所以你需要確保你的註冊表清潔可以處理所有他們適當。

什麼可能阻止註冊表項

的缺失是關鍵還是開放?

首先(也是最有可能的),一個密鑰不能被刪除,而任何一個處理都是打開的。這是設計和文檔。

但是你可以刪除鍵的所有值,刪除子項不屬於自己開放,等等。

另請注意,您無法刪除自己打開的鑰匙,因此請確保您自己沒有打開的把手。

您可以使用SysInternals進程資源管理器來確定您的進程或任何其他進程是否已打開註冊表項。

您有權限嗎?

其次,您應該檢查您是否有權刪除密鑰。可以設置權限,以便任何人都無法執行特定操作或任何操作,包括更改權限。例外情況是,所有者可以隨時更改權限,管理員可以將所有者更改爲自己。

所以,如果您沒有權限刪除密鑰,而不是所有者,那麼您將需要「Take Ownership」特權。然後您可以獲取所有權,更改權限以允許您刪除密鑰,然後將其刪除。管理員通常具有「取得所有權」特權。

您可以使用RegEdit.exe檢查註冊表項的權限 - 前提是您有權查看當然的權限!

操作是否被安全軟件阻止?

最後,系統中的任何操作都可能被安全軟件(例如防病毒程序)否決。這也將表現爲Access Denied錯誤。

如何防止註冊表項

因此刪除,以防止註冊表項刪除您可以:

  • 創建這將打開鍵並保持其開放的過程。
  • 更改權限拒絕所有用戶的刪除權限。
  • 安裝攔截註冊表調用(例如使用繞行)並不允許刪除密鑰的設備驅動程序。