Win10 KMD驱动模板,应用层向内核传一个字符串,内核把它转成大写

本文介绍了如何在Windows 10上编写Kernel Mode Driver(KMD),实现从应用层传递字符串到内核并将其转换为大写的功能。文章包括驱动的基本通信代码,并提醒读者注意驱动路径变化时注册表值的更新。
摘要由CSDN通过智能技术生成

说明

没什么特别的,只是用来测试在WIN10上写驱动,包含最基本的通信代码。
又水了一篇博客,哈哈哈。
注意驱动路径发生改变时,不要忘了修改注册表的值。
https://blog.csdn.net/Kwansy/article/details/113182501

驱动

#include <ntddk.h>

#define DEVICE_NAME L"\\device\\ntdrv"
#define LINK_NAME L"\\dosdevices\\ntdrv"

#define IOCTRL_BASE 0x800

#define MYIOCTRL_CODE(i) \
	CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTRL_BASE+i, METHOD_BUFFERED,FILE_ANY_ACCESS)

#define CTL_PRINT MYIOCTRL_CODE(0)

// 通用的分发函数
NTSTATUS DispatchCommon(PDEVICE_OBJECT pObject, PIRP pIrp)
{
   
	pIrp->IoStatus.Status = STATUS_SUCCESS; // 返回给应用层
	pIrp->IoStatus.Information = 0; // 读写字节数

	IoCompleteRequest(pIrp, IO_NO_INCREMENT);

	return STATUS_SUCCESS; // 返回给内核层IO管理器
}

// 我们唯一关心的IRP分发函数
NTSTATUS DispatchIoctrl(PDEVICE_OBJECT pObject, PIRP pIrp)
{
   
	ULONG i;
	ULONG nIoctrlCode = 0;
	PVOID pInputBuff = NULL;
	PVOID pOutputBuff = NULL;

	ULONG nInputBufferLength = 0;
	ULONG nOutputBufferLength = 0;
	ULONG nOutput = 0;
	PIO_STACK_LOCATION pStack = NULL;

	pInputBuff = pOutputBuff = pIrp->AssociatedIrp.SystemBuffer;

	pStack = IoGetCurrentIrpStackLocation(pIrp);
	nInputBufferLength = pStack->Parameters.DeviceIoControl.InputBufferLength;
	nOutputBufferLength = pStack->Parameters.DeviceIoControl.OutputBufferLength;

	nIoctrlCode = pStack->Parameters.DeviceIoControl.IoControlCode;

	switch (nIoctrlCode)
	{
   
	case CTL_PRINT:
		DbgPrint("%s\n", pInputBuff);
		for (i = 0; i < strlen(pInputBuff) && i < nInputBufferLength; i++)
		{
   
			((PCHAR)pInputBuff)[i] = (UCHAR)toupper(((PCHAR)pInputBuff)[i]);
		}
		nOutput = nOutputBufferLength;
		b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值