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

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;
}

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

...全文

相关推荐

Linux内核编译一点通

讲述Linux内核编译的基本方法。帮助理解Linux系统。

yin1011

微信小程序开发中的疑问解答汇总

前言 最近总结一篇微信小程序解答,作为小程序填坑人深有体会这里的变化,小程序刚发布消息的时候我就说了一个观点,只要小程序提供的组件或API丰富,稳定,兼容性好,才能实现小程序快速开发的理念,先如今还有很多组件的兼容不理想,有一些还在的优化中,因基于小程序这个平台开发限制很大,只能坐等中。。。如果想用第三方库来实现,小程序明文规定不支持第三方库的做法,这样做最终小程序审核环节百分百的不通过。 1.scroll-view 在 iOS 上存在 bug 在使用这个组件开发页面的时候,因自带滚动效果,Y 轴滑动在下拉触发 iOS 原生的橡皮筋效果时,scroll-view 出现不能滑动的 bug,在 A

weixin_38656103

对于Linux内核tty设备的一点理解

对于Linux内核tty设备的一点理解,可以初学者更加的理解linux下的TTY

lzh209901

关于双向可控硅电路的一点疑问,望高手回答!谢谢~_百度知道.mht

关于双向可控硅电路的一点疑问

wangshiying19810327

NekoOS:一点微内核

NekoOS的 一点微内核+计划的用户土地 什么是NekoOS? 没什么特别的。 只是一个小项目,我喜欢花我的空闲时间。 可能不会像Linux或任何BSD那样专业。 实施了什么? 没什么按照目前的形式,它只会启动并显示一条消息。 希望我能够以更有组织的方式(^。^)重新创建旧内核。 档案结构 系统/ 板/ rpi3 /(和其他板,尚未实现) main.c和其他文件。 用户区/ 用户国。 编译中 当前编译是通过简单地运行make来完成的 下一次推送的计划:3 ??? ??? 目标 史诗般的lulz,制作有趣。 创建一个可爱的操作系统,但在任何实际情况下都可能无用。 迷你FAT32

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