在vista下,由于系统更加注重安全权限,并且使用了uac。往往在访问文件和注册表时,一般用户没有权限写入。导致了开发的程序不能在一般用户下顺利的运行,为了解决写入文件和注册表这个问题,并且不想使用runadministrator方式启动程序,那么只有改变文件和注册表键值的安全属性,就是添加everyone权限,这样所有的用户多可以访问并写入文件和注册表。但是在实际开发中发现一个问题,公司的域用户下程序不能正常的运行,不能写入。最后研究发现,everyone权限不包含域用户,只包含本地下的所有用户,所以问题还是没有全部解决。最后查找资料找到了一个更开放,更没有限制的权限-------NULL权限。
我们可以通过创建 NUL LDACL来创建一个比Everyone更开放的null的ACL列表,通过这个列表,我们就可以创建一个对系统的所有用户(域用户和Everyone---只包含本地用户)都可以访问/使用的文件和注册表键值。
在Win32中,我们要创建这样的一结构,代码通常是下面这样:SECURITY_ATTRIBUTES sa;
SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd,TRUE,NULL,FALSE);
sa.nLength =sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor =&sd;
return &sa;我们得到了创建了一这样的结构后,直接把其地址传给CreateFile等api的参数中就可以了.
这样创建出来的文件就是没有任何权限限制的。
DACL实例