|
本帖最后由 wl1383838438 于 2020-2-12 22:55 编辑
这只是hello world的驱动笔记,
NTSTATUS 是32位无符号长整型型,在驱动开发中常用该类型来返回一个状态--STATUS_SUCCESS用来确定返回的状态是否成功
DriverEntry驱动例程的入口函数,类似于(C++的MAIN),在进入该函数钱IO管理器会调用
IOPInvalid_device_object地址填满整个MajoFuntion数组,该数组的函数指针,对应着相应的IRP(IRP是一个结构)
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pdriver_object,IN PUNICODE_STRING punicode_string)
{
UNICODE_STRING uScr,uDes;
// UNICODE_STRING 结构是通过使用各种本地安全认证(LSA)的功能来指定一个 Unicode 字符串。
//该结构的三个成员lenght,buffer MaxinmumLenght,
RtlInitUnicodeString(&uScr,L"hello");
uDes.Buffer=(PWSTR)ExAllocatePool(PagedPool,BUFF_SIZE);
//枚举POOL_TYPE&;指定要分配的系统内存类型。
//PagedPool-分页池;,这是可分页的系统内存。分页池只能在 IRQL < DISPATCH_LEVEL进行分配和访问。;
//;BUFF_SIZE-指定要分配的字节数。
uDes.MaximumLength=BUFF_SIZE;
//;RtlCopyUnicodeString;例程将源字符串复制到目标字符串。;
//;uDes指向目标字符串缓冲区的指针。此参数指向;UNICODE_STRING‎‎结构。
//uScr 指向源字符串缓冲区的指针。此参数指向;UNICODE_STRING;结构。
RtlCopyUnicodeString(&uDes,&uScr);
KdPrint(("拼接前%wZ",&uDes));
//RtlAppendUnicodeToString;例程将提供的 Unicode 字符串连接到缓冲的 Unicode 字符串。
if (STATUS_SUCCESS==RtlAppendUnicodeToString(&uDes,L"world"))
{
KdPrint(("STATUS_SUCCESS"));
}
KdPrint(("拼接后%wZ",&uDes));
RtlFreeUnicodeString(&uDes);
pdriver_object->DriverUnload=Unload;// 指向驱动的卸载回调函数,每一个驱动框架都有一个该函数 可以为空 但是一定要写否则驱动无法下载
return STATUS_SUCCESS;//返回执行状态
} |
上一篇: 今日一贴,HOOK你的Alt+F4,让你无法关闭!下一篇: 来个驱动大佬帮忙看看,(已解决)
|