Erro: WTSSetUserConfig() pode modificar a permissão de acesso remoto do usuário

Traduções deste artigo Traduções deste artigo
ID do artigo: 277631 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Se WTSSetUserConfig() é usado para modificar as configurações do Terminal Server de um usuário do domínio, ele também pode modificar permissão de acesso remoto do usuário como um efeito colateral. Quando isso ocorrer, o nível de permissão de acesso remoto é alterado para "Negar acesso" com seu valor padrão original de "Controle de acesso através de diretiva de acesso remoto". Esse problema ocorre apenas se a permissão de acesso remoto nunca tiver sido definida explicitamente para o usuário.

Causa

Em um domínio do Windows 2000, a permissão de acesso remoto do usuário é controlada por um atributo do Active Directory chamado msNPAllowDialin . Quando a conta do usuário é criada, a estrutura que contém este atributo é não inicializada. Nesse caso, comportamento de padrão do sistema é controlar o acesso de discagem do usuário de acordo com a diretiva de acesso remoto. WTSSetUserConfig() API inicializa a estrutura do Active Directory se nunca tiver sido inicializado antes. Durante essa inicialização, o atributo msNPAllowDialin é definido para negar acesso de discagem para o usuário.

Resolução

Para contornar esse problema, um programa pode definir explicitamente configurações dial-in do usuário antes para chamar WTSSetUserConfig() . As APIs de serviço de acesso remoto (RAS) pode ser usadas para essa finalidade. O código de exemplo a seguir demonstra como fazer isso.

Código de exemplo

O código a seguir usa a função RAS MprAdminUserGetInfo() para recuperar um configurações atuais do usuário dial-in. Em seguida, é feita uma chamada para MprAdminUserSetInfo() explicitamente armazenar essas configurações. Se esta for a primeira vez que as configurações foram definidas explicitamente, a estrutura do Active Directory que contém as configurações de discagem será inicializada, impedindo que futuras chamadas WTSSetUserConfig() de alterar as configurações.
#define UNICODE
#define _UNICODE

#include <windows.h>
#include <stdio.h>
#include <mprapi.h>   // must be linked with mprapi.lib

void wmain(int argc, WCHAR *argv[]) {

   WCHAR szUser[UNLEN + 1];
   WCHAR szDomain[DNLEN + 1];
   WCHAR szUasServer[UNCLEN + 1];
   DWORD dwResult;

   // We must use the RAS_USER_1 structure to preserve all 
   // Windows 2000 remote access permission attributes
   RAS_USER_1 ru1;   

   if (argc < 3) {
      wprintf(L"usage: %s <user> <domain>\n", argv[0]);
      return;
   }

   wcscpy(szUser, argv[1]);
   wcscpy(szDomain, argv[2]);
   
   // Retrieve the name of the server with the User Accounts Subsystem
   dwResult = MprAdminGetPDCServer(szDomain, NULL, (PWSTR) szUasServer);
   if (dwResult != NO_ERROR) {
      wprintf(L"MprAdminGetPDCServer() failed. Error %d\n", dwResult);
      return;
   }

   // Retrieve the user's current dial-in settings
   dwResult = MprAdminUserGetInfo(szUasServer, szUser, 1, (PBYTE) &ru1);
   if (dwResult != NO_ERROR) {
      wprintf(L"MprAdminUserGetInfo() failed. Error %d\n", dwResult);
      return;
   }

   // Explicitly reset the user's dial-in settings
   dwResult = MprAdminUserSetInfo(szUasServer, szUser, 1, (PBYTE) &ru1);
   if (dwResult != NO_ERROR) {
      wprintf(L"MprAdminUserSetInfo() failed. Error %d\n", dwResult);
      return;
   }

   // Now it is safe to call WTSSetUserConfig()

  return;
}
				

Situação

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados no começo deste artigo.

Referências

Para obter informações adicionais sobre o atributo msNPAllowDialin, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
252398Não é possível dial-in de conceder acesso a um usuário de um script de ADSI
257341Atributo de 'msNPAllowDialin' funciona somente no modo nativo

Propriedades

ID do artigo: 277631 - Última revisão: segunda-feira, 24 de fevereiro de 2014 - Revisão: 4.1
A informação contida neste artigo aplica-se a:
  • Interface de Programação de Aplicativos do Microsoft Win32 nas seguintes plataformas
    • the operating system: Microsoft Windows 2000
Palavras-chave: 
kbnosurvey kbarchive kbmt kbapi kbbug kbkernbase kbpending kbremoteprog kbtermserv KB277631 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 277631

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com