Win2000下,以超管身份登陆,想取得本机所有的登陆用户名。我通过注册表可以读出某些信息,但不是太准确,比如我修改了超管的用户名,但注册表里的还是Administrator谢谢指教。

解决方案 »

  1.   

    我们通常理解的登陆是通过我们手动输入用户名和密码在登陆的,但实际上,通过LogonUser和CreateProcessWithLogonW都可以登陆用户,只要你有权限,应该先枚举所有进程,用OpenProcessToken获得这些进程的主令牌,再GetTokenInformation获得令牌的拥有者的sid,然后再获得用户名。实际上所有的内核对象都可以以一定用户的令牌创建,所以上面的办法是不全的,但枚举所有内核对象几乎是不可能的。
      

  2.   

    可能是我表述的有点问题,我是要列出系统里存在的所有的Logon用户名,包括未登陆的,就像“管理工具”->“计算机管理”里面的“本地用户和组”->用户,里面列出来的用户名一样,当然Guest等无关紧要的用户名可以不要如果上面的很难实现,可以采用搜索C:\Documents and Settings\下的目录名,可以取得部分用户名,但如果用户名中途被修改过,这里的路径是不会同时发生变化的,所以不太准确。当然,注册表里还可以取得当前登陆的用户名,但是如果不是超管的话,或者有多个超管的时候,这种方法有可能取不到所有的用户
      

  3.   

    谢谢,已经搞定,注册表里可以查到相应用户名的sid,然后使用LookupAccountSid()得到用户名即可,谢谢tankbattle(坦克大战)的提示!