能力值:
( LV12,RANK:300 )
|
-
-
2 楼
HKEY_CLASSES_ROOT其实是HKEY_LOCAL_MACHINE\SOFTWARE\Classes的映射,所以直接访问后者就行了。
HKEY_CURRENT_USER则是HKEY_USERS下的某一个子项。关键是要找到是哪一个。搜索一下“驱动中获取用户名”会得到一些对你有用的信息。观察了一下HKEY_USERS下的各个子项,好像只有当前登录用户使用的那个会出现Volatile Environment子项(其子键中包含用户环境变量信息),不知道是否可以通过这个来判断。
http://bbs.pediy.com/showthread.php?t=91760这一帖的用户遇到跟你一样的问题,提到了一个非文档的API,可以考虑使用。
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
谢谢轩辕小聪~!
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
RtlFormatCurrentUserKeyPath(&CurrentUserKeyPath);
InitializeObjectAttributes(&ObjectAttributes,&CurrentUserKeyPath,OBJ_CASE_IN
SENSITIVE,NULL,NULL);
Status = ZwOpenKey(&CurrentUserKeyHandle, KEY_READ, &ObjectAttributes);
呵呵,a了别人的代码,试验一下看可以不!
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
哈哈,晚上看了一下弄出来了!不敢保留,与大家分享一下!
谢谢轩辕!
关键代码
1.#pragma comment(lib,"ntdll.lib")
2.extern "C"
3.NTSTATUS RtlFormatCurrentUserKeyPath( OUT PUNICODE_STRING RegistryPath );
1.这个函数依赖 ntdll.lib
2.申明一下这个函数 因为是 c 所以extern"c"
下面是monitor KdPrint的信息
UNICODE_STRING CurrentUserKeyPath;
NTSTATUS ntStatus1 = RtlFormatCurrentUserKeyPath(&CurrentUserKeyPath);
if(NT_SUCCESS(ntStatus1))
{
KdPrint(("the current userKeyPath %wZ",&CurrentUserKeyPath));
}
else
{
KdPrint(("read current error"));
}
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
靠,有点错误,怎么不是当前用户的,是令一个用户么?
上面的有点错误!不要误导了啊!
大牛们,这是为什么呢?难道只能扫描!Volatile Environment了么?
|
能力值:
( LV12,RANK:420 )
|
-
-
7 楼
zwquerykey,r3配合一下~
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
好的,谢谢,呵呵!我看看!
qihoocom
又见着活的牛人了!
|
能力值:
( LV3,RANK:20 )
|
-
-
9 楼
zwquerykey是获得,多少个子项!
r3配合,你的意思,是r3给驱动发个信息么?
能详细说一下么?主要我很菜!大牛请原谅一下!
|
能力值:
( LV12,RANK:760 )
|
-
-
10 楼
RtlFormatCurrentUserKeyPath
读取的是当前进程的user的keypath
CurrentProcess是system自然,读出来的userkeypath。。。
|
能力值:
( LV12,RANK:300 )
|
-
-
11 楼
试试这样:
Ring3程序加载这个驱动后,用DeviceIoControl,驱动在IRP_MJ_DEVICE_CONTROL响应例程里用RtlFormatCurrentUserKeyPath,这样由于响应例程是在相应的进程中,就应该可以得到相应进程的用户对应的路径了。
刚刚试过了,这个方法OK,可以得到Ring3程序所属用户(非SYSTEM)的路径。
另外,在Windbg下看了RtlFormatCurrentUserKeyPath,得到的UNICODE_STRING的Buffer用完后应该要自己ExFreePool的吧。
|
能力值:
( LV12,RANK:760 )
|
-
-
12 楼
不是ExFreePool是RtlFreeUnicodeString吧~
|
能力值:
( LV12,RANK:300 )
|
-
-
13 楼
RtlFreeUnicodeString的实质就是对UNICODE_STRING的Buffer调用ExFreePool,并把UNICODE_STRING的所有域清0,所以也可以自己调用ExFreePool把Buffer释放掉啊
当然用RtlFreeUnicodeString比较合规范一点
|
能力值:
( LV12,RANK:760 )
|
-
-
14 楼
不合规范,要重写~~
现在很XX~
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
有意思,收藏
|
|
|