是不是只有win7系统下才有目录读写权限控制,XP下面没有呢?还是都有?
怎么判断一个硬盘目录是否可以被读写呢? 有没有方法设置一个目录的读写权限?
等待高人指教

解决方案 »

  1.   

    GetFileAttributesEx/GetFileAttributes得到文件属性信息
      

  2.   


    这个只能获取到FAT文件系统的吧,如果是NTFS系统呢?还请指教
      

  3.   

    使用GetFileSecurity
      

  4.   


    SetNamedSecurityInfo
    GetNamedSecurityInfo应该可以搞定吧?
      

  5.   


    目前就是采用的这种方法的,但是目前还是出现一些bug,不知道为什么
      

  6.   

    这种方法应该是没有问题的,就是开始的时候这么设置一次目录,以后每次都从配置文件里面读取这个目录,应该是后面这个目录的权限被改变了,导致出现bug,现在改为每次启动就检测这个缓存目录是否可用,应该可以解决了现在采用了给everyone提权的方法来实现的,先提权,然后再读写一个文件,来判断目录是否可用
      

  7.   

    //提权的函数
    BOOL AddEveryoneAccessToFile(LPTSTR szFileName)
    {
    cout<<"提权的目录为:"<<StrUtils::WStrToStr(szFileName).c_str()<<endl; BOOL bResult = FALSE;
    PACL pOldDacl=NULL;
    PACL pNewDacl=NULL;
    DWORD dRet;
    EXPLICIT_ACCESS eia;
    PSECURITY_DESCRIPTOR pSID=NULL;
    dRet = GetNamedSecurityInfo(szFileName,SE_FILE_OBJECT,DACL_SECURITY_INFORMATION,NULL,NULL,&pOldDacl,NULL,&pSID);// 获取文件的DACL 
    if(dRet==ERROR_SUCCESS)
    {
    //创建一个ACE,允许Everyone组成员完全控制对象,并允许子对象继承此权限
    ZeroMemory(&eia,sizeof(EXPLICIT_ACCESS));
    BuildExplicitAccessWithName(&eia,_T("Everyone"),GENERIC_ALL,SET_ACCESS,SUB_CONTAINERS_AND_OBJECTS_INHERIT);
    // 将新的ACE加入DACL 
    dRet = SetEntriesInAcl(1,&eia,pOldDacl,&pNewDacl);
    if(dRet==ERROR_SUCCESS)
    {
    // 更新文件的DACL 
    dRet = SetNamedSecurityInfo(szFileName,SE_FILE_OBJECT,DACL_SECURITY_INFORMATION,NULL,NULL,pNewDacl,NULL);
    if(dRet==ERROR_SUCCESS)
    {
    bResult=TRUE;
    }
    }
    } //释放DACL和SID
    if(pNewDacl)LocalFree(pNewDacl);
    if(pSID)LocalFree(pSID);
    return bResult;
    }我这么给目录提权,为什么还是不能在相应的目录下面创建文件呢?请教高手!!!在线等哦!
      

  8.   

    是不是这个只能个NTFS文件系统提权,而不能给FAT32文件系统提权???
      

  9.   


    Tools->Folder Options->View->Advanced Settings去掉小勾 Use simple file sharing (Recommened) OFF
    然后OK
    这样Folder 属性就会有 Security 项代码实现就不知道了。。
      

  10.   


    有吗,是文件夹右键菜单--》属性 里面的Tools吗?没有这个吧,要NTFS文件系统才有的,FAT32系统没有安全权限一说。我把安全权限和文件属性混在一起了