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

  • 相关阅读:
    leetcode 190 Reverse Bits
    vs2010 单文档MFC 通过加载位图文件作为客户区背景
    leetcode 198 House Robber
    记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence
    逆序数2 HDOJ 1394 Minimum Inversion Number
    矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence
    递推DP URAL 1586 Threeprime Numbers
    递推DP URAL 1167 Bicolored Horses
    递推DP URAL 1017 Staircases
    01背包 URAL 1073 Square Country
  • 原文地址:https://www.cnblogs.com/wang-can/p/3324378.html
Copyright © 2011-2022 走看看