用LookupAccountName函数如何获得Windows的唯一ID(不通过读取注册表)

netvcer 2011-05-20 06:09:06
我的WindowsXP是在公司的域里面的,如何通过LookupAccountName函数拿到一个Windows的唯一安装ID呢?

我知道LookupAccountName可以用来获取用户/组的信息,这类似于unix的getuid/getgid等。

但是我要的是一个96位的长字符串,内容相等于HKLM\SECURITY\SAM\Domains\Account下面的F/V的内容----一长串16进制字符。但是我不想直接读取注册表的内容,微软也不推荐这样做,因为那个只有SYSTEM用户能访问,其他用户要修改权限后才能看到键值。

我应该如何给LookupAccountName传递参数呢? 谢谢!
...全文
868 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangw150 2013-09-02
  • 打赏
  • 举报
回复
请问下这个函数怎么用的,怎么得到计算机sid值的,哪个参数里包含的S-1-5-21-1715567821-1336601894-1417001333-500这个值,我调用后看不到啊 代码: DWORD dwSize = 0; HANDLE hToken; PTOKEN_USER ptu; SID_NAME_USE snu; TCHAR name[MAX_PATH]; OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken); GetTokenInformation(hToken, TokenUser, NULL, dwSize, &dwSize); ptu = (PTOKEN_USER)GlobalAlloc(GPTR, dwSize); GetTokenInformation(hToken, TokenUser, ptu, dwSize, &dwSize); dwSize = sizeof(name); LookupAccountSid(NULL, ptu->User.Sid, name, &dwSize, NULL, &dwSize, &snu); cout<<name<<endl;
xiaopoy 2011-05-23
  • 打赏
  • 举报
回复
BOOL LookupAccountSid(

LPCTSTR lpSystemName, // address of string for system name
PSID Sid, // address of security identifier
LPTSTR Name, // address of string for account name
LPDWORD cbName, // address of size account string
LPTSTR ReferencedDomainName, // address of string for referenced domain
LPDWORD cbReferencedDomainName, // address of size domain string
PSID_NAME_USE peUse // address of structure for SID type
);

用这个可以获得SID
netvcer 2011-05-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hiroyukki 的回复:]
你是说这种:S-1-5-21-1715567821-1336601894-1417001333-500?
[/Quote]就是这种啊
贪食蛇男 2011-05-20
  • 打赏
  • 举报
回复
你是说这种:S-1-5-21-1715567821-1336601894-1417001333-500?

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧