使用`GetUserNameEx`获取计算机主体名称

时间:2013-07-16 17:38:00

标签: windows winapi domaincontroller windows-principal

我尝试使用以下代码获取运行为Network Service的服务的计算机主体名称。

BOOLEAN bError = GetUserNameEx(NameUserPrincipal, buffer, &buf_len);

由于我的计算机的域名为Service-Windows@example.com,因此我预计buffer中的结果是相同的。 但是,返回的服务主体名称为WIN-SC4RKQUKM4D@example.com。 我确定我已更改计算机并将其添加到域example.com

我不知道异常的主要名称。可能是什么问题? 任何提示都将受到高度赞赏。

更新


我正在域控制器上运行该服务,不知道这是否会干扰结果。

谢谢你,最诚挚的问候!

1 个答案:

答案 0 :(得分:1)

在查找网络服务用户帐户的用户名时,我不希望获得计算机名称。如果您使用LookupAccountSid查找,我希望看到NT AUTHORITy\NETWORK SERVICE

#include <windows.h>
#include <iostream>

int main(){
    SID nss;
    DWORD size = sizeof(nss);

    CreateWellKnownSid(WinNetworkServiceSid, NULL, &nss, &size);

    char name[256];
    DWORD n_size = sizeof(name);
    char domain[256];
    DWORD d_size = sizeof(domain);
    SID_NAME_USE type;

    LookupAccountSid(NULL, &nss, name, &n_size, domain, &d_size, &type);

    std::cout << domain << "\\" << name << "\n";
    return 0;
}

[这就是我得到的]。

我猜你看到的用户名是自动创建的用户帐户的一部分。在你将名字改为其他东西之后很久就有一些原始名称的残余。我也一次又一次地看到它们,虽然从未见过足够可靠的模式来预测它们何时能够或不会出现(并且从未找到任何方式来确定它们是否完全消失)。