typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } UNICODE_STRING; typedef UNICODE_STRING *PUNICODE_STRING; typedef struct _STRING { USHORT Length; USHORT MaximumLength; PCHAR Buffer; } STRING; typedef STRING *PSTRI…
* Windows内核下操作字符串! */ #include <ntddk.h> #include <ntstrsafe.h> #define BUFFER_SIZE 1024 VOID DriverUnload(IN PDRIVER_OBJECT pDriverObject) { KdPrint(("DriverUnload Load...\n")); } //==================================================…
最近在学习驱动编程方面的内容,在这将自己的一些心得分享出来,供大家参考,与大家共同进步,本人学习驱动主要是通过两本书--<独钓寒江 windows安全编程> 和 <windows驱动开发技术详解>. 驱动开发过程中,主要使用的C语言,虽说C中定义了许多数据类型,但是一般来说在编码上还是习惯与使用WDK的规范,虽说这个不是必须的,比如有这样一句 unsigned long ul = 0; 这个数据的大小根据不同的机器不同的编译器环境略有不同,这样代码就产生了不可控的行为,但是WDK上…
在C/C++中,字符串是以零('\0')结尾的.比如,对于下面的字符串: "hello"  在最后一个字符'd'后面,还有一个我们肉眼看不见的'\0'字符,作为该字符串的结束符.所以,"Hello"其在内存中的存储形式为: 'H' 'e' 'l' 'l' 'o' '\0' 最后有一个我们看不见的'\0'.明白了字符串的结尾方式,那么如何计算字符串的长度呢?比如: 例题1:char str1[]="12345678";char str2[]={'1…
在驱动编程学习中,往往需要通过DbgPrint或者KdPrint来输出调试信息,对于Check版本,KdPrint只是DbgPrint的一个宏定义,而对于Free版本,KdPrint将被优化掉.这些输出信息可以通过DebugView对内核的监控来看到. KdPrint is identical to the DbgPrint routine in code that is compiled in a checked build environment. This routine has no e…
DbgPrint输出格式 Unicodestring  1) 直接打印字符串. DbgPrint("Hello World!"); 2) 空结尾的字符串,你可以用普通得C语法表示字符串常量 char variable_string[] = "Hello World"; DbgPrint("%s",variable_string); 3) 空结尾的宽字符串(WCHAR类型) WCHAR    string_w[] = L"Hello Wo…
UNICODE_STRING结构: typedef struct  _UNICODE_STRING { USHORT Length;                                   //字节长度,不包括终止符“NULL”    USHORT MaximumLength;                  //字符串所能占的最大字节数字符串的指针    PWCH   Buffer;                                       //字符串的地址,也…
基本规则: 只有debug mode enable的机器,产生的dump file才会保存dbgprint的buffer. 默认!dbgprint的buffer size是4k. 增加buffer size: ...\Windows Kits\8.1\Debuggers\x86\kdbgctrl.exe 比如设成 1M大小,kdbgctrl.exe -sdb 0x100000 设置每次重启之后都会失效,所以重启后都需要敲这个命令. Take care: 当我把buffer设置成0x100000(…
目录 一丶驱动是如何运行的 1.服务注册驱动 二丶Ring3跟Ring0通讯的几种方式 1.IOCTRL_CODE 控制代码的几种IO 2.非控制 缓冲区的三种方式. 三丶Ring3跟Ring0开发区别 1.什么是Ring3 什么是Ring0 四丶IRQL中断级别 五丶驱动函数的分类 六丶编写内核中的注意事项 一丶驱动是如何运行的 1.服务注册驱动 我们编写驱动.一定要知道驱动是如何运行的 首先在我们安装一个驱动的时候,会创建一个服务.(注册表) 在 HKEY_LOCAL_MACHINE\SYS…
今天写驱动用到UNICODE_STRING,就在Ring3层抠了一些源代码,学习一下,不多说了上代码了 #pragma once #include <windows.h> #include <iostream> using namespace std; #define BUFFER_SIZE 0x400 typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWCHAR Buffer; }UNIC…