problemas con la funcion LogonUser

14/01/2004 - 16:38 por Carolina Gonzalez | Informe spam
estoy con un problema que me tiene intrigadisima.

Una funcion de Visual C++, me esta complicando la vida en un trabajo para
controlar un escritorio. se tienes alguna idea en donde seguir mirando te
lo agradecere.

Se lee archivo de configuracion para extraer User, Password, Domain y se
pasan estos parametros a la funcion LogonUser de Windows. Este
procedimientoesta
echo en Visual C++. Al momento de extraer la informacion del archivo los
parametros estan correctamente leidos. La funcion LogonUser es exitosa pero
al revisar el nombre de la carpeta asociada al profile aparece cualquier
cosa

Por ejemplo, en vez de aparecer

C:\Documents and Settings\cgonzalez

aparece

c:\Documents and setting c!!!!!lz


sin embargo la validacion del usuario en el dominio es correcta y las
subcarpetas
se crean correctamente.

La pregunta es porque se cambia el username.

Un detalle adicional es si se coloca en el codigo las credenciales cgonzalez
con la password, esto pasa bien pero al momentos de leerlos de un archivo
ocurre el problema.

Saludos y cualquier ayuda es bienvenida.

Carolina

Preguntas similare

Leer las respuestas

#1 Rodrigo Corral González
14/01/2004 - 18:21 | Informe spam
Tiene toda la pinta de que estes pisando memoria, o que tienes algun buffer
de tamaño insuficiente o algo asi. Si pudieses poner codigo quiza te podamos
ayudar.

Un saludo
Rodrigo Corral González
Respuesta Responder a este mensaje
#2 Carolina Gonzalez
15/01/2004 - 14:05 | Informe spam
aca va el codigo



BOOL ECGinaDLLLogonUser(PECGinaDLL_CONTEXT p)

{

HANDLE hUser;

TOKEN_STATISTICS tokenStats;

TOKEN_GROUPS *pGroups;

DWORD dwSize, i;

BOOL status = FALSE;



if (LogonUser((char *) p->UserName,(char *) p->Domain ,(char *)
p->Password , LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hUser))

{

p->hUserToken = hUser;

GetTokenInformation(p->hUserToken, TokenStatistics,
&tokenStats,sizeof(tokenStats),&dwSize);

p->AuthID = tokenStats.AuthenticationId;

pGroups = LocalAlloc(LMEM_FIXED, 2048);



if (!pGroups)

{

CloseHandle(hUser);

return FALSE;

}



GetTokenInformation(p->hUserToken, TokenGroups, pGroups,
2048, &dwSize);



if (dwSize > 2048)

{

pGroups = LocalReAlloc(pGroups, LMEM_FIXED, dwSize);

GetTokenInformation(p->hUserToken ,TokenGroups, pGroups,2048,
&dwSize);

}



for (i = 0; i < pGroups->GroupCount; i++)

{

if ((pGroups->Groups[i].Attributes &

SE_GROUP_LOGON_ID) == SE_GROUP_LOGON_ID) {

CopySid(GetLengthSid(p->pSid), p->pSid,
pGroups->Groups[i].Sid );

break;

}

}

LocalFree(pGroups);

p->AuthID = tokenStats.AuthenticationId;

return TRUE;

}

return FALSE;

}







/***************************************************************************
********************************************************************/

VOID GetDomainInfo(PECGinaDLL_CONTEXT Xp)

{

HKEY hKey;

FILE *fp;

char *linea;

char filename[100];



sprintf(filename,"%s", "C:\\ctxecc.ini");



fp = fopen(filename, "r");



linea = (char *) malloc(100);



while( fgets(linea, 100, fp) != NULL )

{

linea[strlen(linea) - 1] = '\0';



if( strncmp("user", linea, 4) == 0 )

wcscpy(Xp->UserName , (const wchar_t *) &linea[5]);



if( strncmp("password", linea, 8) == 0 )

wcscpy(Xp->Password , (const wchar_t *) &linea[9]);



if( strncmp("domain", linea, 6) == 0 )

wcscpy(Xp->Domain , (const wchar_t *) &linea[7]);

}

fclose(fp);



WriteProfileString(TEXT("Winlogon"), TEXT("x1_DomainName"), (char *)
Xp->Domain);

WriteProfileString(TEXT("Winlogon"), TEXT("x2_DomainUser"), (LPTSTR)
Xp->UserName);

WriteProfileString(TEXT("Winlogon"), TEXT("x3_DomainPassword"),
(LPTSTR) Xp->Password);

}



"Rodrigo Corral González" wrote in message
news:%
Tiene toda la pinta de que estes pisando memoria, o que tienes algun


buffer
de tamaño insuficiente o algo asi. Si pudieses poner codigo quiza te


podamos
ayudar.

Un saludo
Rodrigo Corral González


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida