本文主要是介绍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_infoSW_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;
}
这篇关于IDD试例 IddSampleApp的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!