驱动程序(7) WDF下DMA传输的驱动程序代码详细说明之应用程序

本文详细阐述了如何在Windows驱动程序框架(WDF)下编写应用程序,与驱动程序进行通信,包括识别并打开驱动,以及通过DeviceIoControl函数实现数据的传输与接收。首先介绍了如何手动创建应用程序项目,并确保其与驱动程序项目相关联。接着,重点解析GetDevicePath函数的使用,该函数用于查找指定PCIe设备的路径,以便后续打开驱动设备。DeviceIoControl函数则用于实际的设备控制操作,传递数据并接收驱动程序的返回数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一篇主要说明应用程序怎么去和驱动程序通信的,包括识别打开驱动程序,传递数据到驱动程序,同时接收驱动程序返回的数据。

application.c

  1. 首先是应用程序的创建,WDF里利用模板生成驱动程序时时不带有应用程序的源文件的,需要我们自己手动生成,其实就是和创建一个C语言文件一样。找到驱动程序的解决方案,右键选择‘添加’->‘新建项目’->‘测试’->‘Applications’,选择第一个就行了,保存时注意存为.c文件,因为整个项目都是C来写的,没有用C++。需要注意的就是这个文件一定要在驱动程序的那个解决方案下才行,然后在该项目的项目依赖项里勾选上你的驱动程序,表示它是依赖于驱动程序才有用的。
    在这里插入图片描述

2.代码

/*++
Module Name: application.c
Abstract:This file contains application which communicates with driversoft, including main and GetDevicePath function.
Environment: User-mode Driver Framework
Time: 20181015
--*/

#include <windows.h>
#include <winioctl.h>
#include <setupapi.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

#include "tchar.h"
#include "../PCIe/Public.h"


HANDLE hDevice = INVALID_HANDLE_VALUE;
PCHAR GetDevicePath(IN LPGUID InterfaceGuid);

int _tmain(int argc, _TCHAR* argv[])
{
   
   
	PCHAR DevicePath;
	ULONG nOutput;
	//LPDWORD count = 0;
	UNREFERENCED_PARAMETER(argc);
	UNREFERENCED_PARAMETER(argv);

	printf("Application control test starting...\n");
	//利用GUID号找到设备路径
	DevicePath = GetDevicePath((LPGUID)&GUID_DEVINTERFACE_PCIe);
	if (DevicePath == 0)
	{
   
   
		printf("ERROR: Get DevicePath failed! ErrNo:%0x\n", 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值