**思路: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中還有一種方式...