用户权限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;
}