给文件只有everyone的所有权限,没任何权限

 用户权限SID请参考http://support.microsoft.com/kb/243330

 

/******************************************************************
*関数名:SetFileSecurityForEvery
*説明:指定したファイルでeveryoneの全部権を設定する
*パラメータ
* in:filename 開きたいファイル mode 開きオプション
* out:
*戻り値:TRUE 成功 FALSE 失敗
*更新履歴
*  001   2011/07/21 新規作成 (趙)
******************************************************************/
BOOL SetFileSecurityForEvery(const char *filename)
{
 PACL pACL = NULL;//セキュリティ記述子のDACLを指定するの構造体
 PSID pEveryoneSID = NULL; //セキュリティ識別子(SID:Security Identifier)構造体
 EXPLICIT_ACCESS ea[1];//アクセス制御EXPLICIT_ACCESS構造体
 PSECURITY_DESCRIPTOR pSD = NULL;//DACLを追加する構造体
 SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
 BOOL bRet = FALSE;

 if(AllocateAndInitializeSid(&SIDAuthWorld, 1, SECURITY_WORLD_RID,
  0, 0, 0, 0, 0, 0, 0, &pEveryoneSID)){
  ZeroMemory(&ea, 1 * sizeof(EXPLICIT_ACCESS));
  ea[0].grfAccessPermissions = GENERIC_ALL;
  ea[0].grfAccessMode = GRANT_ACCESS;
  ea[0].grfInheritance= NO_INHERITANCE;
  ea[0].Trustee.pMultipleTrustee = NULL;
  ea[0].Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
  ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID;
  ea[0].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
  ea[0].Trustee.ptstrName  = (LPTSTR) pEveryoneSID;

  DWORD dwRes = SetEntriesInAcl(1, ea, NULL, &pACL);
  if (ERROR_SUCCESS == dwRes){
   pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);
   if(NULL != pSD){
    if(InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION)){
     if(SetSecurityDescriptorDacl(pSD, TRUE, pACL, FALSE)){
      SECURITY_ATTRIBUTES sa;
      sa.nLength = sizeof (SECURITY_ATTRIBUTES);
      sa.lpSecurityDescriptor = pSD;
      sa.bInheritHandle = FALSE;
      bRet = SetFileSecurity(filename, DACL_SECURITY_INFORMATION,pSD);
     }
    }
   }

 

/******************************************************************
*関数名:SetFileSecurityForNULL
*説明:指定したファイルでeveryoneの全部権を設定する
*パラメータ
* in:filename 権を追加したいファイル
* out:
*戻り値:TRUE 成功 FALSE 失敗
*更新履歴
*  001   2011/07/21 新規作成 (趙)
******************************************************************/
bool CWBALogFile::SetFileSecurityForNULL(const char *filename)
{
 PACL pACL = NULL;//セキュリティ記述子のDACLを指定するの構造体
 PSECURITY_DESCRIPTOR pSD = NULL;//DACLを追加する構造体
 bool bRet = false;
 DWORD dwRes = SetEntriesInAcl(0, NULL, NULL, &pACL);
 if (ERROR_SUCCESS == dwRes){
  pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);
  if(NULL != pSD){
   if(InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION)){
    if(SetSecurityDescriptorDacl(pSD, TRUE, pACL, FALSE)){
     SECURITY_ATTRIBUTES sa;
     sa.nLength = sizeof (SECURITY_ATTRIBUTES);
     sa.lpSecurityDescriptor = pSD;
     sa.bInheritHandle = FALSE;
     if(0 != SetFileSecurity(filename, DACL_SECURITY_INFORMATION,pSD))
     {
      bRet = true;
     }else
     {
      bRet = false;
     }
    }
   }
  }
 }
    if (pACL)
        LocalFree(pACL);
    if (pSD)
        LocalFree(pSD);
 return bRet;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值