天天看點

給檔案隻有everyone的所有權限,沒任何權限

 使用者權限SID請參考http://support.microsoft.com/kb/243330

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);

     }

    }

   }

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;

}

繼續閱讀