CA1060
Move P/Invokes to NativeMethods class
规则描述:
平台调用服务访问非托管代码。
平台调用方法(使用了System.Runtime.InteropServices.DllImportAttribute特性访问非托管代码的方法),需要放到NativeMethods,SafeNativeMethods,UnsafeNativeMethods 类中的一个中。
1.NativeMethods:会做堆栈审查(stack walk)。对于可能在各个地方使用的方法,放到这个类中。System.Security.SuppressUnmanagedCodeSecurityAttribute特性不能应用到这个类。
2.SafeNativeMethods:不会(suppress)做堆栈审查(stack walk)。对于任何人的调用都是安全的方法,放到这个类中。System.Security.SuppressUnmanagedCodeSecurityAttribute特性应用到这个类。方法的调用者不需要做完整的安全审查保证它的使用是安全的,因为方法对于调用者是无害的(harmless)。
3.UnsafeNativeMethods :不会(suppress)做堆栈审查(stack walk)。对于有潜在危险的方法,放到这个类中。System.Security.SuppressUnmanagedCodeSecurityAttribute特性应用到这个类。方法的调用者需要做完整的安全审查保证它的使用是安全的,因为堆栈审查不会执行。
这些类被定义成internal并且声明私有的构造函数来阻止新的实例被创建。内部定义的方法必须是static和internal。
解决冲突:
将方法移到上述三个类中合适的一个中。对于大多数的应用程序,将方法移到以NativeMethods命名的类中就足够了。
如果在开发一个被其他应用使用的应用程序库,那么需要考虑创建另外两个类。这两个类和NativeMethods很像,不过会被SuppressUnmanagedCodeSecurityAttribute特性所标记。有这个特性的话,运行时不会执行完整的堆栈审查来确保调用者有非托管代码权限(the UnmanagedCode permission)。一般仅在启动的时候检查。由于不检查,会显著提高调用非托管代码的性能。也会允许只有有限权限的代码使用这些方法。使用这个特性必须小心。不正确使用会带来严重的安全问题(serious security implications)。
我的认识:
对于这种与平台调用相关的方法不要放在其他的类中,而是封装在这三个类中。这样代码更清晰。
CA1060的更多相关文章
随机推荐
- API断点大全
1.限制程序功能函数 EnableMenuItem 允许.禁止或变灰指定的菜单条目EnableWindow 允许或禁止鼠标和键盘控制指定窗口和条目(禁止时菜单变灰) 2.对话框函数 CreateDia ...
- 转Spring+Hibernate+EHcache配置(三)
配置每一项的详细作用不再详细解释,有兴趣的请google下 ,这里需要注意一点defaultCache标签定义了一个默认的Cache,这个Cache是不能删除的,否则会抛出No default cac ...
- tornado做简单socket服务器(TCP)
http://blog.csdn.net/chenggong2dm/article/details/9041181 服务器端代码如下: #! /usr/bin/env python #coding=u ...
- 吐槽C++
个人感觉,在c++ 道路的学习路上,遇到很多的坎坷,现在回想起来,最关键一点就是 c++知识点繁杂很多,教科书很多知识点都没有提到. 但是在实际工作中,这些没有提到的知识点,却又经常会用到(或者看开源 ...
- [itint5]根据前序后序遍历统计二叉树
http://www.itint5.com/oj/#28 这题有意思.一开始还想不清楚,看了解释,很棒. 这个题目的特殊之处是所有节点的值都是不一样的. 所以递归过程可以大大简化. 先看两种遍历的性质 ...
- live555源码研究(一)------live555MediaServer的启动过程和基本类图
live555MediaServer.cpp就是live555服务器启动的过程. 一.启动过程 1,构造运行环境,运行环境包括了TaskScheduler 2,构造鉴权数据,也就是登陆的用户名和密码等 ...
- P134、面试题22:栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1.2.3.4.5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列对 ...
- web.xml的说明
<!--DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. Copyright 2000-2007 Sun Microsystems ...
- window下gvim中文界面改变成英文界面
中文环境下设置GVIM的界面.菜单.提示为英文语言 修改你的_vimrc,通常为类似C:\Program Files\Vim 加入以下语句至末尾 " set the menu & t ...
- C#.Net 如何动态加载与卸载程序集(.dll或者.exe)3---- 动态加载Assembly应用程序
下载 supergraphfiles.exe 示例文件. 应用程序体系结构 在我专攻代码之前,我想谈谈我尝试做的事.您可能记得,SuperGraph 让您从函数列表中进行选择.我希望能够在具体的目录中 ...