UMDF(User-Mode Driver Framework)是Windows驱动程序框架的一种,它允许开发者以用户模式编写驱动程序,从而降低系统崩溃的风险并简化驱动程序的开发过程。UMDF驱动程序运行在用户空间,而不是内核空间。
EVT_WDF_TIMER回调函数是UMDF中用于处理定时器事件的回调函数。当定时器触发时,系统会调用这个回调函数。
设备注册表项是Windows操作系统中用于存储设备特定配置信息的键值对集合。UMDF驱动程序可以通过访问这些注册表项来获取或设置设备的配置信息。
UMDF驱动程序主要分为两类:
UMDF驱动程序适用于以下场景:
在UMDF中,可以通过WdfDeviceGetRegistryKey
函数获取设备的注册表项句柄,然后使用Windows API函数(如RegGetValue
)来读取或写入注册表项。
以下是一个简单的示例代码,展示了如何在EVT_WDF_TIMER回调函数内访问设备注册表项:
#include <windows.h>
#include <wdf.h>
NTSTATUS
MyTimerCallback(
_In_ WDFTIMER Timer
)
{
NTSTATUS status;
WDFDEVICE device;
HANDLE registryKeyHandle;
WCHAR valueName[] = L"MyValue";
DWORD valueData;
DWORD valueType;
// 获取设备对象
device = WdfTimerGetDevice(Timer);
// 获取设备注册表项句柄
status = WdfDeviceGetRegistryKey(device, PLUGPLAY_REGKEY_DRIVER, ®istryKeyHandle);
if (!NT_SUCCESS(status)) {
KdPrint(("Failed to get registry key handle: 0x%X\n", status));
return status;
}
// 读取注册表项值
status = RegGetValue(registryKeyHandle, NULL, valueName, RRF_RT_REG_DWORD, &valueType, (PVOID)&valueData, sizeof(valueData));
if (!NT_SUCCESS(status)) {
KdPrint(("Failed to read registry value: 0x%X\n", status));
} else {
KdPrint(("Registry value: %lu\n", valueData));
}
// 关闭注册表项句柄
RegCloseKey(registryKeyHandle);
return STATUS_SUCCESS;
}
RegCreateKeyEx
函数创建注册表项。DWORD
类型来读取或写入。希望这些信息对你有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云