Получить имя участника компьютера с помощью `GetUserNameEx`
Я попытался получить основное имя компьютера службы, работающей как Network Service
со следующим кодом.
BOOLEAN bError = GetUserNameEx(NameUserPrincipal, buffer, &buf_len);
Поскольку доменное имя моего компьютера Service-Windows@example.com
Ожидаю результата в buffer
та же. Однако возвращенное имя участника службы WIN-SC4RKQUKM4D@example.com
, Я уверен, что я изменил свой компьютер и добавить его в домен example.com
,
Я понятия не имею о ненормальном основном имени. В чем может быть проблема? Любые советы будут высоко оценены.
ОБНОВИТЬ
Я запускаю службу на контроллере домена, не знаю, повлияет ли это на результат.
Спасибо и всего наилучшего!
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;
}
[И это то, что я получаю].
Я предполагаю, что имя пользователя, которое вы видите, является остатком автоматически созданной учетной записи пользователя. Видимо, есть какое-то пережиток этого оригинального имени еще долго после того, как вы изменили имена на другие вещи Я также видел их время от времени, хотя никогда не видел достаточно надежного паттерна, чтобы предсказать, когда они появятся или не появятся (и никогда не находил способа быть уверенным, что они полностью исчезли).