SetNamedSecurityInfo 1307 错误

SetFileSecurity (returns 1307)
SetSecurityInfo (returns 1307)
SetNamedSecurityInfo (returns 1307)
BackupWrite (returns 1307)
NtSetSecurityObject (returns 0xC000005A)


解决方法 增加SE_RESTORE_NAME权限


 
BOOL TakeSecurityPriv(LPCTSTR szPriv){


    BOOL bReturn = FALSE;


    HANDLE hProcToken = (HANDLE)0;


    if (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hProcToken)){


        TOKEN_PRIVILEGES tpTokPriv;


        if (LookupPrivilegeValue(NULL,szPriv,&tpTokPriv.Privileges[0].Luid)){


            tpTokPriv.PrivilegeCount = 1;
            tpTokPriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;


            if (AdjustTokenPrivileges(hProcToken,FALSE,&tpTokPriv,0,NULL,0)){


                bReturn = TRUE;


            }


        }


    }


    return bReturn;


}






if (TakeSecurityPriv(SE_RESTORE_NAME)) 







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中,可以使用Windows API函数来给文件夹设置访问控制。具体步骤如下: 1. 使用CreateDirectory函数创建文件夹。 2. 使用GetNamedSecurityInfo函数获取文件夹的安全描述符。 3. 使用SetEntriesInAcl函数创建访问控制列表(ACL),给管理员添加完全控制权限。 4. 使用SetNamedSecurityInfo函数将新的安全描述符应用到文件夹。 下面是一个代码示例,演示如何给文件夹设置访问控制: ```c++ #include <windows.h> #include <aclapi.h> int main() { LPCWSTR folderName = L"C:\\MyFolder"; // 要锁定的文件夹路径 DWORD dwRes; PSID pAdministratorsSID = NULL; PACL pNewDACL = NULL; PSECURITY_DESCRIPTOR pSD = NULL; // 获取管理员组的SID SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; if (!AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &pAdministratorsSID)) { printf("AllocateAndInitializeSid Error %u\n", GetLastError()); goto Cleanup; } // 获取文件夹的安全描述符 if (ERROR_SUCCESS != GetNamedSecurityInfo(folderName, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pNewDACL, NULL, &pSD)) { printf("GetNamedSecurityInfo Error %u\n", GetLastError()); goto Cleanup; } // 创建访问控制列表,给管理员添加完全控制权限 EXPLICIT_ACCESS ea = { 0 }; ea.grfAccessPermissions = FILE_ALL_ACCESS; ea.grfAccessMode = SET_ACCESS; ea.grfInheritance = SUB_CONTAINERS_AND_OBJECTS_INHERIT; ea.Trustee.TrusteeForm = TRUSTEE_IS_SID; ea.Trustee.TrusteeType = TRUSTEE_IS_GROUP; ea.Trustee.ptstrName = (LPTSTR)pAdministratorsSID; dwRes = SetEntriesInAcl(1, &ea, pNewDACL, &pNewDACL); if (dwRes != ERROR_SUCCESS) { printf("SetEntriesInAcl Error %u\n", dwRes); goto Cleanup; } // 将新的安全描述符应用到文件夹 dwRes = SetNamedSecurityInfo((LPWSTR)folderName, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pNewDACL, NULL); if (dwRes != ERROR_SUCCESS) { printf("SetNamedSecurityInfo Error %u\n", dwRes); goto Cleanup; } Cleanup: if (pAdministratorsSID) FreeSid(pAdministratorsSID); if (pSD) LocalFree(pSD); if (pNewDACL) LocalFree(pNewDACL); return 0; } ``` 上述代码将给指定的文件夹添加管理员的完全控制权限,从而只允许管理员访问该文件夹。请注意,此代码需要以管理员权限运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值