1

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

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

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

我不知道异常的主体名称。可能是什么问题?任何提示将不胜感激。

更新


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

感谢你并致以真诚的问候!

4

1 回答 1

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;
}

[这就是我得到的]。

我猜你看到的用户名是自动创建的用户帐户的一些残余。在您将名称更改为其他东西很久之后,显然有一些原始名称的残余。我也时不时地看到它们,尽管从未见过足够可靠的模式来预测它们何时会出现或不会出现(也从未找到任何方法来确保它们完全消失)。

于 2013-07-17T06:40:53.297 回答