Estoy utilizando estas funciones.
Código
#include <iostream> #include <windows.h> #define LOGON32_LOGON_NEW_CREDENTIALS 9 #define LOGON32_PROVIDER_WINNT50 3 #define REMOTE_USER_S "Administrador" #define REMOTE_PASS_S "password" using namespace std; int main() { HANDLE hToken; bool bAnswer = false; bAnswer = LogonUser(REMOTE_USER_S, (char*) ".", REMOTE_PASS_S, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, &hToken); cout << bAnswer << endl; HANDLE hToken2; bAnswer = DuplicateToken(hToken, SecurityImpersonation, &hToken2); cout << bAnswer << endl; bAnswer = ImpersonateLoggedOnUser(hToken2); cout << bAnswer << endl; HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if(hSCManager == NULL) cout << "Error! " << GetLastError() << endl; return 0; }
Este código devuelve
1
1
1
Error! 5 (Acceso denegado).
Pasa lo mismo si le pongo la contraseña válida o una inválida.
Como puedo hacer para asegurarme que el usuario haya sido correctamente logueado y cargado, es decir, como puedo hacer para comprobar que las credenciales que se le proveen (Usuario y contraseña, en este caso no hay dominio) son válidas.
Esto lo quiero utilizar para acceder a recursos de red que sólo están disponibles bajo ciertos usuarios.
Un saludo
APOKLIPTICO.
PD: Pasa lo mismo sino utilizo DuplicateToken.