WDK驱动开发之路——更为复杂的交互

0环

#include <wdm.h>

void DriverUload(PDRIVER_OBJECT pdriver)
{
	
}
NTSTATUS MyRead(PDEVICE_OBJECT pobject, PIRP irp)
{
	NTSTATUS status = STATUS_SUCCESS;
	//实现简单操作 啥都不干
	PIO_STACK_LOCATION psl = IoGetCurrentIrpStackLocation(irp);

	ULONG readSize = psl->Parameters.Read.Length;
	PCHAR readBuffer = irp->AssociatedIrp.SystemBuffer;
	RtlCopyMemory(readBuffer,"this message from R0!",strlen("this message from R0!"));
	irp->IoStatus.Status = status;
	irp->IoStatus.Information = strlen("this message from R0!");
	IoCompleteRequest(irp,IO_NO_INCREMENT);
	return status;
}

NTSTATUS DriverEntry(PDRIVER_OBJECT pdriver, PUNICODE_STRING path)
{
	NTSTATUS status = STATUS_SUCCESS;
	//设置支持缓冲区读写 否则报错
	pdriver->Flags |= DO_BUFFERED_IO;
	pdriver->DriverUnload = DriverUload;
	pdriver->MajorFunction[IRP_MJ_READ] = MyRead;
	return status;
}

0环

#include "windows.h"
#include <stdio.h>
int main()
{
	HANDLE hdevice = NULL;
	DWORD realRead = 0;
	CHAR readBuffer[50] = {0};
	hdevice = CreateFile("\\\\.\\MyDevice", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	if (hdevice == INVALID_HANDLE_VALUE)
	{
		printf("Creat File Failed!!");
		return 0;
	}

	system("pause");

	//函数参数 1.文件句柄 2.缓冲区指针 3.要读取的字节数 4.真正读取的字节数
	ReadFile(hdevice,(PVOID)readBuffer,50,&realRead,NULL);
	printf("%s__%d",readBuffer,realRead);
	CloseHandle(hdevice);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值