需要从非LocalSystem进程访问“NtSetUuidSeed”

时间:2009-08-10 10:52:46

标签: c++ windows

我试图通过NtAllocateUuids获取Uuid或只是调用UuidCreateSequential, 但Windows无法为我的笔记本电脑获取以太网或令牌环硬件地址。 因此,当系统启动时,Windows会将UuidSeed设置为随机数而不是给定的MAC。 - >只有在下次重新启动系统之前,才能保证唯一性。

我试图用NtSetUuidSeed手动设置UuidSeed,但我收到了STATUS_ACCESS_DENIED错误。 “Windows NT / 2000 Native API Reference”有以下注释:   - 调用线程的标记必须具有SYSTEM_LUID的AuthenticationId

有没有办法通过以管理员身份运行的进程实现此目的? 像ImpersonateLoggedOnUser()这样的东西可以工作,但afaik这也只能作为LocalSystem访问:/

Thx;)

2 个答案:

答案 0 :(得分:0)

您可以使用AT命令创建程序并安排运行它。调度服务作为本地系统帐户运行。在Vista上,情况有所不同,我不确定这是否可能。你当然可以编写自己的服务。

答案 1 :(得分:0)

ImpersonateLoggedOnUser使用从以下位置返回的令牌句柄正常工作:

HANDLE GetLSAToken()//从“系统”进程复制系统令牌

BOOL CreatePureSystemToken(HANDLE& hToken)//创建一个新的系统令牌

http://www.codeproject.com/KB/system/RunUser.aspx CoreCode.cpp