Partant de cela tu devrais pouvoir te debrouiller, note que je charge pointeurs de fonctions en dynamique pour qu'il n'y ait pas de probleme sur les WinBebes.
DWORD IsCurrentUserAdmin() { HANDLE htoken; BYTE infos[1024]; PTOKEN_GROUPS pgroups = (PTOKEN_GROUPS)infos; DWORD dwlen; PSID psidAdmins; SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY; BOOL b = 0; pOPENPROCESSTOKEN pOPTK; pGETTOKENINFORMATION pGTINF; pALLOCINITSID pALLIS; pEQUALSID pEQSID; pFREESID pFRSD; HINSTANCE hdll = LoadLibrary("Advapi32.dll"); if(!hdll) return 0; pOPTK = (pOPENPROCESSTOKEN) GetProcAddress(hdll, "OpenProcessToken"); if(!pOPTK) goto relDll; pGTINF = (pGETTOKENINFORMATION) GetProcAddress(hdll, "GetTokenInformation"); if(!pGTINF) goto relDll; if(!pOPTK(GetCurrentProcess(),TOKEN_READ,&htoken)) goto relDll; b = pGTINF(htoken,TokenGroups,infos, 1024, &dwlen); CloseHandle(htoken); if(b) goto relDll; pALLIS = (pALLOCINITSID) GetProcAddress(hdll, "AllocateAndInitializeSid"); if(!pALLIS) goto relDll; pEQSID = (pEQUALSID) GetProcAddress(hdll, "EqualSid"); if(!pEQSID) goto relDll; pFRSD = (pFREESID) GetProcAddress(hdll, "FreeSid"); if(!pFRSD) goto relDll; if(!pALLIS(&siaNtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &psidAdmins)) goto relDll; for(UINT x=0; x < pgroups->GroupCount; x++) { if(pEQSID(psidAdmins, pgroups->Groups[x].Sid)) {b = 1; break;} } pFRSD(&psidAdmins); relDll: FreeLibrary(hdll); return b; }
BruNews, ciao...
|