注册表
+ -

枚举注册表指下路径下的项RegEnumKeyEx

2023-08-16 11 0

要枚举所有注册表子健的名称,实现原理为先用RegOpenKey函数打开要遍历的注册表子健的父键,然后先调用一次RegEnumKeyEx函数,把索引设置为0,获得第一个子健,最后用循环不断地增加索引,获取其它子健,直到返回的值为非0,表示遍历结束,最后用RegCloseKey函数关闭打开的注册表父键。

其中参数hKey表示要遍历的注册表父键的句柄,dwIndex参数表示子健的索引,以0开始,lpName参数为接收子健名称的缓冲区,lpcName参数为接收子健名称的缓冲区的长度,其它参数较少使用,可以全部传入Null。


#define MAX_KEY_LENGTH 255
void EnumerateSubItem(HKEY hKey, char* subKey)
{
    LONG lRes = RegOpenKeyExA(hKey, subKey, 0, KEY_READ, &hKey);
    if (lRes == ERROR_SUCCESS)
    {
        char szValueName[MAX_KEY_LENGTH];
        DWORD dwValueNameSize = sizeof(szValueName);
        BYTE data[256];
        DWORD dataSize = sizeof(data);
        DWORD dwIndex = 0;

        while (RegEnumValueA(hKey, dwIndex, szValueName, &dwValueNameSize, NULL, NULL, data, &dataSize) != ERROR_NO_MORE_ITEMS)
        {
            TRACE("\t%s\n", szValueName);

            dwValueNameSize = sizeof(szValueName);
            dataSize = sizeof(data);
            dwIndex++;
        }

        RegCloseKey(hKey);
    }
}

void EnumerateSubKeys(HKEY hKey, const char* subKey)
{
    HKEY hSubKey;
    if (RegOpenKeyExA(hKey, subKey, 0, KEY_READ, &hSubKey) == ERROR_SUCCESS)
    {
        CHAR    achKey[MAX_KEY_LENGTH];
        DWORD   cbName;
        DWORD   i=0;

        cbName = MAX_KEY_LENGTH;
        while (RegEnumKeyExA(hSubKey, i++, achKey, &cbName, NULL, NULL, NULL, NULL) != ERROR_NO_MORE_ITEMS)
        {
            CHAR Path[MAX_KEY_LENGTH] = { 0 };
            strcat(Path, subKey);
            strcat(Path, "\\");
            strcat(Path, achKey);
            TRACE("%s\n", achKey);
            cbName = MAX_KEY_LENGTH;

            EnumerateSubItem(hKey, Path);
        }
        RegCloseKey(hSubKey);
    }
}

例如枚举:

  EnumerateSubKeys(HKEY_LOCAL_MACHINE, "SYSTEM\\DriverDatabase\\DeviceIds");

0 篇笔记 写笔记

Windows驱动注册表写数据
实际上注册表的写入比读取要简单。因为这省略了一个尝试数据的大小的过程。直接将数据写入即可。写入值一般使用函数ZwSetValueKey 。这个函数的原型如下:NTSTATUS ZwSetValueKey( IN HANDLE KeyHandle, IN PUNICODE_STRI......
Windows驱动读注册表数据
一般使用ZwQueryValueKey来读取注册表中键的值。要注意的是注册表中的值可能有多种数据类型。而且长度也是没有定数的。为此,在读取过程中,就可能要面对很多种可能的情况。ZwQueryValueKey这个函数的原型如下:NTSTATUS ZwQueryValueKey( IN HAN......
Windows修改注册表使应用程序开机自动运行
先向大家介绍能让WINDOWS自动启动的2个文件和8个注册键1: 当前用户专用的启动文件夹 将快捷方式放入WINDOWS的用户启动文件夹中.在开始菜单的启动文件夹上,右键选中“打开”菜单如在本机win7 x64下为:C:/Users/Administrator/AppData/Roaming/M......
WDDM 子设备的枚举过程
这里的子设备指的是显示适配器(display adapter)的子设备。显示适配器子设备的枚举是通过显示端口驱动程序(display port driver), 显示Mini端口驱动程序(display miniport driver), and video present network (Vi......
使用ZwQuerySystemInformation函数枚举进程
使用ZwQuerySystemInformation函数枚举Windows系统进程typedef struct _SYSTEM_PROCESSES { ULONG NextEntryDelta; //构成结构序列的偏移量; ULONG......
Windows内核打开注册表
和在应用程序中编程的方式类似,注册表是一个巨大的树形结构。操作一般都是打开某个子键。子键下有若干个值可以获得。每一个值有一个名字。值有不同的类型。一般需要查询才能获得其类型。子键一般用一个路径来表示。和应用程序编程的一点重大不同是这个路径的写法不一样。一般应用编程中需要提供一个根子键的句柄。而驱动......
WDDM 枚举子设备
枚举子设备是通过子函数BddDdiQueryChildRelations实现的InitialData.DxgkDdiQueryChildRelations = BddDdiQueryChildRelations;函数原型为:NTSTATUS DxgkddiQueryChild......
读写注册表SetRegisterValue和GetRegisterValue
注册表DWORD CUtils::SetRegisterValue(HKEY key, LPCSTR path, LPCSTR name, LPBYTE pData, ULONG nLen, DWORD type){ HKEY hKey = NULL; DWORD err = ......
Windows下注册ASIO
在带有WOW6432 ASIO的Windows 64位系统上,32位和64位主机应用程序都可以使用ASIO。要求ASIO驱动程序的COM部分以32位和64位二进制形式提供32位主机应用程序将查询32位Windows注册表部分(Wow6432)。64位主机应用程序将查询普通Windows注册表。A......
ASIO asiosample.dll注册及注册表信息变化
在Windows下注册ASIO一节中,是需要对COM进入注册的。故我们使用Regsvr32命令注册。如:K:usbzhasioasiosdk_2.3.3_2019-06-14driverasiosampleasiosampleDebug>REGSVR32 asiosample.......
SetupAPI根据硬件ID获取驱动INF文件和驱动日期版本信息
SetupAPI根据硬件ID获取驱动INF文件和驱动日期版本信息。注释掉的代码是获取该硬件的所有可用驱动信息。代码是逐渐完善的,没想到可以直接从注册表信息中获取到。SetupDiOpenDevRegKey打开的注册表路径示例为:计算机HKEY_LOCAL_MACHINESYSTEM......
SetupDiGetDeviceRegistryProperty函数使用示例
通过SetupDiOpenDeviceInterface函数打开设备路径,在通过SetupDiGetDeviceInterfaceDetail函数获取SP_DEVINFO_DATA结构的值,有了这个结构的值就可以调用SetupDiGetDeviceRegistryProperty函数获取设备的一系列......
Windows驱动中读取注册表中的DWORD32值
ULONG GetRegisterMicChannelDWORD32(){ HANDLE hHandle = NULL; OBJECT_ATTRIBUTES oa; NTSTATUS statues; UNICODE_STRING path; UNICOD......
Windows驱动注册表(硬件、服务、类)项详解
Windows驱动有三种注册表键负责配置。它们是硬件(或实例), 类和 服务。硬件(或实例)键包含单个设备的信息。类键涉及所有相同类型设备的共同信息。服务键包含驱动程序信息。注册表路径 硬件(hardware)键[HKEY_LOCAL_MACHINESYSTEMCurr......
INF文件中HKR
在Windows驱动的注册表中,AddReg用于添加注册表项,其中有一些通用的缩写:HKCR代表HKEY_CLASSES_ROOT;HKCU代表HKEY_CURRENT_USER;HKLM代表HKEY_LOCAL_MACHINEHKU代表HKEY_USERS不过,我们有时会经常见到的是HKR,......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!