windows c++ 修改使用者的檔案夾操作許可權

來源:互聯網
上載者:User

標籤:readonly   指定   bsp   修改檔案   gpo   類型   sharp   cts   size   

一般Windows下的系統檔案(夾)只讓受限帳戶讀取而不讓寫入和修改。如果要開啟寫操作許可權就需要手動修改檔案(夾)的使用者帳戶安全許可權(這操作當然要在系統管理員帳戶下執行).以下用程式封裝了一下該操作:

#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <windows.h>#include <AccCtrl.h>#include <AclAPI.h>int EnableFileAccountPrivilege (PCTSTR pszPath, PCTSTR pszAccount){BOOL bSuccess = TRUE;EXPLICIT_ACCESS ea;PACL pNewDacl = NULL;PACL pOldDacl = NULL;do{// 擷取檔案(夾)安全性實體的DACL列表if (ERROR_SUCCESS != GetNamedSecurityInfo ((LPTSTR)pszPath, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pOldDacl, NULL, NULL)){bSuccess = FALSE;break;}// 此處不可直接用AddAccessAllowedAce函數,因為已有的DACL長度是固定,必須重新建立一個DACL對象// 產生指定使用者帳戶的存取控制資訊(這裡指定賦予全部的存取權限)::BuildExplicitAccessWithName (&ea, (LPTSTR)pszAccount, GENERIC_ALL, GRANT_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);// 建立新的ACL對象(合并已有的ACL對象和剛產生的使用者帳戶存取控制資訊)if (ERROR_SUCCESS != ::SetEntriesInAcl(1, &ea, pOldDacl, &pNewDacl)){bSuccess = FALSE;break;}// 設定檔案(夾)安全性實體的DACL列表if (ERROR_SUCCESS != ::SetNamedSecurityInfo ((LPTSTR)pszPath, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pNewDacl, NULL)){bSuccess = FALSE;}}while(FALSE);if (NULL != pNewDacl){::LocalFree(pNewDacl);}return bSuccess;}int _tmain(int argc, _TCHAR* argv[]){// 擷取當前登入使用者的名稱wchar_t strBuffer[256] ={0};DWORD dwSize = 256;GetUserName(strBuffer,&dwSize);const wchar_t z_wszPath[MAX_PATH] = L"H:\\test2";const wchar_t z_wszAccountName[MAX_PATH] = L"Users"; if (!EnableFileAccountPrivilege(z_wszPath, z_wszAccountName)){printf("change file account Privilege fail : %s", "H:\\test1");}//int z_Flag = GetFileAttributes(L"H:\\test");//if (!(z_Flag&FILE_ATTRIBUTE_DIRECTORY))//{// return 0;//}////if (z_Flag&FILE_ATTRIBUTE_READONLY)//{// printf("wangjian");//}//SetFileAttributes(L"H:\\test", FILE_ATTRIBUTE_NORMAL);return 0;}

  

 

通用存取權限

  安全性實體使用Windows 存取遮罩格式,四個高位說明通用存取權限。每個安全性實體類型映射到這些位到一系列標準和對象特殊存取權限。例如:一個Window檔案對象映射GENERIC_READ位到READ_CONTROL和SYNCHRONIZE 標準存取權限和FILE_READ_DATA、FILE_READ_EA和FILE_READ_ATTRIBUTES對象指定存取權限。其他類型對象映射GENERIC_READ位到與類型對象適應的一些存取權限。
  你可以在你開啟一個物件控點的時候使用通用存取權限來指定需要的訪問類型;這通常比指定所有對應標準和特指許可權要簡單。 

  下表顯示了通用存取權限定義的常量。

 

常量

解釋

GENERIC_ALL

讀、寫和執行訪問

GENERIC_EXECUTE

執行

GENERIC_READ

GENERIC_WRITE

 

windows c++ 修改使用者的檔案夾操作許可權

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.