一、在驱动程序的主函数里面注册读写函数
驱动对象->MajorFunction[IRP_MJ_WRITE] = IRP处理函数; 驱动对象->MajorFunction[IRP_MJ_READ] = IRP处理函数;
二、在MFC程序中添加一个按钮,实现MJ读写操作
1、写操作
void CtestDlg::OnBnClickedButtonMjxcz() { char 要写入的内容[] = "nxyn:我是mj要写入的内容"; DWORD 返回的长度 = 0; WriteFile(设备句柄, 要写入的内容,sizeof(要写入的内容),&返回的长度,0); }
2、读操作
void CtestDlg::OnBnClickedButtonMjdcz() { char 要读入的内容[] = {0}; DWORD 读取的长度 = 0; ReadFile(设备句柄, 要读入的内容, sizeof(要读入的内容), &读取的长度, 0); }
三、在驱动程序里面实现MJ读写操作
1、写操作
int* 缓冲区3 = (int*)IRP指针->UserBuffer; KdPrint(("nxyn:应用层缓冲区mj写入驱动=%s", 缓冲区3));
2、读操作
int* 要写出的地址 = (int*)IRP指针->UserBuffer; char 写出的内容[] = "nxyn:我是mj要写出的内容"; ULONG 长度 = sizeof(写出的内容); if (要写出的地址&&irpStackL->Parameters.Read.Length>=长度) { RtlCopyMemory(要写出的地址, 写出的内容, 长度); } IRP指针->IoStatus.Information = sizeof(写出的内容);//设置操作的字节数 IRP指针->IoStatus.Status = STATUS_SUCCESS;//返回状态 IoCompleteRequest(IRP指针, IO_NO_INCREMENT);//完成一个IRP请求 KdPrint(("nxyn:IRP函数处理完毕")); return STATUS_SUCCESS;
四、运行效果