zoukankan      html  css  js  c++  java
  • Windows小知识(一)

    1、Microsoft将COM从16位Windows移植到WIn32时,做出了一个重要决策:所有需要字符串作为参数的COM接口方法都 只接受Unicode字符串。因为COM一般用于让不同组件彼此间进行“对话”,而Unicode是传递字符串最理想的选择。

    2、当资源编译器译完所有资源后,输出文件就是资源的一个二进制形式。资源中的字符串值 (字符串表、对话框模板、菜单等)始终是以Unicode字符串的形式保存的。

    3、在每个变量后的内存都会被填充为0xcc,这样是为了能够在自动检测中,检查出缓冲区溢出。

    4、_countof是一个宏,来获取字符大小。

    5、GetThreadLocale这个来返回系统的语言标识符。

    6、IsTextUnicode这个来判断某一个文本内容是否为Unicode编码。

    7、一般系统调用函数会有两个版本,分别是Unicode与ANSI两种版本。其实ANSI运行起来更复杂。因为在ANSI内部其实还是调用的Unicode版本的函数,于是就存在一个参数转换的问题,将ANSI参数转换成Unicode,然后再去调用Unicode版本的函数。所以直接调用Unicode版本的函数运行会更快。

    8、内核对象可以用一个安全描述符(security descriptor, SD)来保护。

    9、内核对象有一个静态成员用来计数,当内核对象被创建时计数值为1,如果有其他进程访问此内核对象(通过特殊的进程共享内核对象的方式)则计数值加1,进程结束,计数值减1,如果计数为0,则系统内核会释放此内核对象。

    10、内核对象的作用域是基于进程的,这样做处于安全和健壮型考虑,而且只有通过调用windows api 才能使用内核对象。

    11、将NULL作为PSECURITY_ATTRIBUTES参数传入时,返回的句柄是不可继承的。

    12、当一个子进程继承了父进程的内核对象的句柄时,句柄在父、子进程中的索引是一样的。

    13、对象句柄的继承只会发生在生成子进程的时候发生。假如父进程后来又创建了新的内核对象,并同样将它们的句柄设为可继承的句柄。那么正在运行的子进程是不会继承这些新的句柄的。

    14、一个服务的命名内核对象始终位于全局命名空间内。应用程序自己的命名内核对象在会话的命名空间内。不过,我们也可以强制把一个命名对象放入全局命名空间,具体 做法是在其名称前加上“Global”前缀。如:

       HANDLE h = CreateEvent(NULL, FALSE, FALSE, TEXT("Global\MyName"));

    也可以将一个内核对象放入到当前会话的命名空间,在名称前加上“Local”前缀,如

      HANDLE h = CreateEvent(NULL, FALSE, FALSE, TEXT("Local\MyName")):

    15、Security identifier(安全描述符),SID

    16、通过CreateBoundaryDescriptor创建的边界,不要用CloseHandle关闭,而是用DeleteBoundaryDescriptor;

     17、伪句柄其实就是指的是指调用函数的本身线程句柄。

  • 相关阅读:
    解决SQL Server Compact 无法在64位系统下正常运行
    Mvc5+Entity Framework6 之二----在MVC中用Entity Framework实现基本的CRUD
    Asp.net MVC5中Html.DropDownList的使用
    C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母
    MVC学习 (二) Razor语法
    MVC学习 (一)
    编程实现机器人相遇
    jquery优化引发的思考
    (续)检测到有潜在危险的 Request.Form 值
    检测到有潜在危险的 Request.Form 值
  • 原文地址:https://www.cnblogs.com/wang-can/p/3324378.html
Copyright © 2011-2022 走看看