Je dois emprunter l'identité d'un utilisateur différent dans mon application C++. J'utilise le code suivant pour cela.Usurpation d'identité dans le visuel C++
try {
IntPtr tokenHandle = IntPtr(0);
bool returnValue = LogonUser(username, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &tokenHandle);
if (false == returnValue) {
int ret = Marshal::GetLastWin32Error();
throw gcnew System::ComponentModel::Win32Exception(ret);
}
WindowsIdentity^ newId = gcnew WindowsIdentity(tokenHandle);
WindowsImpersonationContext^ impersonatedUser = newId->Impersonate();
//TODO access file with impersonated user rights
impersonatedUser->Undo(); // Stop impersonating the user.
if (tokenHandle != IntPtr::Zero) CloseHandle(tokenHandle); // Free the tokens.
}
catch(Exception^ ex){
}
La fonction utilisateur de connexion renvoie true pour l'application de console C++, mais renvoie false pour l'application visuelle C++. Les deux projets utilisent un support d'exécution de langage commun. Les deux projets ont les mêmes inclusions et références.
Qu'en est-il ne fonctionne pas? – Mark
pour l'opération d'ouverture de session d'application console renvoie true, mais pour l'application Visual C++ renvoie false. –
Avez-vous exécuté les deux avec le même utilisateur? De MSDN: "Si la fonction échoue, elle renvoie zéro. Pour obtenir des informations d'erreur étendues, appelez GetLastError." Qu'est-ce que GetLastError renvoie? – willll