流程:
- 创建
OBJECT_ATTRIBUTES对象,InitializeObjectAttributes初始化对象 - 通过
ZwOpenKey打开注册表对象 - 通过
ZwQueryValueKey查询指定的注册表对象的值
#include <ntddk.h>VOID UnloadDriver(PDRIVER_OBJECT pDriver){ DbgPrint("卸载成功\n");}NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pRegPath){ NTSTATUS status = NULL; HANDLE hKey = NULL; OBJECT_ATTRIBUTES oKey; UNICODE_STRING uKeyname = RTL_CONSTANT_STRING(L"\\Registry\\MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"); UNICODE_STRING uKeyvalue = RTL_CONSTANT_STRING(L"DigitalProductId"); KEY_VALUE_PARTIAL_INFORMATION getkey = { 0 }; ULONG uResultLen ; InitializeObjectAttributes(&oKey, &uKeyname, OBJ_OPENIF | OBJ_CASE_INSENSITIVE, NULL, NULL); status = ZwOpenKey( &hKey, KEY_ALL_ACCESS, &oKey); if (!NT_SUCCESS(status)) { DbgPrint("打开注册表失败,错误码%d",status); return STATUS_SUCCESS; } status = ZwQueryValueKey( hKey, &uKeyvalue, KeyValuePartialInformation, &getkey , sizeof(KEY_VALUE_PARTIAL_INFORMATION), &uResultLen ); if (!NT_SUCCESS(status)) { DbgPrint("查询失败,错误码是:%d", status); } DbgPrint("查询到的值得长度为:%d", getkey.DataLength); DbgPrint("驱动加载成功\n"); pDriver->DriverUnload = UnloadDriver;}