在使用
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,...);
设 定之前先 对 两个安全属性相 关 的 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,...);