|
#include<ntddk.h> //ddk为 Devrice Development Kit 设备驱动开发包 NT的意义个人理解为(New Technology)新技术,至于为啥是NT建议看看Winodws历史 这里不再挖坟!
//头文件主要是为了导入驱动程序开发所必需的 NTDDK.h 头文件,此头
文件里包含了对 DDK 的所有导出函数的声明。NT 式的驱动程序要导入的头文件是
NTDDK.h,而 WDM 式的驱动程序要导入的头文件为 WDM.h。
void Unload(PDRIVER_OBJECT drivdr_object)
{
KdPrint(("卸载成功2"));
}
/*
在进入DriverEntry函数之前会调用iopinvalid_deruver_object地址填满真个majorfuntion数组,该数组是在AEriver_object的函数指针数组它里面的每一个地址对应着相应的irp我们可以通过简单的设置这个数组,
将IRP与相应的派遣函数关联起来
*/
/*NT STATUS为一个32位的无符号长整型,驱动开发中我们一般用它来检测返回的状态,ntstatus是一个非常有用的宏定义,通常我们用NT_SUCCESS
来检测返回的状态是否正确
*/
//DeriverEntry驱动程序的入口函数 参数1位驱动对象,参数2位包含注册标的路径指向
NTSTATUS DriverEntry(PDRIVER_OBJECT pdriver_object,PUNICODE_STRING punicode_string)
{
CHAR*cstr="hello CHAR2";//定义一个ANS的字符集,该字符集的成员变量是指针
KdPrint(("%s",cstr));//初始化ANS字符集,输出并不需要取地址但是假如初始化UNICODE_STRING 字符串是需要取地址ANS的字符集是%s小写的s
WCHAR*wstr=L"hello WCAHR2";//定义一个宽字符集并且将其初始化初始化宽字符集需要加上一个L以表示该字符串是宽字符集
KdPrint(("%S",wstr));//输出该字符集的时候需要注意输出的方法。 是大写的S并不是和ANS一样 ANS是小写的 同样不用取地址符,
UNICODE_STRING ustr;//初始化驱动版的字符集,并且该字符串的初始化和ANS以及 宽字符集不一样的是 该UNICODE_STRING并不是指针而是一个成员变量,但是在后面的初始化时需要取出该成员变量的地址
RtlInitUnicodeString(&ustr,L"hello Ini Unicode2");//取出该成员变量的地址 并且将后面的字符串传递进去 并且加上L表示是宽字符集
KdPrint(("%wZ",&ustr));//输出的注意事项 该驱动版的字符串输出的写法是%wZ这样并不是和ANS的小写s以及宽字节的S, 是%加上w和大写的Z才能输出,编译器中不会报错但是在调试时会蓝屏
//rtinitunicodestring 函数是初始化驱动版的字符串,该函数需要2个参数 参数1是被初始化的字符串地址,参数而是初始化的字符串,你将那个东西初始化进参数一
pdriver_object->DriverUnload=Unload;// 指向驱动的卸载回调函数,每一个驱动框架都有一个该函数 可以为空 但是一定要写否则驱动无法下载
return STATUS_SUCCESS;//返回执行状态
} |
上一篇: 类的问题,求助下一篇: 今日一贴,HOOK你的Alt+F4,让你无法关闭!
|