【求助】内核开发中的一点小疑问。

asdiopss asdiopss 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
先说程序的设计思路吧。
是应用层生成一个数组 然后传到内核模块,内核模块调用dbgprint答应
应用层代码如何下
int main()
{
int stop;
HANDLE hDevice =
CreateFile(L"\\\\.\\speeddriver",
GENERIC_READ | GENERIC_WRITE,
0, // share mode none
NULL, // no security
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL); // no template

if (hDevice == INVALID_HANDLE_VALUE)
{
printf("Failed to obtain file handle to device: "
"%s with Win32 error code: %d\n",
"MyWDMDevice", GetLastError());
return 1;
}

ULONG InputBuffer[10];
UCHAR OutputBuffer[10];
for (int i = 0; i < 10; i++)
{
ULONG d;
printf("please enter the number\n");
scanf("%u",&d);
InputBuffer[i] = d;
printf("go on please\n");
}
DWORD dwOutput;
BOOL bRet;
bRet = DeviceIoControl(hDevice, IOCTL_TEST1, InputBuffer, 10, &OutputBuffer, 10, &dwOutput, NULL);
if (bRet)
{
printf("Output buffer:%d bytes\n", dwOutput);
for (int i = 0; i<(int)dwOutput; i++)
{
printf("%02X ", OutputBuffer[i]);
}
printf("\n");
}
CloseHandle(hDevice);
scanf("%d", &stop);
return 0;
}
IOCTL_TEST1为一个宏 这不是重点。
内核代码处理 IOCTL_TEST1的代码如下

NTSTATUS controldispatch(PDEVICE_OBJECT device, PIRP irp)
{
NTSTATUS stats = STATUS_SUCCESS;
DbgPrint("Enter HelloDDKDeviceIOControl\n");
PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(irp);
//获得输入输出缓冲区的大小
ULONG cbin = stack->Parameters.DeviceIoControl.InputBufferLength;
ULONG cbout = stack->Parameters.DeviceIoControl.OutputBufferLength;
ULONG code = stack->Parameters.DeviceIoControl.IoControlCode;
ULONG info = 0;
switch (code)
{
case IOCTL_TEST1:
{
DbgPrint("debug test1");//这里能正常答应
ULONG *inbuff = (PULONG)irp->AssociatedIrp.SystemBuffer;
for (ULONG i = 0; i < cbin; i++)
{
DbgPrint("%u \n", inbuff[i]);
}
UCHAR *outbuff = (PUCHAR)irp->AssociatedIrp.SystemBuffer;
memset(outbuff, 0xaa, cbout);
info = cbout;
break;
}
default:
stats = STATUS_INVALID_VARIANT;
break;
}
irp->IoStatus.Status = stats;
irp->IoStatus.Information = info;
IoCompleteRequest(irp, IO_NO_INCREMENT);
DbgPrint("Leave HelloDDKDeviceIOControl\n");
return stats;
}

打出来的东西 前几个还是正常的,但是后面就不正
我调试了应用层
发现在应用层输入的数组 是正常的。
请大神指导下,人穷分少,请勿见怪。

...全文

相关推荐

基于springboot+vue的摄影作品社区(项目源码)

基于springboot+vue的摄影作品社区(项目源码) 系统采用前后端分离的 B/S 架构。后端基于 Spring Boot 2.7.2 与 Java 1.8 构建,以 MyBatis-Plus 完成数据访问、PageHelper 实现分页,用 MySQL 8 存储业务数据;身份认证采用 Sa-Token 轻量级框架并整合 JWT 令牌,配合 Redis 实现图形验证码缓存与会话存储;前端使用 Vue 3 与 Naive UI 构建界面,由 Vite 完成构建,看板统计图表基于 ECharts 渲染。系统面向普通用户与管理员两类角色:用户端提供注册登录、作品上传与归档、多条件检索浏览、作品集管理、分类与标签管理、摄影圈专题、回收站、个人设置与公告查看等功能;管理端提供数据看板、用户管理与公告管理等功能。

加辣椒了吗?

Vue基于springboot的乡村生态旅游平台_k2864o48毕业设计源码数据库.zip

Vue基于springboot的乡村生态旅游平台_k2864o48毕业设计源码数据库

源码论文专家

Python3 datetime时区避坑指南

原生datetime.now()获取本地时间,不带时区属性,属于 naive时间,跨服务器比对会报错。带时区时间使用datetime.astimezone,强制绑定东八区时区。禁止手动加减8小时修改时差,夏令时更新会导致时间错误。时间计算:timedelta直接实现天数、小时增减,无需手动换算秒数。字符串解析使用strptime,格式化使用strftime,格式符号严格区分大小写,%Y四位年份、%y两位年份极易写错。线上时间异常大多源于时区不统一。 yc.ahsalar.com qsvsnks.yihucx.com tongjiang.xilaohan.com lq.aasmile.com xj.banutech.net

2601_97221268

前端开发基于history.js的HTML5与HTML4浏览器兼容方案:单页应用无刷新历史状态管理技术实现-jcbbroJ3l1792421687

内容概要:本文系统介绍了如何利用history.js实现单页应用(SPA)在HTML5c与HTML4浏览器间s草错发的无缝历史状态管理。通过封装原生History API并在不支持的浏览器中自动降级为哈希路由,history.js解决了因浏览器兼容性导致的后退按钮失效、URL混乱等问题。文章详细讲解了其核心机制,包括状态对象管理、自动模式切换(HTML5 pushState vs HTML4 哈希)、状态数据持久化以及针,对Safari、IE等浏\览器的兼容性修复方案,并提供了从入门到实战的完整示例,涵盖初始化、事,件监听、页面加载及性能优化技巧。;jcbbroJ3l1792421687 www.kfshiye.com www.wap.kfstjx.com www.kuaicai-mro.com lianyingjs.com www.kdd888.com

2601_97196180

MATLAB实现了约束感知混合水波和灰狼优化,用于作物规划。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

海神之光
评论
收藏 已收藏
分享
返回顶部
asdiopss
C语言 70,039 成员 243,237 内容