首页 > TAG信息列表 > pIrp

Windows驱动开发学习

链表的使用 main.h #pragma once #include<ntddk.h> typedef struct _MYDATA { LIST_ENTRY ListEntry; DWORD64 Id; UNICODE_STRING Name; }MYDATA,*PMYDATA; extern "C" { VOID DrvUnload(IN PDRIVER_OBJECT pDriver); NTSTATUS DriverEntry(IN PDRIVER_OBJ

64内核开发第十五讲 IRP 派遣函数 与 通信。 驱动框架补充

目录IRP 派遣函数 与通信方式一丶IRP1.1 IRP介绍 理论知识1.2 IRP的类型1.3 派遣函数1.4 设备对象 与符号链接1.5 IRP堆栈介绍二丶内核与应用层的通信方式 缓存方式(缓冲区方式)2.1 缓存方式2.2 读取 写入 控制等IRP的大小获取2.3 缓存方式派遣函数中的使用例子三丶MDL方式(直接IO方

系统调用篇——总结与提升

写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图。由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新。 如有好的建议,欢迎反馈。码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作。如想转载,请把我的转载信

Windows内核-7-IRP和派遣函数

Windows内核-7-IRP和派遣函数 IRP以及派遣函数是Windows中非常重要的概念。IRP 是I/O Request Pocket的简称,意思是I/O操作的请求包,Windows中所有User和Kernel之间的交流都会被封装成一个IRP结构体,然后不同的IRP会被派遣到不同的派遣函数里面,通过派遣函数来实现I/O操作。 IRP type

【系统安全003】NT驱动框架

介绍 这是一份NT驱动框架的源码,包含了驱动和加载器,驱动编译环境是 vs2019+wdk10,加载器编译环境是vs2010。下面给出在 win10 上的运行结果: 驱动代码 #include <ntddk.h> #define DEVICE_NAME L"\\device\\ntdrv" #define LINK_NAME L"\\dosdevices\\ntdrv" #define IOCTRL_

Windows驱动开发易错点总结

总结一下在windows驱动开发中,经常会犯的错误,加以注意! 问题1: 没有完成IRP 这是个新手非常容易犯的错误,没有设置IRP状态,完成IRP。这会导致,调用该驱动的应用程序,无法关闭,即使被kill,也会变成系统进程存在,因为有资源在内核中没清理干净。 pIrp->IoStatus.Status = ntStatus; pIrp->IoS

驱动程序与应用程序交互事件对象

驱动程序代码 #pragma once #define IO_CONTROL_TRANSMIT_EVENT CTL_CODE(FILE_DEVICE_UNKNOWN,0x8080,METHOD_BUFFERED,FILE_ANY_ACCESS) typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT pDevObj; UNICODE_STRING ustrDeviceName; UNICODE_STRING ustrSymbolLi

Windows驱动开发-r3和r0通信

用户部分代码: int main() { HANDLE hDevice = CreateFile(L"\\\\.\\MyTest", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hDevice==INVALID_HANDLE_VALUE) { printf("Failed to obtain