C 设置已创建文件的权限

C 设置已创建文件的权限,c,winapi,acl,C,Winapi,Acl,我想知道如何设置windows文件的权限? 类似于chmod(),而是一个windows 例如: 创建文件example.exe,并以只有所有者才能使用的方式设置其权限 这个文件的一部分可以执行它 我读到某个地方有一个用于c的ACL API,但我没有完全理解。这比chmod要多得多 在创建安全描述符之后,我已经自由地创建了该文件——这样更安全。如果您以另一种方式进行操作(首先创建文件),那么在很短的时间内不会设置所需的访问权限 试试这个: #include <windows.h> #

我想知道如何设置windows文件的权限?
类似于
chmod()
,而是一个windows

例如:

创建文件
example.exe
,并以只有所有者才能使用的方式设置其权限 这个文件的一部分可以执行它


我读到某个地方有一个用于c的ACL API,但我没有完全理解。

这比
chmod
要多得多

在创建安全描述符之后,我已经自由地创建了该文件——这样更安全。如果您以另一种方式进行操作(首先创建文件),那么在很短的时间内不会设置所需的访问权限

试试这个:

#include <windows.h>
#include <AclAPI.h>
#include <Lmcons.h>

int main()
{
    SECURITY_DESCRIPTOR sd;
    EXPLICIT_ACCESS ea[1];
    PACL pDacl;
    SECURITY_ATTRIBUTES sa;

    TCHAR UserBuffer[UNLEN+1];
    DWORD ulen = UNLEN;
    GetUserName(UserBuffer, &ulen);

    InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);

    BuildExplicitAccessWithName(&ea[0], UserBuffer, GENERIC_EXECUTE, 
                        SET_ACCESS, NO_INHERITANCE);

    SetEntriesInAcl(1, ea, NULL, &pDacl);
    SetSecurityDescriptorDacl(&sd, TRUE, pDacl, FALSE);

    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    sa.bInheritHandle = FALSE;
    sa.lpSecurityDescriptor = &sd;

    CreateFileA("c:\\temp\\example.exe", GENERIC_EXECUTE, 0, &sa,
        CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);

    return 0;
}
#包括
#包括
#包括
int main()
{
安全描述符sd;
显式访问ea[1];
PACL-pDacl;
安全(a);
TCHAR UserBuffer[UNLEN+1];
德沃德·乌伦=乌伦;
GetUserName(UserBuffer,&ulen);
初始化安全描述符(&sd,安全描述符修订版);
BuildExplicitAccessWithName(&ea[0]、UserBuffer、GENERIC_EXECUTE、,
设置_访问,无_继承);
setEntriesAcl(1、ea、NULL和pDacl);
设置securitydescriptordacl(&sd,TRUE,pDacl,FALSE);
sa.nLength=sizeof(安全属性);
sa.bInheritHandle=FALSE;
sa.lpSecurityDescriptor=&sd;
CreateFileA(“c:\\temp\\example.exe”),通用\u执行,0,&sa,
创建新文件,文件属性,0);
返回0;
}