阅读:2272回复:22
在驱动中能够得当前登录的用户名吗? |
|
最新喜欢:![]()
|
沙发#
发布于:2002-06-07 17:03
是登录以后运行的。
|
|
|
板凳#
发布于:2002-06-07 14:57
你的驱动程序是什么时候运行这部分代码的啊!用户登陆之前还是之后啊?
|
|
地板#
发布于:2002-06-07 14:00
我为什么在内核态打开这个键失败?
代码如下: BOOLEAN ret = FALSE; NTSTATUS status; OBJECT_ATTRIBUTES Attributes; HANDLE LogonKey; ULONG BufferSize, ResultLength; PVOID Buffer = NULL; PKEY_VALUE_PARTIAL_INFORMATION pValuePartialInfo; // // The registry key that the current logon usre name stays. // WCHAR UserKey[] = L\"\\\\Registry\\\\User\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\"; UNICODE_STRING Logon; WCHAR UserName[] = L\"\\\\Logon User Name\"; UNICODE_STRING LogonUser; __try { __try { // // Initialize the registry key. // RtlInitUnicodeString( &Logon, UserKey ); InitializeObjectAttributes( &Attributes, &Logon, OBJ_CASE_INSENSITIVE, NULL, NULL ); //Void return status = ZwOpenKey( &LogonKey, KEY_READ, &Attributes ); if( !NT_SUCCESS(status) ) { LogonKey = NULL; return( ret=FALSE ); } BufferSize = sizeof(KEY_VALUE_PARTIAL_INFORMATION) + USERNAMELEN; Buffer = ExAllocatePool(NonPagedPool, BufferSize); if( !Buffer ) return( ret=FALSE ); // // Read the \"Logon User Name\" from the registry key // RtlInitUnicodeString( &LogonUser, UserName ); status = ZwQueryValueKey( LogonKey, &LogonUser, KeyValuePartialInformation, Buffer, BufferSize, &ResultLength); if( NT_SUCCESS(status) ) { pValuePartialInfo = (PKEY_VALUE_PARTIAL_INFORMATION) Buffer; ASSERT( pValuePartialInfo->Type == REG_SZ ); // gMaxRecordsToAllocate = *((PLONG)&(pValuePartialInfo->Data)); RtlCopyMemory( pGlobalData->LogonUserName, (PCHAR)(pValuePartialInfo->Data), pValuePartialInfo->DataLength ); } else { RtlCopyMemory( pGlobalData->LogonUserName, \"???\", 3 ); } } __except( EXCEPTION_EXECUTE_HANDLER ) { DbgPrint((\"Read registry key value error\\n\")); } } __finally { if( Buffer) ExFreePool( Buffer ); if( LogonKey ) ZwClose( LogonKey ); } return ret; |
|
|
地下室#
发布于:2002-05-23 14:32
不谢不谢~~我觉得应该是不会变的!两外一个思考反向是2000的本地策略处得到SID,然后由SID换成用户名!靠查两个以上的键实现,比较麻烦,但是是绝对可靠的!因为本地策略是一定执行的,而且绝对是依靠这几个键,具体的键名我忘了!你可以用REGMON跟一下啊!就跟SHELL。DLL修改注册表的就可以了!你可以先准备好修改一个什么东西,然后打开REGMON,再应用一下,马上就可以看见改了什么~~那个取消驱动签名的方法我也是这么研究来的!
|
|
|
5楼#
发布于:2002-05-23 11:23
哈哈找到了!刚刚研究了一下发现了这个![HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Logon User Name] 这个值我测试以后,发现可以。但不知如果使用某种安全设置,它会不会被删掉。 谢谢.X.T.I.M. |
|
|
6楼#
发布于:2002-05-23 10:44
不用争了!上次我说的那个KEY实验通过!证明在2000下有效~~其他系统没做实验!
|
|
|
7楼#
发布于:2002-05-23 08:52
看看这个
HKCU \\Network\\G |
|
8楼#
发布于:2002-05-22 21:28
2000下好像没有WINLOGIN这个键啊
|
|
|
9楼#
发布于:2002-05-22 09:55
对于这些加载值在DDK里面有说明啊!
|
|
10楼#
发布于:2002-05-21 17:11
[quot]0和1肯定是不可以的只有2有可能可以!3肯定是可以的!除非你写了一个程序是在登陆之前运行[/quot]
To guardee: 你说的不行指的是什么意思?我不太理解。我的意思是当Start=3时,驱动程序是手动加载的,一定是在登录以后。那当Start为0,1或2 时,是在logon之前加载还是在logon后加载?还是因Start的值而异? |
|
|
11楼#
发布于:2002-05-21 16:40
0和1肯定是不可以的只有2有可能可以!3肯定是可以的!除非你写了一个程序是在登陆之前运行
|
|
12楼#
发布于:2002-05-21 16:23
先谢谢各位的回答。
我找到一Winlogon子键,发现的用户登录确能显示当前的用户名,但不知是否100%可靠。 HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\AltDefaultUserName 另外一个关于驱动程序加载时间的问题。在注册表中将驱动程序的Start值置为0、1、2则自动加载,不需要手动加载。但是这个加载是在用户登录之前还是登录之后呢?我没有真正测试过,不知有哪位兄弟知道? 这个顺序是否还与Start值有关? |
|
|
13楼#
发布于:2002-05-21 15:48
哈哈找到了!刚刚研究了一下发现了这个![HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Logon User Name]
Logon User Name这个项的值是个REG_SZ!就是当前登陆的用户名!! |
|
|
14楼#
发布于:2002-05-21 15:39
但是我敢肯定的说可以在HKCU里面做文章!每个用户的PROFILER是不一样的!朝这个思路去找!
|
|
|
15楼#
发布于:2002-05-21 15:37
呀~~原来我和C++说的是同一个东西~~晕~~
HKCU\\Environment TEMP HKCU\\Environment Data type Range Default value REG_EXPAND_SZ Path %USERPROFILE%\\Temp |
|
|
16楼#
发布于:2002-05-21 15:35
有个很弱的部分~~不知道大家同不同意!先得到TEMP目录,然后返回两层就是UER-NAME命名的目录!这样就得到了!至于怎么得到TEMP目录RES KIT里面有!我好象看过~~我找找~~
|
|
|
17楼#
发布于:2002-05-21 15:02
谢谢,两位的指点!
|
|
18楼#
发布于:2002-05-21 14:56
Guardee, 我注意了这个键,发现无论以哪个用户名登录,都是显示同一个用户。
|
|
|
19楼#
发布于:2002-05-21 10:30
不知道我说的对你有没有用!
在注册表的HKEY_CURRENT_USER下有一个键叫 Volatile Environment他有一个变量叫做APPDATA的,他的值上面有你需要的,这是我临时看的! 具体的你去研究吧! :D :D :D :D :D :D :D :D |
|
上一页
下一页