關於如何判斷當前使用者對檔案有無寫許可權

2021-06-21 23:31:13 字數 2155 閱讀 4961

**思路:1.獲取當前使用者名稱getusername

2.獲取當前使用者名稱所屬的組netusergetlocalgroups

3.獲取使用者和使用者組的sid(安全識別符號,表示乙個使用者,乙個使用者組,一台計算機,乙個域等,計算機可以通過這個識別使用者;登錄檔對應位置:hesy_users下)

4.通過檔名獲取檔案的acl列表

5.遍歷acl列表中的ace,比對sid,判斷相應許可權

**缺陷:1.不針對域使用者,如果是域使用者可在netusergetlocalgroups函式之前,獲取網域名稱和使用者名稱拼接wstrname,再傳參給netusergetlocalgroups

2.僅針對ntfs,對fat32或fat16僅僅做簡單處理

**參考:

#define allocmem(x) (heapalloc(getprocessheap(), heap_zero_memory, x))

#define freemem(x) (heapfree(getprocessheap(),heap_zero_memory, x))

bool  haswriteprivilege(const char* path)

; c2w(wstr, 256, path);

//獲取當前使用者名稱

wchar wstrname[256] = ;

dword dwsize = 256;

getusername(wstrname,&dwsize);

//使用者sid

lpvoid pusersid = null;

dword  cbusersid = 0;

//組sid

tchar  *szdomain = null;

dword  cbdomain  = 0;

sid_name_use  snutype;

dword dwlevel = 0;

dword dwprefmaxlen = max_preferred_length;

dword dwentriesread = 0;

dword dwtotalentries = 0;

net_api_status nstatus;

lplocalgroup_users_info_0 pbuf = null;

lplocalgroup_users_info_0 pimpbuf;

lpvoid pdomainsid  = null;

dword  cbdomainsid = 0;

tchar  *szdomainnew = null;

dword  cbdomainnew  = 0;

//獲取當前使用者所屬的使用者組

nstatus = netusergetlocalgroups(null,wstrname,0,lg_include_indirect,(lpbyte*)&pbuf,dwprefmaxlen,&dwentriesread,&dwtotalentries);

if (nstatus == nerr_success)

}if (!lookupaccountname(null,pimpbuf->lgrui0_name,pdomainsid,&cbdomainsid,szdomainnew,&cbdomainnew,&snutype))

else

}if (!lookupaccountname(null,wstrname,pusersid,&cbusersid,szdomain,&cbdomain,&snutype))

bool bsuccess = true;

pacl pdacl = null;

access_allowed_ace *pace = null;

//根據檔名獲取dacl

if(error_success != getnamedsecurityinfo(wstr,se_file_object,dacl_security_information,null,null,&pdacl,null,null))

else

else if (dir.isreadable())

else

}//dacl存在的話遍歷其中的ace

for (int i = 0; iacecount;i++)} }

}}

}qdebug()<<"使用者組:"}

//end

}

關於C 中如何判斷檔案,目錄存在的若干方法

出處 在我們平時的程式設計時,經常需要判斷檔案或者目錄是否存在,相對來說判斷檔案的存在性比較簡單,目錄則比較複雜。下面就詳細的介紹幾種方法。首先關於判斷檔案的存在性 一 ifstream 在c 中,可以利用ifstream檔案輸入流,當我們直接使用ifstream來建立檔案輸入流的時候,如果檔案不存...

關於C 中如何判斷檔案,目錄存在的若干方法

出處 在我們平時的程式設計時,經常需要判斷檔案或者目錄是否存在,相對來說判斷檔案的存在性比較簡單,目錄則比較複雜。下面就詳細的介紹幾種方法。首先關於判斷檔案的存在性 一 ifstream 在c 中,可以利用ifstream檔案輸入流,當我們直接使用ifstream來建立檔案輸入流的時候,如果檔案不存...

關於C 中如何判斷檔案,目錄存在的若干方法

下面就詳細的介紹幾種方法。首先關於判斷檔案的存在性 一 ifstream 在c 中,可以利用ifstream檔案輸入流,當我們直接使用ifstream來建立檔案輸入流的時候,如果檔案不存在則流建立失敗。ifstream fin hello.txt if fin 三 access 當然c中還有一種方式...