在某些场景下,需要判断当前程序对某文件或文件夹是否写权限。比如没有管理员权限,是不能向系统敏感路径(比如C:\Windows\System32、C:\Program Files等)创建文件或者改写这些路径中的文件。
我们可以通过以下代码判断对目标文件或者文件夹是否有写权限:
// 将要检测的权限GENERIC_XXXXXX传递给dwGenericAccessMask,可检测对
// 文件或者文件夹的权限
BOOL CanAccessFile( CUIString strPath, DWORD dwGenericAccessMask )
{
CUIString strLog;
strLog.Format( _T("[CanAccessFile]strPath: %s, dwGenericAccessMask: %d"), strPath, dwGenericAccessMask );
WriteUpdateLog( strLog );
DWORD dwSize = 0;
PSECURITY_DESCRIPTOR psd = NULL;
SECURITY_INFORMATION si = OWNER_SECURITY_INFORMATION |
GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION;
WriteUpdateLog( _T("[CanAccessFile]GetFileSecurity - NULL") );
// 获取文件权限信息结构体大小
BOOL bRet = GetFileSecurity( strPath, si, psd, 0, &dwSize );
if ( bRet || GetLastError() != ERROR_INSUFFICIENT_BUFFER )
{
strLog.Format( _T("[CanAccessF