IDD试例 IddSampleApp

控制台程序“IddSampleApp”
因为我对C++只能算的上一知半解,所以我一开始认知“IddSampleApp”也是驱动,后来发现这个程序的入口函数与驱动的入口函数不同,所以就新建了一个控制台程序试了下,然后就成功运行了。

自己新建的控制台程序可能会报错“无法解析的外部符号 SwDeviceClose、无法解析的外部符号 SwDeviceCreate”的错误,这是因为么有为swdevice.h添加输入swdevice.lib。

添加后应该就能生成了。

代码:

#include <iostream>
#include <vector>

#include <windows.h>
#include <swdevice.h>
#include <conio.h>
#include <wrl.h>

VOID WINAPI
CreationCallback(
	_In_ HSWDEVICE hSwDevice, 
	_In_ HRESULT hrCreateResult, 
	_In_opt_ PVOID pContext,
	_In_opt_ PCWSTR pszDeviceInstanceId
)
{
	HANDLE hEvent = *(HANDLE*)pContext;

	SetEvent(hEvent);
	UNREFERENCED_PARAMETER(hSwDevice);
	UNREFERENCED_PARAMETER(hrCreateResult);
	UNREFERENCED_PARAMETER(pszDeviceInstanceId);
}

int __cdecl main(int argc, wchar_t *argv[])
{
	//告诉编译器,已经使用了该变量,不必检测警告!
	UNREFERENCED_PARAMETER(argc);
	UNREFERENCED_PARAMETER(argv);

	//创建一个事件
	HANDLE hEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
	//软件设备的HSWDEVICE句柄
	HSWDEVICE hSwDevice;
	//描述PnP用于创建软件设备的信息 https://docs.microsoft.com/en-us/windows/win32/api/swdevicedef/ns-swdevicedef-sw_device_create_info
	SW_DEVICE_CREATE_INFO createInfo = { 0 };
	PCWSTR description = L"Idd Sample Driver";

	// 这些与inf文件中的Pnp ID匹配,用于匹配驱动程序
	PCWSTR instanceId = L"IddSampleDriver";
	PCWSTR hardwareIds = L"IddSampleDriver\0\0";
	PCWSTR compatibleIds = L"IddSampleDriver\0\0";

	createInfo.cbSize = sizeof(createInfo);
	createInfo.pszzCompatibleIds = compatibleIds;
	createInfo.pszInstanceId = instanceId;
	createInfo.pszzHardwareIds = hardwareIds;
	createInfo.pszDeviceDescription = description;

	createInfo.CapabilityFlags = 
		SWDeviceCapabilitiesRemovable |
		SWDeviceCapabilitiesSilentInstall |
		SWDeviceCapabilitiesDriverRequired;

	// 创建软设备
	HRESULT hr = SwDeviceCreate(L"IddSampleDriver",
		L"HTREE\\ROOT\\0",
		&createInfo,
		0,
		nullptr,
		CreationCallback,
		&hEvent,
		&hSwDevice);

	//判断创建的结果
	if (FAILED(hr))
	{
		printf("SwDeviceCreate失败,原因为 0x%lx\n", hr);
		return 1;
	}

	// 等待回调以表明设备已创建
	printf("等待设备创建....\n");
	DWORD waitResult = WaitForSingleObject(hEvent, 10 * 1000);
	if (waitResult != WAIT_OBJECT_0)
	{
		printf("等待设备创建失败\n");
		return 1;
	}
	printf("设备已创建\n\n");

	// 现在等待用户指示设备应停止
	printf("按“ x”退出并销毁软件设备\n");
	bool bExit = false;
	do
	{
		//等待按键
		int key = _getch();
		if (key == 'x' || key == 'X')
		{
			bExit = true;
		}
	} while (!bExit);

	//停止设备
	SwDeviceClose(hSwDevice);

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值