Função NetUserGetInfo (lmaccess.h)
A função NetUserGetInfo recupera informações sobre uma conta de usuário específica em um servidor.
Sintaxe
NET_API_STATUS NET_API_FUNCTION NetUserGetInfo(
[in] LPCWSTR servername,
[in] LPCWSTR username,
[in] DWORD level,
[out] LPBYTE *bufptr
);
Parâmetros
[in] servername
Um ponteiro para uma cadeia de caracteres constante que especifica o nome DNS ou NetBIOS do servidor remoto no qual a função deve ser executada. Se esse parâmetro for NULL, o computador local será usado.
[in] username
Um ponteiro para uma cadeia de caracteres constante que especifica o nome da conta de usuário para a qual retornar informações. Para obter mais informações, consulte a seção Comentários a seguir.
[in] level
O nível de informações dos dados. Esse parâmetro pode usar um dos valores a seguir.
Valor | Significado |
---|---|
|
Retornar o nome da conta de usuário. O parâmetro bufptr aponta para uma estrutura de USER_INFO_0 . |
|
Retornar informações detalhadas sobre a conta de usuário. O parâmetro bufptr aponta para uma estrutura de USER_INFO_1 . |
|
Retornar informações detalhadas e atributos adicionais sobre a conta de usuário. O parâmetro bufptr aponta para uma estrutura de USER_INFO_2 . |
|
Retornar informações detalhadas e atributos adicionais sobre a conta de usuário. Esse nível é válido somente em servidores. O parâmetro bufptr aponta para uma estrutura de USER_INFO_3 . Observe que é recomendável que você use USER_INFO_4 em vez disso. |
|
Retornar informações detalhadas e atributos adicionais sobre a conta de usuário. Esse nível é válido somente em servidores. O parâmetro bufptr aponta para uma estrutura de USER_INFO_4 .
Nota Esse nível tem suporte no Windows XP e posterior.
|
|
Retornar nomes e comentários de usuário e conta. O parâmetro bufptr aponta para uma estrutura de USER_INFO_10 . |
|
Retornar informações detalhadas sobre a conta de usuário. O parâmetro bufptr aponta para uma estrutura de USER_INFO_11 . |
|
Retorne o nome e o identificador do usuário e vários atributos de conta. O parâmetro bufptr aponta para uma estrutura de USER_INFO_20 . Observe que, no Windows XP e posterior, é recomendável que você use USER_INFO_23 em vez disso. |
|
Retorne o nome e o identificador do usuário e vários atributos de conta. O parâmetro bufptr aponta para uma estrutura USER_INFO_23 .
Nota Esse nível tem suporte no Windows XP e posterior.
|
|
Retornar informações da conta de usuário para contas que estão conectadas a uma identidade da Internet. O parâmetro bufptr aponta para uma estrutura de USER_INFO_24 .
Nota O nível é compatível com Windows 8 e Windows Server 2012.
|
[out] bufptr
Um ponteiro para o buffer que recebe os dados. O formato desses dados depende do valor do parâmetro de nível . Esse buffer é alocado pelo sistema e deve ser liberado usando a função NetApiBufferFree . Para obter mais informações, consulte Buffers de função de gerenciamento de rede e Comprimentos de buffer de função de gerenciamento de rede.
Retornar valor
Se a função for bem-sucedida, o valor retornado será NERR_Success.
Se a função falhar, o valor retornado poderá ser um dos seguintes códigos de erro.
Código de retorno | Descrição |
---|---|
|
O usuário não tem acesso às informações solicitadas. |
|
O caminho de rede especificado no parâmetro servername não foi encontrado. |
|
O valor especificado para o parâmetro de nível é inválido. |
|
O nome do computador é inválido. |
|
Não foi possível encontrar o nome de usuário. |
Comentários
Se você estiver programando para o Active Directory, poderá chamar determinados métodos ADSI (Active Directory Service Interface) para obter a mesma funcionalidade que você pode obter chamando as funções de usuário de gerenciamento de rede. Para obter mais informações, consulte IADsUsUser e IADsComputer.
Se você chamar essa função em um controlador de domínio que está executando o Active Directory, o acesso será permitido ou negado com base na ACL (lista de controle de acesso) do objeto protegível. A ACL padrão permite que todos os usuários autenticados e membros do grupo "Acesso compatível com o Pré-Windows 2000" exibam as informações. Se você chamar essa função em um servidor membro ou estação de trabalho, todos os usuários autenticados poderão exibir as informações. Para obter informações sobre acesso anônimo e restrição de acesso anônimo nessas plataformas, consulte Requisitos de segurança para as funções de gerenciamento de rede. Para obter mais informações sobre ACLs, ACEs e tokens de acesso, consulte Controle de Acesso Model.
O descritor de segurança do objeto User é usado para executar a marcar de acesso para essa função.
Os nomes de conta de usuário são limitados a 20 caracteres e os nomes de grupo são limitados a 256 caracteres. Além disso, os nomes de conta não podem ser encerrados por um período e não podem incluir vírgulas ou qualquer um dos seguintes caracteres imprimíveis: ", /, , [, ], :, |, <, , >, +, =, ;, ?, *. Os nomes também não podem incluir caracteres no intervalo de 1 a 31, que são não imprimíveis.
Se o nível de informações especificado no parâmetro de nível for definido como 24, o parâmetro servername especificado deverá resolve para o computador local. Se o nome do servidor for resolvido para um computador remoto ou para um controlador de domínio, a função NetUserGetInfo falhará.
Exemplos
O exemplo de código a seguir demonstra como recuperar informações sobre uma conta de usuário específica com uma chamada para a função NetUserGetInfo . O exemplo chama NetUserGetInfo, especificando vários níveis de informações. Se a chamada for bem-sucedida, o código imprimirá informações sobre a conta de usuário. Por fim, o exemplo libera a memória alocada para o buffer de informações.
#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "advapi32.lib")
#pragma comment(lib, "netapi32.lib")
#include <windows.h>
#include <stdio.h>
#include <assert.h>
#include <lm.h>
#include <sddl.h> /* for ConvertSidToStringSid function */
int wmain(int argc, wchar_t * argv[])
{
DWORD dwLevel = 0;
LPUSER_INFO_0 pBuf = NULL;
LPUSER_INFO_1 pBuf1 = NULL;
LPUSER_INFO_2 pBuf2 = NULL;
LPUSER_INFO_3 pBuf3 = NULL;
LPUSER_INFO_4 pBuf4 = NULL;
LPUSER_INFO_10 pBuf10 = NULL;
LPUSER_INFO_11 pBuf11 = NULL;
LPUSER_INFO_20 pBuf20 = NULL;
LPUSER_INFO_23 pBuf23 = NULL;
NET_API_STATUS nStatus;
LPTSTR sStringSid = NULL;
int i = 0;
int j = 0;
if (argc != 3)
{
fwprintf(stderr, L"Usage: %s \\\\ServerName UserName\n", argv[0]);
exit(1);
}
while (i < 24)
{
//
// Call the NetUserGetInfo function.
//
dwLevel = i;
wprintf
(L"\nCalling NetUserGetinfo with Servername=%s Username=%s Level=%d\n",
argv[1], argv[2], dwLevel);
nStatus = NetUserGetInfo(argv[1], argv[2], dwLevel, (LPBYTE *) & pBuf);
//
// If the call succeeds, print the user information.
//
if (nStatus == NERR_Success)
{
if (pBuf != NULL)
{
switch (i)
{
case 0:
wprintf(L"\tUser account name: %s\n", pBuf->usri0_name);
break;
case 1:
pBuf1 = (LPUSER_INFO_1) pBuf;
wprintf(L"\tUser account name: %s\n", pBuf1->usri1_name);
wprintf(L"\tPassword: %s\n", pBuf1->usri1_password);
wprintf(L"\tPassword age (seconds): %d\n",
pBuf1->usri1_password_age);
wprintf(L"\tPrivilege level: %d\n", pBuf1->usri1_priv);
wprintf(L"\tHome directory: %s\n", pBuf1->usri1_home_dir);
wprintf(L"\tUser comment: %s\n", pBuf1->usri1_comment);
wprintf(L"\tFlags (in hex): %x\n", pBuf1->usri1_flags);
wprintf(L"\tScript path: %s\n", pBuf1->usri1_script_path);
break;
case 2:
pBuf2 = (LPUSER_INFO_2) pBuf;
wprintf(L"\tUser account name: %s\n", pBuf2->usri2_name);
wprintf(L"\tPassword: %s\n", pBuf2->usri2_password);
wprintf(L"\tPassword age (seconds): %d\n",
pBuf2->usri2_password_age);
wprintf(L"\tPrivilege level: %d\n", pBuf2->usri2_priv);
wprintf(L"\tHome directory: %s\n", pBuf2->usri2_home_dir);
wprintf(L"\tComment: %s\n", pBuf2->usri2_comment);
wprintf(L"\tFlags (in hex): %x\n", pBuf2->usri2_flags);
wprintf(L"\tScript path: %s\n", pBuf2->usri2_script_path);
wprintf(L"\tAuth flags (in hex): %x\n",
pBuf2->usri2_auth_flags);
wprintf(L"\tFull name: %s\n", pBuf2->usri2_full_name);
wprintf(L"\tUser comment: %s\n", pBuf2->usri2_usr_comment);
wprintf(L"\tParameters: %s\n", pBuf2->usri2_parms);
wprintf(L"\tWorkstations: %s\n", pBuf2->usri2_workstations);
wprintf
(L"\tLast logon (seconds since January 1, 1970 GMT): %d\n",
pBuf2->usri2_last_logon);
wprintf
(L"\tLast logoff (seconds since January 1, 1970 GMT): %d\n",
pBuf2->usri2_last_logoff);
wprintf
(L"\tAccount expires (seconds since January 1, 1970 GMT): %d\n",
pBuf2->usri2_acct_expires);
wprintf(L"\tMax storage: %d\n", pBuf2->usri2_max_storage);
wprintf(L"\tUnits per week: %d\n",
pBuf2->usri2_units_per_week);
wprintf(L"\tLogon hours:");
for (j = 0; j < 21; j++)
{
printf(" %x", (BYTE) pBuf2->usri2_logon_hours[j]);
}
wprintf(L"\n");
wprintf(L"\tBad password count: %d\n",
pBuf2->usri2_bad_pw_count);
wprintf(L"\tNumber of logons: %d\n",
pBuf2->usri2_num_logons);
wprintf(L"\tLogon server: %s\n", pBuf2->usri2_logon_server);
wprintf(L"\tCountry code: %d\n", pBuf2->usri2_country_code);
wprintf(L"\tCode page: %d\n", pBuf2->usri2_code_page);
break;
case 4:
pBuf4 = (LPUSER_INFO_4) pBuf;
wprintf(L"\tUser account name: %s\n", pBuf4->usri4_name);
wprintf(L"\tPassword: %s\n", pBuf4->usri4_password);
wprintf(L"\tPassword age (seconds): %d\n",
pBuf4->usri4_password_age);
wprintf(L"\tPrivilege level: %d\n", pBuf4->usri4_priv);
wprintf(L"\tHome directory: %s\n", pBuf4->usri4_home_dir);
wprintf(L"\tComment: %s\n", pBuf4->usri4_comment);
wprintf(L"\tFlags (in hex): %x\n", pBuf4->usri4_flags);
wprintf(L"\tScript path: %s\n", pBuf4->usri4_script_path);
wprintf(L"\tAuth flags (in hex): %x\n",
pBuf4->usri4_auth_flags);
wprintf(L"\tFull name: %s\n", pBuf4->usri4_full_name);
wprintf(L"\tUser comment: %s\n", pBuf4->usri4_usr_comment);
wprintf(L"\tParameters: %s\n", pBuf4->usri4_parms);
wprintf(L"\tWorkstations: %s\n", pBuf4->usri4_workstations);
wprintf
(L"\tLast logon (seconds since January 1, 1970 GMT): %d\n",
pBuf4->usri4_last_logon);
wprintf
(L"\tLast logoff (seconds since January 1, 1970 GMT): %d\n",
pBuf4->usri4_last_logoff);
wprintf
(L"\tAccount expires (seconds since January 1, 1970 GMT): %d\n",
pBuf4->usri4_acct_expires);
wprintf(L"\tMax storage: %d\n", pBuf4->usri4_max_storage);
wprintf(L"\tUnits per week: %d\n",
pBuf4->usri4_units_per_week);
wprintf(L"\tLogon hours:");
for (j = 0; j < 21; j++)
{
printf(" %x", (BYTE) pBuf4->usri4_logon_hours[j]);
}
wprintf(L"\n");
wprintf(L"\tBad password count: %d\n",
pBuf4->usri4_bad_pw_count);
wprintf(L"\tNumber of logons: %d\n",
pBuf4->usri4_num_logons);
wprintf(L"\tLogon server: %s\n", pBuf4->usri4_logon_server);
wprintf(L"\tCountry code: %d\n", pBuf4->usri4_country_code);
wprintf(L"\tCode page: %d\n", pBuf4->usri4_code_page);
if (ConvertSidToStringSid
(pBuf4->usri4_user_sid, &sStringSid))
{
wprintf(L"\tUser SID: %s\n", sStringSid);
LocalFree(sStringSid);
}
else
wprintf(L"ConvertSidToSTringSid failed with error %d\n",
GetLastError());
wprintf(L"\tPrimary group ID: %d\n",
pBuf4->usri4_primary_group_id);
wprintf(L"\tProfile: %s\n", pBuf4->usri4_profile);
wprintf(L"\tHome directory drive letter: %s\n",
pBuf4->usri4_home_dir_drive);
wprintf(L"\tPassword expired information: %d\n",
pBuf4->usri4_password_expired);
break;
case 10:
pBuf10 = (LPUSER_INFO_10) pBuf;
wprintf(L"\tUser account name: %s\n", pBuf10->usri10_name);
wprintf(L"\tComment: %s\n", pBuf10->usri10_comment);
wprintf(L"\tUser comment: %s\n",
pBuf10->usri10_usr_comment);
wprintf(L"\tFull name: %s\n", pBuf10->usri10_full_name);
break;
case 11:
pBuf11 = (LPUSER_INFO_11) pBuf;
wprintf(L"\tUser account name: %s\n", pBuf11->usri11_name);
wprintf(L"\tComment: %s\n", pBuf11->usri11_comment);
wprintf(L"\tUser comment: %s\n",
pBuf11->usri11_usr_comment);
wprintf(L"\tFull name: %s\n", pBuf11->usri11_full_name);
wprintf(L"\tPrivilege level: %d\n", pBuf11->usri11_priv);
wprintf(L"\tAuth flags (in hex): %x\n",
pBuf11->usri11_auth_flags);
wprintf(L"\tPassword age (seconds): %d\n",
pBuf11->usri11_password_age);
wprintf(L"\tHome directory: %s\n", pBuf11->usri11_home_dir);
wprintf(L"\tParameters: %s\n", pBuf11->usri11_parms);
wprintf
(L"\tLast logon (seconds since January 1, 1970 GMT): %d\n",
pBuf11->usri11_last_logon);
wprintf
(L"\tLast logoff (seconds since January 1, 1970 GMT): %d\n",
pBuf11->usri11_last_logoff);
wprintf(L"\tBad password count: %d\n",
pBuf11->usri11_bad_pw_count);
wprintf(L"\tNumber of logons: %d\n",
pBuf11->usri11_num_logons);
wprintf(L"\tLogon server: %s\n",
pBuf11->usri11_logon_server);
wprintf(L"\tCountry code: %d\n",
pBuf11->usri11_country_code);
wprintf(L"\tWorkstations: %s\n",
pBuf11->usri11_workstations);
wprintf(L"\tMax storage: %d\n", pBuf11->usri11_max_storage);
wprintf(L"\tUnits per week: %d\n",
pBuf11->usri11_units_per_week);
wprintf(L"\tLogon hours:");
for (j = 0; j < 21; j++)
{
printf(" %x", (BYTE) pBuf11->usri11_logon_hours[j]);
}
wprintf(L"\n");
wprintf(L"\tCode page: %d\n", pBuf11->usri11_code_page);
break;
case 20:
pBuf20 = (LPUSER_INFO_20) pBuf;
wprintf(L"\tUser account name: %s\n", pBuf20->usri20_name);
wprintf(L"\tFull name: %s\n", pBuf20->usri20_full_name);
wprintf(L"\tComment: %s\n", pBuf20->usri20_comment);
wprintf(L"\tFlags (in hex): %x\n", pBuf20->usri20_flags);
wprintf(L"\tUser ID: %u\n", pBuf20->usri20_user_id);
break;
case 23:
pBuf23 = (LPUSER_INFO_23) pBuf;
wprintf(L"\tUser account name: %s\n", pBuf23->usri23_name);
wprintf(L"\tFull name: %s\n", pBuf23->usri23_full_name);
wprintf(L"\tComment: %s\n", pBuf23->usri23_comment);
wprintf(L"\tFlags (in hex): %x\n", pBuf23->usri23_flags);
if (ConvertSidToStringSid
(pBuf23->usri23_user_sid, &sStringSid))
{
wprintf(L"\tUser SID: %s\n", sStringSid);
LocalFree(sStringSid);
}
else
wprintf(L"ConvertSidToSTringSid failed with error %d\n",
GetLastError());
break;
default:
break;
}
}
}
// Otherwise, print the system error.
//
else
fprintf(stderr, "NetUserGetinfo failed with error: %d\n", nStatus);
//
// Free the allocated memory.
//
if (pBuf != NULL)
NetApiBufferFree(pBuf);
switch (i)
{
case 0:
case 1:
case 10:
i++;
break;
case 2:
i = 4;
break;
case 4:
i = 10;
break;
case 11:
i = 20;
break;
case 20:
i = 23;
break;
default:
i = 24;
break;
}
}
return 0;
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | lmaccess.h (inclua Lm.h) |
Biblioteca | Netapi32.lib |
DLL | Netapi32.dll |
Confira também
Funções de gerenciamento de rede