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、伪句柄其实就是指的是指调用函数的本身线程句柄。

  • 相关阅读:
    线程的简单介绍
    队列Joinablequeue的使用,以及生产者消费者模型的认识
    使用子线程来完成链接循环和通信循环
    使用socketserver实现简单的下载和上传
    类的绑定方法学习
    类的组合-多态-封装等特性的简单学习
    爬虫之亚马逊爬取
    JavaScript 面试中常见算法问题详解
    JavaScript 的 this 指向问题深度解析
    深入理解 JavaScript 中的函数
  • 原文地址:https://www.cnblogs.com/wang-can/p/3324378.html
Copyright © 2011-2022 走看看