驱动基础知识(一)
原创
©著作权归作者所有:来自51CTO博客作者y5023的原创作品,请联系作者获取转载授权,否则将追究法律责任
1、
#include <NTDDK . H>//NT式驱动的头文件
NESTATUS
DriverEntry( // 入口函数
__in PDRIVER_OBJECT DriverObject, //驱动对象的指针,__in入口参数,__out出口函数
__in PUNTCODE_STRING RegistryPath //注册表子键的字符串指针
)
{
DbgPrint("Hello, Windows Driver!");
Return STATUS_SUCCESS; //返回成功
2、
#ifndef __头文件名__H__
#define___头文件名__H__
#endif //end of __头文件名__H__
用来避免头文件重复包含导致编译错误,保证头文件只被编译一次。
3、
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, DefaultDispatch)
#pragma alloc_text(PAGE, DriverVnload)
预处理,为函数指定其是分页还是非分页内存。INIT标识只此函数在驱动加载是使用,是初始化相关函数,驱动成功加载后可以从内存卸载。PAGE标识是指此函数在驱动运行时可以被交换到磁盘上,不指定默认非分页内存。
4、
KdPrint(());打印字符串的函数,Check调试版本显示,Free版本移除,方便调试。
UNREFERENCED_PARAMETER指定参数未被引用,可以避免不必要的警告。
IRP_MJ_MAXIMUM_FUNCTION代表驱动程序最大的派遣函数指针数。
DriverObject->MajorFunction[IRP_MJ_CREATE] = DefaultDispatch; //创建操作派遣函数
DriverObject->MajorFunction[IRP_MJ_CLOSE] = DefaultDispatch; //关闭操作遣派函数
DriverObject->MajorFunction[IRP_MJ_READ] = DefaultDispatch; //读操作派遣函数
DriverObject->MajorFunction[IRP_MJ_WRITE] = DefaultDispatch; //写操作派遣函数
创建一个设备对象。
Status = IoCreateDevice( DriverObject,
Sizeof(DEVICE_EXTENSION),
&deviceName,
FILE_DEVICE_UNKNOWN,
0,
TRE,
&deviceobject);
BUFFERED_IO和DO_DIRECT_IO两种设备的标识,代表两种不同的缓冲区处理方式。
Status = IoCreateSymbolicLink(&symbolicLink , &deviceName);创建符号连接
DriverUnload(),删除设备对象和设备符号连接,释放DriverEntry中分配的资源。

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Python基础知识-5
介绍python的各种应用实例
python -
Python基础知识-4
主要记录文本与正则,排列组合等相关内容
python 文本文件 日期 正则 随机数 -
linux驱动开发基础知识
摘要:主要介绍了在进行linux驱动开发前,需要了解和掌握的一些基本知识。MobaXterm窗口设置为了解决在命令行中输入较长命令时,MobaXt
linux驱动 内核模块 linux #define -
Python基础知识(一)
学习Python
职场 基础知识 休闲 Python -
Linux基础知识(一)
计算机组成,Linux发行的版本,Linux哲学思想
计算机 组成 Linux 哲学思 -
jvm基础知识一
数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型rnAddress引用...
jvm基础知识 java 基本类型 数据