整个进程安全CoInitializeSecurity
来源:互联网 发布:sugarnms网络管理下载 编辑:程序博客网 时间:2024/05/22 00:28
整个进程安全
整个进程安全可以通过CoInitializeSecurity和相应参数设置。这个API内每个使用COM的进程(客户机和服务器)调用一次,如果不是显式调用,则COM用应用程序AppID中的安全设置(如有)或整个机器范围的缺省调用CoInitializeSecurity。CoInitializeSecurity说明如下:
HRESULT CoInitializeSecurity(
PSECURITY_DESCRIPTOR pVoid,
LONG cAuthSvc,
SOLE_AUTHENTICATION_SERVICE * asAuthSvc,
void * pReserved1,
DWORD dwAuthnLevel,
DWORD dwImpLevel,
SOLE_AUTHENTICATION_LIST * pAuthList,
DWORD dwCapabilities,
void * pReserved3
);
说明:每个进程调用CoInitializeSercurity一次,再次调用会失败,并返回RPC_E_TOO_LATE。要实现微调安全控制,可以指定接口范围的安全设置,覆盖CoInitializeSecurity中指定的整个进程范围设置。编写基于DLL的COM应用程序时,不能调用CoInitializeSecurity,因为代理会调用CoInitializeSecurity.
指定访问控制信息
第一个参数pVoid在进程作为COM服务器时传送访问控制信息,它可以取NULL,这时COM生成允许任何人访问的SID。也可以取参数pVoid,它为下列三种类型之一的指针:
1、AppID中的指针,COM查找和使用注册表指定AppID中存放的安全设置。这时CoInitializeSecurity的所有其它参数均忽略。
2、Win32 SID指针,这个Win32 SID中包含DACL(自主访问控制列表)指定谁能访问这个服务器。COM搜索这个DACL中的COM_RIGHTS_EXECUTE权限.由于COM目前不支持监查,因此SACL(系统访问控制列表)应该为NULL.
3、IAcessControl接口的指针。IAccessControl是COM定义的接口,提供COM服务器上的访问控制信息。如果向CoInitializeSecurity传送IAccessControl接口的指针,则COM在需要时,可从任何线程中调用接口的方法,检查用户对服务器上的访问权限。因此,实现IAccessControl时,要保证其为线程安全的。
说明:别把IAccessControl与COMTrader的IAccessControl接口混起来,它们完全无关,IID也不同。
指定验证服务信息
asAuthSvc参数指定验证服务信息数组。COM用这个信息选择安全提供者(例如NTLM或Kerberos),用来输入方法调用;输出调用可以用任何安全提供者。这个数组中的元素个数在cAuthSvc中指定。每个元素的类型为SOLE_AUTHENTICATION_SERVICE(底部认证服务),定义如下:
typedef struct tagSOLE_AUTHENTICATION_SERVICE{
DWORD dwAuthnSvc;
DWORD dwAuthzSvc;
OLECHAR* pPrincipalName;
HRESULT hr;
}SOLE_AUTHENTICATION_SERVICE;
其中:1、dwAuthnSvc指定枚举类型RPC_C_AUTHN_xxx所定义清单中的验证服务,目前只支持两个值:RPC_C_AUTHN_WINNT与RPC_C_AUTHN_GSS_KERBEROS(仅适用于Windows 2000)
2、dwAuthzSvc指定枚举类型RPC_C_AUTHZ_xxx中的授权服务.目前只支持RPC_CAUTHZ_NONE.在Windows 2000中还可以指定RPC_C_AUTHZ_DEFAULT.让COM在安全总括协议中选择授权服务.
3、pPrincipalName指定验证服务使用的用户标识符(主体名).对NTLM和Kerberos,它为NULL,COM用当前用户标识符.
4、hr返回调用注册验证服务的结果.如果CoInitializeSecurity失败,则可以检查hr,确定调用注册验证服务是否失败,为什么.
dwAuthnLevel指定RPC_C_AUTHN_LEVEL_xxx所定义的验证级别之一.同样dwImpLevel指定代理的缺省扮演级别.本章前面曾介绍过,客户机指定扮演级别,因此这个参数只在进程作为客户机时才适用.dwImpLevel应为RPC_C_IMP_LEVEL_XXX定义的级别。
pAuthList包含SOLE_AUTHENTICATION_INFO结构的数组,类似于前面介绍的SOLE_AUTHENTICATION_SERVICE结构。COM在安全总括协商之后选择验证服务时搜索pAuthList中针对所选服务的验证信息。
指定验证功能
CoInitializeSecurity最后一个有趣的参数dwCapabilites指定EOLE_AUTHENTICATION_CAPABILITES枚举类型中的一个或几个标志。这些标志在CoInitializeSecurity中设置其它安全信息。
整个进程安全可以通过CoInitializeSecurity和相应参数设置。这个API内每个使用COM的进程(客户机和服务器)调用一次,如果不是显式调用,则COM用应用程序AppID中的安全设置(如有)或整个机器范围的缺省调用CoInitializeSecurity。CoInitializeSecurity说明如下:
HRESULT CoInitializeSecurity(
PSECURITY_DESCRIPTOR pVoid,
LONG cAuthSvc,
SOLE_AUTHENTICATION_SERVICE * asAuthSvc,
void * pReserved1,
DWORD dwAuthnLevel,
DWORD dwImpLevel,
SOLE_AUTHENTICATION_LIST * pAuthList,
DWORD dwCapabilities,
void * pReserved3
);
说明:每个进程调用CoInitializeSercurity一次,再次调用会失败,并返回RPC_E_TOO_LATE。要实现微调安全控制,可以指定接口范围的安全设置,覆盖CoInitializeSecurity中指定的整个进程范围设置。编写基于DLL的COM应用程序时,不能调用CoInitializeSecurity,因为代理会调用CoInitializeSecurity.
指定访问控制信息
第一个参数pVoid在进程作为COM服务器时传送访问控制信息,它可以取NULL,这时COM生成允许任何人访问的SID。也可以取参数pVoid,它为下列三种类型之一的指针:
1、AppID中的指针,COM查找和使用注册表指定AppID中存放的安全设置。这时CoInitializeSecurity的所有其它参数均忽略。
2、Win32 SID指针,这个Win32 SID中包含DACL(自主访问控制列表)指定谁能访问这个服务器。COM搜索这个DACL中的COM_RIGHTS_EXECUTE权限.由于COM目前不支持监查,因此SACL(系统访问控制列表)应该为NULL.
3、IAcessControl接口的指针。IAccessControl是COM定义的接口,提供COM服务器上的访问控制信息。如果向CoInitializeSecurity传送IAccessControl接口的指针,则COM在需要时,可从任何线程中调用接口的方法,检查用户对服务器上的访问权限。因此,实现IAccessControl时,要保证其为线程安全的。
说明:别把IAccessControl与COMTrader的IAccessControl接口混起来,它们完全无关,IID也不同。
指定验证服务信息
asAuthSvc参数指定验证服务信息数组。COM用这个信息选择安全提供者(例如NTLM或Kerberos),用来输入方法调用;输出调用可以用任何安全提供者。这个数组中的元素个数在cAuthSvc中指定。每个元素的类型为SOLE_AUTHENTICATION_SERVICE(底部认证服务),定义如下:
typedef struct tagSOLE_AUTHENTICATION_SERVICE{
DWORD dwAuthnSvc;
DWORD dwAuthzSvc;
OLECHAR* pPrincipalName;
HRESULT hr;
}SOLE_AUTHENTICATION_SERVICE;
其中:1、dwAuthnSvc指定枚举类型RPC_C_AUTHN_xxx所定义清单中的验证服务,目前只支持两个值:RPC_C_AUTHN_WINNT与RPC_C_AUTHN_GSS_KERBEROS(仅适用于Windows 2000)
2、dwAuthzSvc指定枚举类型RPC_C_AUTHZ_xxx中的授权服务.目前只支持RPC_CAUTHZ_NONE.在Windows 2000中还可以指定RPC_C_AUTHZ_DEFAULT.让COM在安全总括协议中选择授权服务.
3、pPrincipalName指定验证服务使用的用户标识符(主体名).对NTLM和Kerberos,它为NULL,COM用当前用户标识符.
4、hr返回调用注册验证服务的结果.如果CoInitializeSecurity失败,则可以检查hr,确定调用注册验证服务是否失败,为什么.
dwAuthnLevel指定RPC_C_AUTHN_LEVEL_xxx所定义的验证级别之一.同样dwImpLevel指定代理的缺省扮演级别.本章前面曾介绍过,客户机指定扮演级别,因此这个参数只在进程作为客户机时才适用.dwImpLevel应为RPC_C_IMP_LEVEL_XXX定义的级别。
pAuthList包含SOLE_AUTHENTICATION_INFO结构的数组,类似于前面介绍的SOLE_AUTHENTICATION_SERVICE结构。COM在安全总括协商之后选择验证服务时搜索pAuthList中针对所选服务的验证信息。
指定验证功能
CoInitializeSecurity最后一个有趣的参数dwCapabilites指定EOLE_AUTHENTICATION_CAPABILITES枚举类型中的一个或几个标志。这些标志在CoInitializeSecurity中设置其它安全信息。
例如,指定EOAC_SECURE_REFS时COM验证分布式引用次数调用(AddRef和Release),防止服务器对象恶意提前释放。其它标志包括EOAC_STATIC_CLOAKING和EOAC_DYNAMIC_CLOAKING,分别指定静态和动态掩盖。也可以用标志EOAC_APPID和EOAC_ACCESS_CONTROL表示CoInitializeSecurity第一个参数pVoid是AppID或IAccessControl的指针。
http://blog.csdn.net/gencheng/article/details/9376337
0 0
- 整个进程安全CoInitializeSecurity
- 整个进程安全CoInitializeSecurity
- 整个进程安全CoInitializeSecurity
- WMI, CoInitializeSecurity
- CoInitializeSecurity function
- WMI--Windows API--CoInitializeSecurity
- CoInitializeEx、CoInitializeSecurity函数
- Android如何安全退出整个引用
- CoInitializeSecurity返回错误 0x80010119
- 安全搜索进程内存空间
- errno多线程/进程安全
- Docker为整个软件生命周期提供安全保障
- SEandroid 安全机制---进程安全上下文
- 安全进程攻略—僵尸进程
- [转贴]安全进程攻略—僵尸进程
- 对整个文件夹进行codeml,同时执行几个进程
- winform 关闭子窗体时关闭整个进程
- 杀掉mysql进程之后,我通宵了一整个晚上
- Codeforces 394 B. Very Beautiful Number
- 分治法 Divide and Conquer - Closest Pair of Points 找最近点对
- BabyLinux制作过程详解
- CF Round231C (ZWJ 神构造)
- codeforces round231 DIV2
- 整个进程安全CoInitializeSecurity
- .net实现加密算法小结
- 黑马程序员技术博客之copy小程序
- 黑马程序员技术博客之堆排序
- Codeforces Round #231 (Div. 2)---- Counting Sticks
- 数据的网络传输
- 吞吐率与压力测试
- #raspberry#树莓派加装无线模块
- 19年奇遇元宵节情人节 即投资即赚钱项目圆你甜蜜欢聚投资梦