找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 6466|回复: 5

求助:IoRegisterShutdownNotification关机回调里HKCU写进去

[复制链接]

7

主题

67

回帖

2

精华

钻石会员

积分
2565
发表于 2015-5-19 18:55:41 | 显示全部楼层 |阅读模式
求助:IoRegisterShutdownNotification关机回调里HKCU写进去
ShutDownDispatch里面写HKLM没问题,但是写HKCU就写不进去了,这个时刻各种关掉了,请问能有什么办法在ShutDownDispatch里写HKCU吗?

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2015-5-20 08:23:01 | 显示全部楼层
TALK IS CHEAP, SHOW YOUR CODE.

30

主题

693

回帖

0

精华

钻石会员

积分
2815
发表于 2015-5-20 12:57:17 | 显示全部楼层
thanks

7

主题

67

回帖

2

精华

钻石会员

积分
2565
 楼主| 发表于 2015-5-20 16:52:32 | 显示全部楼层
  1. NTSTATUS HKEY_CURRENT_USER_TEST(PWCHAR pTest)
  2. {
  3.         UNICODE_STRING uPath;
  4.         OBJECT_ATTRIBUTES oa;
  5.         HANDLE hKey = NULL, hUserKey = NULL, hSubKey = NULL;
  6.         PKEY_VALUE_PARTIAL_INFORMATION pInfo;
  7.         ULONG len = 8192;
  8.         NTSTATUS ret = STATUS_UNSUCCESSFUL;
  9.         ULONG i = 0;
  10.         if (*pTest)
  11.         {
  12.                 RtlInitUnicodeString(&uPath, L"\\Registry\\User");
  13.                 InitializeObjectAttributes(&oa, &uPath, OBJ_CASE_INSENSITIVE, (HANDLE)NULL, NULL);
  14.                 if (NT_SUCCESS(ret = ZwOpenKey(&hUserKey, KEY_ALL_ACCESS, &oa)))
  15.                 {
  16.                         for (i = 0; ; ++ i)
  17.                         {
  18.                                 PKEY_BASIC_INFORMATION pInfo = NULL;
  19.                                 if (STATUS_BUFFER_TOO_SMALL == (ret = ZwEnumerateKey(hUserKey, i, KeyBasicInformation, NULL, 0, &len)))
  20.                                 {
  21.                                         len += 2;
  22.                                         if (pInfo = (PKEY_BASIC_INFORMATION)ExAllocatePoolWithTag(NonPagedPool, len, '_EL_'))
  23.                                         {
  24.                                                 if (NT_SUCCESS(ret = ZwEnumerateKey(hUserKey, i, KeyBasicInformation, pInfo, len, &len)))
  25.                                                 {
  26.                                                         *(PWCHAR)((PCHAR)pInfo->Name + pInfo->NameLength) = 0;
  27.                                                         DbgPrint(("TestHKCU:%-4d [INFO] find user %ws.\n", __LINE__, pInfo->Name));
  28.                                                         RtlInitUnicodeString(&uPath, pInfo->Name);
  29.                                                         InitializeObjectAttributes(&oa, &uPath, OBJ_CASE_INSENSITIVE, hUserKey, NULL);
  30.                                                         if (NT_SUCCESS(ret = ZwOpenKey(&hKey, KEY_ALL_ACCESS, &oa)))
  31.                                                         {
  32.                                                                 RtlInitUnicodeString(&uPath, L"SOFTWARE");
  33.                                                                 InitializeObjectAttributes(&oa, &uPath, OBJ_CASE_INSENSITIVE, hKey, NULL);
  34.                                                                 if (NT_SUCCESS(ret = ZwOpenKey(&hSubKey, KEY_ALL_ACCESS, &oa)))
  35.                                                                 {
  36.                                                                         RtlInitUnicodeString(&uPath, L"TEST");
  37.                                                                         if (NT_SUCCESS(ret = ZwSetValueKey(hSubKey, &uPath, 0, REG_SZ, pTest, wcslen(pTest) * 2 + 2)))
  38.                                                                         {
  39.                                                                                 DbgPrint(("TestHKCU:%-4d [INFO] reg %ws modifyed.\n", __LINE__, uPath.Buffer));
  40.                                                                         }
  41.                                                                         else
  42.                                                                         {
  43.                                                                                 DbgPrint(("TestHKCU:%-4d [ERRO] ZwSetValueKey failed with 0x%p.\n", __LINE__, ret));
  44.                                                                         }
  45.                                                                         ZwClose(hSubKey);
  46.                                                                 }
  47.                                                                 else
  48.                                                                 {
  49.                                                                         DbgPrint(("TestHKCU:%-4d [ERRO] ZwOpenKey failed with 0x%p.\n", __LINE__, ret));
  50.                                                                 }
  51.                                                                 ZwClose(hKey);
  52.                                                         }
  53.                                                         else
  54.                                                         {
  55.                                                                 DbgPrint(("TestHKCU:%-4d [ERRO] ZwOpenKey failed with 0x%p.\n", __LINE__, ret));
  56.                                                         }
  57.                                                 }
  58.                                                 else
  59.                                                 {
  60.                                                         DbgPrint(("TestHKCU:%-4d [ERRO] 2nd ZwEnumerateKey failed with 0x%p.\n", __LINE__, ret));
  61.                                                 }
  62.                                                 ExFreePoolWithTag(pInfo, '_EL_');
  63.                                         }
  64.                                         else
  65.                                         {
  66.                                                 DbgPrint(("TestHKCU:%-4d [ERRO] ExAllocatePoolWithTag failed with size %d.\n", __LINE__, len));
  67.                                         }
  68.                                 }
  69.                                 else
  70.                                 {
  71.                                         if (ret != STATUS_NO_MORE_ENTRIES)
  72.                                         {
  73.                                                 DbgPrint(("TestHKCU:%-4d [ERRO] ZwEnumerateKey failed with 0x%p.\n", __LINE__, ret));
  74.                                         }
  75.                                         break;
  76.                                 }
  77.                         }
  78.                         ZwClose(hUserKey);
  79.                 }
  80.                 else
  81.                 {
  82.                         DbgPrint(("TestHKCU:%-4d [ERRO] ZwOpenKey failed with 0x%p.\n", __LINE__, ret));
  83.                 }
  84.         }
  85.         return STATUS_SUCCESS;
  86. }

  87. DRIVER_DISPATCH ShutDownDispatch;
  88. NTSTATUS ShutDownDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
  89. {
  90.         HKEY_CURRENT_USER_TEST(L"ofcourseteststring");  //在这个时刻总是失败的
  91.         return STATUS_SUCCESS;
  92. }

  93. NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
  94. {
  95.     ..................
  96.     DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = ShutDownDispatch;
  97.     ..................
  98.     if(!NT_SUCCESS(IoRegisterShutdownNotification(pDeviceObject)))
  99.     {
  100.         DbgPrint(("[INFO] IoRegisterShutdownNotification faild."));
  101.     }
  102.     //HKEY_CURRENT_USER_TEST(L"ofcourseteststring");  //这里是成功的
  103.     return ret;
  104. }
复制代码

7

主题

67

回帖

2

精华

钻石会员

积分
2565
 楼主| 发表于 2015-5-20 16:54:51 | 显示全部楼层
请TA大神指点谜经

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2015-5-20 18:35:26 | 显示全部楼层

1.不要说什么“TA大神”,也不要点名指定谁来解答问题。这么说等于拒绝了其他人回答。
2.程序出问题,拿出WINDBG进行调试。我没有研究过类似的问题。只不过我怎么记得内核里不存在什么HKCU,HKCU是USERS下一个分支的“马甲”,内核里写HKCU应该是\\registry\\user\\xxx这样子的路径。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表