|
这只是一个驱动笔记,仅此而已
#include "ntddk.h"
void UnDevice(IN PDRIVER_OBJECT pDriverObject)
{
KdPrint(("卸载成功3"));
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING theRegistryPath)
{
HANDLE hFile=NULL;//定义一个通用句柄,用来保存在ZwCreateFile的第一个参数
IO_STATUS_BLOCK ioStatus;//是请求被处理的状态,IRP结构体中的IO状态结构,是用来只是下一个被提起的请求的最终状态
//该结构成员在CreateFile的第十个参数4中需要指向一个该结构的成员
OBJECT_ATTRIBUTES object_attributes;
NTSTATUS ntStatus;//是一个32位无符号长整形,驱动程序中哟用来检车返回的状态
OBJECT_ATTRIBUTES oa;//定义了一个OBJECT_ATTRIBUTES结构指针 使用InitializeObjectAttributes将该成员初始化
//该结构是一个不透明的OBJECT_ATTRIBUTES结构该结构将对象句柄的属性指定给打开句柄的例程。‎
UNICODE_STRING ustr;
RtlInitUnicodeString(&ustr,L"\\??\\C:\\TEST.LOG");
InitializeObjectAttributes(
&oa,//初始化一个指向OBJECT_ATTRIBUTES的结构成员,该结构是一个不透明的结构
&ustr,//指向一个UNICODE-string的缓冲区,该缓冲区可是一个对象名称或者路径
OBJ_KERNEL_HANDLE|OBJ_CASE_INSENSITIVE,//设置初始化的对象属性,为内核句柄,
NULL,//句柄 我们这里不关系设置为空
NULL//安全描述符 我们也设置为空
);
ntStatus=ZwCreateFile(//创建一个文件或者打开一个文件以及设备
&hFile,//指向文件的句柄或者设备
GENERIC_READ|GENERIC_WRITE,//指向该对象的权限可以设置为读写
&oa,//该参数指向一个OBJECT_ATTRIBUTES的结构体指针
&ioStatus,//指向一个IO_STATUS_BLOCK结构体的指针,用于接收请求操作的后完成状态,和其他的信息;
NULL//,只想一个LARGE_INTEGER的指针,该指针包含了初始分配的内存大小,以字节为单位,他用于当一个被创建或者被覆盖
//重写时,如果ALLOCATIONSIZE为NULL是,那么不指定一个分配的大小,如果没有文件被创建,此参数可以为NULL
//一般我们设置为NULL
FILE_ATTRIBUTE_NORMAL,//指定一个或多个FILE-attributes_XXX的标志,用于创建或者重写文件时设置的文件属性
//调用者一般指定该值为FILE_ATTRIBUTE_NORMAL的默认属性
FILE_SHARE_READ,//指向 共享访问的类型这里我们填写的是读文件该值可以是多个组合的值
/*ShareAccess flag
允许其他线程做的事情
FILE_SHARE_READ
读文件
FILE_SHARE_WRITE
写文件
FILE_SHARE_DELETE*/
FILE_OPEN_IF,//指定的文件存在或者不存在时所作的操作,CreateDisposition 可以是一下任意的值或者组合
/*
CreateDisposition value
文件存在时的操作
文件不存在时的操作
FILE_SUPERSEDE
替换文件
创建文件
FILE_CREATE
返回一个错误
创建文件
FILE_OPEN
打开文件
返回一个错误
FILE_OPEN_IF
打开文件
创建文件
FILE_OVERWRITE
打开文件并重写
返回错误
FILE_OVERWRITE_IF
打开文件并重写
创建文件
*/
FILE_NON_DIRECTORY_FILE|FILE_RANDOM_ACCESS|FILE_SYNCHRONOUS_IO_NONALERT,//指定驱动创建或者打开文件时需要的应用选项
//可以是多个的组合值
NULL,//设备和中间层驱动,该参数必须设置为NULL
0// 设备和中间驱动程序必须设置为此参数为0
);//ZwCreateFile 成功时返回 STATUS_SUCCESS ,失败时返回一个合适的NTSTATUS 错误码。在后面一情况中可以通过IoStatusBlock 参数的值检查错误原因。
ntStatus=ZwWriteFile(//函数功能将历程数据写入打开的文件
hFile,//文件对象的句柄,该句柄可以通过NTCreateFile或者NTopenFile获得句柄
NULL,//设置写入完成操作后的状态的事件对象句柄,设备和中间驱动程序应将此参数设置为NULL
NULL,//此参数为系统保留的参数设备和中间驱动程序必须社会设置为NULL
NULL,//此参数是系统保留为,设备和驱动程序必须设置为NULL
&ioStatus,//指向最终接受完成状态和有关请求写入操作的信息的IOSTATUS_BLOCK结构,信息成员接受的世界写入文件的字数
ustr.Buffer,//只想一个我们缓冲区的指针,该缓冲区包含需要些人的文件数据改文件数据在 RtlInitUnicodeString(&ustr,L"\\??\\C:\\TEST.LOG");被初始化进去
ustr.Length,//指向缓冲区的大小以字节为单位
NULL,//指向变量的指针,这里我们设置为NULL
NULL);//设备和中间驱动程序应当设置为NULL
ZwClose(hFile);//关闭文件句柄
//---------------------------------------------------------------
pDriverObject->DriverUnload=UnDevice;//卸载例程
return STATUS_SUCCESS;//返回状态,该状态是32位的无符号长整形,驱动程序中用该宏来确定返回的结果NT_SUCCESS来确定返回的结果
}
|
上一篇: 今日头一贴!修改MBR引导区,让你的电脑嗝屁!嗝屁!下一篇: 今日一贴!驱动环境下的文件创建
|