在使用CreateFileMapping,CreateEvent等API的时候,经常会遇到一个安全属性的设定,一般的程序都会设置成NULL,用系 统默认的安全属性来设定。但是在windows2003 服务程序的开发中,用系统默认的安全属性创建一个FileMapping时,即使是admin用 户也不能找开这个FileMapping,错误码5, 为了能让其它用户下运行的程序打开这个服务程序创建的FileMapping,需要作下面的设定。
设定之前先对两个安全属性相关的API进行说明。
WINADVAPI BOOL WINAPI InitializeSecurityDescriptor (PSECURITY_DESCRIPTOR pSecurityDescriptor, DWORD dwRevision );
WINADVAPI BOOL WINAPI SetSecurityDescriptorDacl (PSECURITY_DESCRIPTOR pSecurityDescriptor, BOOL bDaclPresent, PACL pDacl, BOOL bDaclDefaulted );
InitializeSecurityDescriptor 的API是进行安全属性描述初始化的,第一个参数pSecurityDescriptor是要进行初始化的安全属性描述,第二个参数指定分配给安全描述符的修订级别。它必须指定为SECURITY_DESCRIPTOR_REVISION。
SetSecurityDescriptorDacl 的API是对安全属性进行设定的
第一个参数:PSECURITY_DESCRIPT指向一个安全描述符
第 二个参数:bDaclPresent提示DACL是否存在,设定为真的时候,PSECURITY_DESCRIPT构造体中的 SE_DACL_PRESENT 标志会初始化(用pDacl与bDaclDefaulted),用FALSE设定时,SE_DACL_PRESENT 标志会被清除,参数pDacl与bDaclDefaulted 会被无视。
第三个参数:pDacl指向ACL构造体,这个参数是空的时候,会充许任何程序访问这个对象。
第四个参数:bDaclDefaulted 指示标记,是既定的还是用户指定
想要做成一个让任何程序都能访问的共享内存,参照下面代码。
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;
CreateFileMapping(.., &sa,...);
Windows安全属性的设定
最新推荐文章于 2021-07-28 11:53:34 发布
rel="File-List" href="file:///C:%5CDOCUME%7E1%5Ckoukou%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">