簡體   English   中英

SetNamedSecurityInfo用於32位進程中的64位注冊表項

[英]SetNamedSecurityInfo for a 64Bit registry key from a 32Bit Process

我試圖從32位應用程序使用SetNamedSecurityInfo來為64位注冊表項設置ACL。 由於SetNamedSecurityInfo的限制,只有KEY_WOW64_32KEY標志,這是不可能的。

從MSDN上的某些帖子中復制粘貼:無法訪問WOW64中的64位注冊表項

注意:使用SetNamedSecurityInfo或GetNamedSecurityInfo獲取或設置注冊表中的ACL時,無法從32位DLL或EXE訪問64位注冊表項。 需要一個名為SE_REGISTRY_WOW64_64KEY的新SE_OBJECT_TYPE,它可以在NTMARTA.DLL中設置KEY_WOW64_64KEY。

例如,這意味着無法創建可在安裝過程中調整注冊表安全設置的32/64位不可知SETUP.EXE。 解決方法是創建一個64位DLL或EXE並分發bot。

我的問題:有什么解決方法可以在不創建64Bit應用程序的情況下解決此問題?

使用SetSecurityInfo代替:

HKEY hSecKey;
if( RegOpenKeyEx( hHive, Subkey.c_str(), 0, ACCESS_SYSTEM_SECURITY | KEY_WOW64_64KEY, &hSecKey ) != ERROR_SUCCESS ) 
    return;

SetSecurityInfo(hSecKey, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, NULL, NULL, &pDacl, NULL);

您必須首先獲得SE_SECURITY_NAME特權才能使用ACCESS_SYSTEM_SECURITY打開密鑰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM