Devrait aller depuis un service system.
int bnUserImpersonate()
{
HANDLE htok, hdup;
DWORD dwession;
int bret = 0;
dwession = WTSGetActiveConsoleSessionId();
if(dwession == 0xFFFFFFFF) goto usrnameEXIT;
if(!WTSQueryUserToken(dwession, &htok)) goto usrnameEXIT;
if(!htok) goto usrnameEXIT; // DES FOIS QUE...
if(!DuplicateToken(htok, SecurityImpersonation, &hdup)) goto closeTOK;
bret = ImpersonateLoggedOnUser(hdup);
CloseHandle(hdup);
closeTOK: CloseHandle(htok);
usrnameEXIT: return bret;
}
void TestImpersonate()
{
char buf[260];
DWORD len;
if(!bnUserImpersonate()) return;
len = 260;
if(!GetUserName(buf, &len)) return;
// buf contient UserName
}
ciao...
BruNews, MVP VC++