Win7普通用戶下提升註冊表權限

          同樣的問題,在普通用戶下訪問註冊表會出現無權限問題。此時的想法是在自己的軟件註冊鍵提升其權限,以方便用戶修改,包括密碼等一些信息。

          代碼如下:(PS:按照預計的想法是提升其權限後,軟件運行結束後主恢復用戶本身權限,但結果只提升了,沒能恢復到原來的權限。知道的牛牛請多指點下,WIN7權限問題感覺好深奧)。

BOOL SetRegPrivilege(HKEY hKey, LPSTR SamName)
{
	DWORD dwRet;
	PACL pNewDacl = NULL, pOldDacl = NULL;
	PSECURITY_DESCRIPTOR pSD = NULL;
	EXPLICIT_ACCESS ea; 
	// 獲取SAM主鍵的DACL 
	dwRet = GetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, 
		NULL, NULL, &pOldDacl, NULL, &pSD); 
	if (dwRet != ERROR_SUCCESS) 
	{ 
		return FALSE;
	}
	// 創建一個ACE,允許Everyone完全控制對象,並允許子對象繼承此權限 
	ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS)); 
	BuildExplicitAccessWithName(&ea, "Administrators", KEY_ALL_ACCESS, SET_ACCESS, 
		SUB_CONTAINERS_AND_OBJECTS_INHERIT);
	
	// 將新的ACE加入DACL 
	dwRet = SetEntriesInAcl(1, &ea, pOldDacl, &pNewDacl); 
	if (dwRet != ERROR_SUCCESS) 
	{ 
		return FALSE;
	}	
	// 更新SAM主鍵的DACL 
	dwRet = SetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, 
		NULL, NULL, pNewDacl, NULL); 
	if (dwRet != ERROR_SUCCESS) 
	{ 
		return FALSE;
	}
	//釋放資源
	if (pNewDacl) 
		LocalFree(pNewDacl); 
	// 還原SAM主鍵的DACL 
// 	if (pOldDacl) 
// 		SetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, 
// 		NULL, NULL, pOldDacl, NULL); 	
	if (pOldDacl) 
		LocalFree(pOldDacl); 
	if (pSD) 
		LocalFree(pSD); 
	return TRUE;
}


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章