Вот, пожалуйста:
#include <Windows.h>
#include <DSRole.h>
#pragma comment(lib, "netapi32.lib")
#include <stdio.h>
int main(int argc, char ** argv)
{
DSROLE_PRIMARY_DOMAIN_INFO_BASIC * info;
DWORD dw;
dw = DsRoleGetPrimaryDomainInformation(NULL,
DsRolePrimaryDomainInfoBasic,
(PBYTE *)&info);
if (dw != ERROR_SUCCESS)
{
wprintf(L"DsRoleGetPrimaryDomainInformation: %u\n", dw);
return dw;
}
if (info->DomainNameDns == NULL)
{
wprintf(L"DomainNameDns is NULL\n");
}
else
{
wprintf(L"DomainNameDns: %s\n", info->DomainNameDns);
}
return 0;
}
Любой, кто использует DsRoleGetPrimaryDomainInformation
в производственном использовании, должен рассмотреть возможность вызова DsRoleFreeMemory
, чтобы освободить блок памяти, когда информациябольше не требуется (согласно обсуждению в комментариях).
Функция возвращает три разных доменных имени , например:
- Доменное имя леса: например,
stackoverflow.com
- DNS-имя домена : например,
stackoverflow.com
- NetBIOS-имя домена : например,
STACKOVERFLOW
Если машина не присоединена к домену, тогда оба поля Forest и dns не заполнены, и только имя NetBios заполнено именем рабочей группы, например:
- Имя леса домена :
null
- Имя домена DNS : например,
null
- Имя домена NetBIOS : например,
WORKGROUP
Функция также возвращает флаг, указывающий, присоединен ли компьютер к домену:
DsRole_RoleMemberWorkstation
: рабочая станция, которая является членом домена DsRole_RoleMemberServer
: сервер, который является членом домена DsRole_RolePrimaryDomainController
: основной контроллер домена DsRole_RoleBackupDomainController
: резервный контроллер домена
или нет:
DsRole_RoleStandaloneWorkstation
: рабочая станция, которая не является членом домена DsRole_RoleStandaloneServer
: сервер, который не является членом домена