当前位置: 首页 > news >正文

Windows内核函数 - ASCII字符串和宽字符串

        本章介绍了Windows内核中字符串处理函数、文件读写函数、注册表读写函数。这些函数是DDK提供的运行时函数,他们比标准C语言的运行时函数功能更丰富。普通的C语言运行时库是不能在内核模式下使用的,必须使用DDK提供的运行时函数。

        和应用程序一样,驱动程序需要经常和字符串打交道。其中包括ASCII字符串、宽字符串,还有DDK定义的ANSI_STRING数据结构和UNICODE_STRING数据结构。

        在应用程序中,往往使用两种字符:一种是char型的字符串,负责记录ANSI字符集,它是指向一个char数组的指针,每个char型变量的大小为一个字节,字符串是以0标志字符串结束。还有一种是wchar_t型的字符串,负责描述unicode字符集的字符串。它是指向一个wchar_t数组的指针,wchar_t字符大小为两个字节,字符串以0标志字符串结束。ANSI字符的构造如下:

        char* str1 = "abc";

        str1指针指向的内容是 61 626 300。

        UNICODE字符的构造如下:

        wchar_t *str2 = L"abc";

        str2指针指向的内容是6100 620 063 000 000 。在构造字符串的时候使用一个关键字“L”。编译器会自动生成所需要的宽字符。

        在驱动程序开发中,DDK将char和wchar_t类别,替换成CHAR和WCHAR类别。对于这两类的字符串,DDK提供了相应的字符串操作函数,例如,strcpy、sprintf、strcat、strlen等。但DDK的帮助文档中,不会查到这些函数的使用方法。微软公司不鼓励直接使用这些函数,取而代之的使用同样功能的宏。我们可以用Depends工具查看NTOSKRSL.EXE导出的函数。如下图所示:

        

图1.1 Depends查看NTOSKRSL.EXE导出表

        驱动程序可以用KdPrint打印ASCII字符串和宽字符串。KdPrint类似于C语言的printf函数。例如,打印一个ASCII字符串:

CHAR *str1 = "Hello";
KdPrint(("%s\n", str1)); // 注意是小写%s

打印一段宽字符时需要:

WCHAR *str2 = L"Hello";
KdPrint(("%S\n", str2)); // 注意是大写%S


 

http://www.lryc.cn/news/350274.html

相关文章:

  • 从零开始学习MySQL 事务处理
  • 字符数组以及字符串相关的几个函数
  • AOP面向切面编程
  • C# WinForm —— 15 DateTimePicker 介绍
  • SpringBoot中六种批量更新Mysql 方式效率对比
  • 【SpringBoot】SpringBoot整合jasypt进行重要数据加密
  • 【Go语言入门学习笔记】Part1.梦开始的地方
  • 数据特征降维 | 主成分分析(PCA)附Python代码
  • 当服务实例出现故障时,Nacos如何处理?
  • 遥感数据集制作(Potsdam数据集为例):TIF图像转JPG,TIF标签转PNG,图像重叠裁剪
  • 根据web访问日志,封禁请求量异常的IP,如IP在半小 时后恢复正常则解除封禁
  • 2.go语言初始(二)
  • MQTT对比HTTP
  • 暴力数据结构之二叉树(堆的相关知识)
  • 死锁调试技巧:工作线程和用户界面线程
  • 蓝桥杯-外卖店优先级(简单写法)
  • VueRouter使用总结
  • Flink checkpoint 源码分析- Checkpoint snapshot 处理流程
  • Leaflet.canvaslabel在Ajax异步请求时bindPopup无效的解决办法
  • Go 处理错误
  • python读取excel数据写入mysql
  • flutter日期选择器仅选择年、月
  • 素数筛详解c++
  • 【Python超详细的学习笔记】Python超详细的学习笔记,涉及多个领域,是个很不错的笔记
  • TINA 使用教程
  • weblogic 任意文件上传 CVE-2018-2894
  • 我的第一个网页:武理天协
  • 机器学习笔记 KAN网络架构简述(Kolmogorov-Arnold Networks)
  • 基于网络爬虫技术的网络新闻分析(二)
  • Java--初识类和对象