下列代码是想获取注册表 \\Registry\\Machine\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SvcHost 中的"netsvcs"键值里面的值。里面的值都是用\0隔开。
一下代码只能获取第一个值,比如下面打印的结果是6to4, 怎样能把里面的值全部取出来呢,
是我用的查询函数问题还是什么问题,请大家指点一下。
NTSTATUS QuerySvchostValue(){
UNICODE_STRING ustrKeyPath;
UNICODE_STRING ustrKeySvcPath;
UNICODE_STRING ustrKeySvcNameValue;
ULONG ulSize, i = 0;
HANDLE hRegedit = NULL;
NTSTATUS status;
OBJECT_ATTRIBUTES my_obj_attr ={0};
// 用来试探大小的key_infor
PKEY_VALUE_PARTIAL_INFORMATION key_infor;
// 最后实际用到的key_infor指针。内存分配在堆中
PKEY_VALUE_PARTIAL_INFORMATION ac_key_infor;
RtlInitUnicodeString(&ustrKeyPath,L"\\Registry\\Machine\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SvcHost");
//获取键值
RtlInitUnicodeString(&ustrKeySvcPath,L"netsvcs");
// 初始化OBJECT_ATTRIBUTE
InitializeObjectAttributes(
&my_obj_attr,
&ustrKeyPath,
OBJ_CASE_INSENSITIVE,
NULL,
NULL);
_asm{
int 3;
}
//打开
status=ZwOpenKey(&hRegedit,KEY_READ,&my_obj_attr);
if(!NT_SUCCESS(status))
{
// 失败处理
KdPrint(("[QuerySvchostValue: ]打开注册表 : %wZ. 失败!\n", &ustrKeyPath));
//ZwClose(&hOpenKey);
return status;
}
//先读取长度
status = ZwQueryValueKey(hRegedit, &ustrKeySvcPath, KeyValuePartialInformation, &key_infor, sizeof(key_infor), &ulSize);
if(!NT_SUCCESS(status) &&
status != STATUS_BUFFER_OVERFLOW &&
status != STATUS_BUFFER_TOO_SMALL)
{
// 错误处理
DbgPrint("读取键值长度 失败....");
DbgPrint( "status :%X\n", status );
ZwClose(hRegedit);
return status;
}
DbgPrint("读取键值长度 成功....");
// 如果没失败,那么分配足够的空间,再次读取
//ulSize = ulSize+1000;
ac_key_infor = (PKEY_VALUE_PARTIAL_INFORMATION) ExAllocatePoolWithTag(NonPagedPool,ulSize ,'Va');
if(ac_key_infor == NULL)
{
status = STATUS_INSUFFICIENT_RESOURCES;
DbgPrint("为读取的键值分配长度 失败....");
}
// 第二次调用是为了获取数据
status = ZwQueryValueKey( hRegedit, &ustrKeySvcPath, KeyValuePartialInformation, ac_key_infor, ulSize, &ulSize);
if(!NT_SUCCESS(status) &&
status != STATUS_BUFFER_OVERFLOW &&
status != STATUS_BUFFER_TOO_SMALL)
{
// 错误处理
}
KdPrint(("[QuerySvchostValue] netsvcs 里的内容是 : %ws \n", &ac_key_infor->Data));
ZwClose(hRegedit);
ExFreePool(ac_key_infor);
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!