驱动基础知识(一)

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中分配的资源。

你可能感兴趣的:(驱动基础)