一、在驱动程序的主函数里面注册读写函数
驱动对象->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;
四、运行效果