Windows API中的某些函数,比如Wi n E x e c和O p e n F i l e等,只是为了实现与1 6位Wi n d o w s程
序的向后兼容而存在,因此,应该避免使用。应该使用对 C r e a t e P r o c e s s和C r e a t e F i l e函数的调用

来取代对Wi n E x e c和O p e n F i l e函数的调用。

Wi n d o w s字符串函数
Wi n d o w s还提供了一组范围很广的字符串操作函数。这些函数与 C运行期字符串函数(如
s t r c p y和w c s c p y)很相似。但是该操作系统函数是操作系统的一个组成部分,操作系统的许多
组件都使用这些函数,而不使用 C运行期库。建议最好使用操作系统函数,而不要使用 C运行
期字符串函数。这将有助于稍稍提高你的应用程序的运行性能,因为操作系统字符串函数常常
被大型应用程序比如操作系统的外壳进程 E x p l o r e r. e x e所使用。由于这些函数使用得很多,因
此,在你的应用程序运行时,它们可能已经被装入R A M。

成为符合A N S I和U n i c o d e的应用程序
即使你不打算立即使用U n i c o d e,最好也应该着手将你的应用程序转换成符合 U n i c o d e的应
用程序。下面是应该遵循的一些基本原则:
• 将文本串视为字符数组,而不是c h a r s数组或字节数组。
• 将通用数据类型(如T C H A R和P T S T R)用于文本字符和字符串。
• 将显式数据类型(如B Y T E和P B Y T E)用于字节、字节指针和数据缓存。
• 将T E X T宏用于原义字符和字符串。
• 执行全局性替换(例如用P T S T R替换P S T R)。
• 修改字符串运算问题。例如函数通常希望你在字符中传递一个缓存的大小,而不是字节。
这意味着你不应该传递 s i z e o f ( s z B u ff e r ) ,而应该传递(s i z e o f ( s z B u ff e r ) / s i z e o f ( T C H A R )。另外,
如果需要为字符串分配一个内存块,并且拥有该字符串中的字符数目,那么请记住要按字节来
分配内存。这就是说,应该调用 malloc(nCharacters *sizeof(TCHAR)),而不是调用 m a l l o c
( n C h a r a c t e r s )。在上面所说的所有原则中,这是最难记住的一条原则,如果操作错误,编译器
将不发出任何警告。

Wi n d o w s函数M u l t i B y t e To Wi d e C h a r用于将多字节字符串转换成宽字符串。

一般来说,可以通过下列步骤将多字节字符串转换
成U n i c o d e等价字符串:
1) 调用M u l t i B y t e To Wi d e C h a r函数,为p Wi d e C h a r S t r参数传递N U L L,为c c h Wi d e C h a r参数
传递0。
2) 分配足够的内存块,用于存放转换后的 U n i c o d e字符串。该内存块的大小由前面对

M u l t B y t e To Wi d e C h a r的调用返回。
3) 再次调用M u l t i B y t e To Wi d e C h a r,这次将缓存的地址作为p Wi d e C h a r S t r参数来传递,并
传递第一次调用M u l t i B y t e To Wi d e C h a r时返回的缓存大小,作为c c h Wi d e c h a r参数。
4. 使用转换后的字符串。
5) 释放U n i c o d e字符串占用的内存块。

windows内核编程读书摘抄相关推荐

  1. 2、从汇编语言到Windows内核编程笔记(2)

    内核线程 在驱动中生成的线程一般是系统线程.系统线程所在的进程名为"System". NTSTATUS PsCreateSystemThread( OUT PHANDLE Thre ...

  2. 寒江独钓Windows内核编程-双机调试1

    今天总结一下关于双机调试,前面一直使用的是DDK包进行NT式与WDM式驱动入门,至今已进入使用WDK包进行编程了,DDK包早已落后我只作为入门因为大体内容变化不大.我使用的书是<寒江独钓Wind ...

  3. Windows内核编程实现拦截Xuetr程序

    Windows内核编程实现拦截Xuetr程序 ----TTL 寒假的时候,开始学习windows内核编程,想走近windows的内部世界.由于微软对于windows并不开源,所以有些人开始质疑:学习w ...

  4. C++Windows核心编程读书笔记(转)

    http://www.makaidong.com/(马开东博客) 这篇笔记是我在读<windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的 ...

  5. windows核心编程读书笔记(一)

    第一章:错误处理 通过GetLastError函数获得更多的错误信息,或者在监视框中使用@err,hr(vs2005)获得错误信息,而不仅仅是错误编号. 第二章:字符和字符串处理 在应用程序中,应确保 ...

  6. 【Windows内核编程】Win10/Win11通过PspCidTable取得EProcess

    温馨提示 本文的内容均在Windows 11 Enterprise(22000.466)版本下测试 不同版本的部分内容可能存在差异,但万变不离其中 [Upadate 20220803]经测试,本文内容 ...

  7. 【windows内核编程】vs2013+WDK8.1+winDbg+vmware win7虚拟机联调

    [我的]vs2013+WDK8.1+winDbg+vmwarewin7虚拟机联调 作者:zcr214 时间:2016/4/8 内核驱动开发,首先要配置开发环境,目前微软已经出到了vs2015+WDK1 ...

  8. Windows内核编程(三)-内核驱动运行与调试

    内核驱动运行与调试 驱动的运行 驱动的运行通过服务来实现. 微软规定,驱动文件必须经过微软的数字签名后,才可以运行在64位系统上,如果把没有经过签名的驱动直接放在64位操作系统中运行,结果是驱动加载失 ...

  9. Windows内核编程生成.sys文件需要签名才能加载

    作者最近因为在做内核驱动的作业,在本机WIndows10+WDK10上简单实现了一个驱动,满心欢喜放在Win7虚拟机里运行结果各种一直有提示需要签名,作者查了许多资料,包括开机F8取消强制签名,进入调 ...

最新文章

  1. Java字符串就该这样设计
  2. C++:执行i++时,汇编是怎么操作的
  3. 物联网应用和事件驱动计算重塑云服务
  4. linux 2.6内核进程调度,linux2.6内核进程调度
  5. slick edit
  6. 小狼毫五笔输入法设置
  7. 抖音起名号项目详细步骤拆分,不懂话术怎么办?
  8. 前端开发工程师必备网站
  9. 【vijos】1770 大内密探(树形dp+计数)
  10. 【ES8系列】String 补白、格式化
  11. 研究者称二维码登录劫持技术成为新社工攻击手法
  12. C/C++ struct定义
  13. VM原理(个人见解)
  14. 01组团队项目-中期总结
  15. CodeForces 786A Berzerk 博弈?BFS瞎搞
  16. 如何使用3D MAX建造出DNA双螺旋结构
  17. matplotlib学习—画等高线图
  18. CRT的快捷键 不会的快....
  19. IT人人际交往篇—战胜害羞的心态
  20. JDBCUtils工具库

热门文章

  1. py爬虫数据到本地Excel表格
  2. 使用JMeter进行接口压测
  3. ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused
  4. 信息学奥赛一本通 1955:【11NOIP普及组】瑞士轮 | OpenJudge NOI 4.1 4363:瑞士轮 | 洛谷 P1309 [NOIP2011 普及组] 瑞士轮
  5. 新增、修改、删除表字段,修改表名称
  6. Django的关系映射
  7. pkg-config / CFLAGS
  8. 关于EasyAR识别出模型后出现剧烈抖动,以及位置发生偏移
  9. CXF:是一个开源Service框架支持多种协议:SOAP、XML/HTTP、RestfulHTTP和CORBA,同时可以和Spring集成。
  10. 电影《美国队长3》观后感