begin process at 2012 05 29 16:36:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Privileges:


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Privileges:

lundi 18 octobre 2004 à 04:23:07 | Privileges:

boumarsel


je pose bcp de kestions ces derniers jr:)

je veux attribuer deux privileges à mon application (SE_DEBUG_NAME et SE_SHUTDOWN_NAME)

le code qui pose le probleme :
**********
HANDLE hToken;
LUID DebugValue,DebugValue2;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
LookupPrivilegeValue((LPSTR) NULL, SE_DEBUG_NAME, &DebugValue);
LookupPrivilegeValue((LPSTR) NULL, SE_SHUTDOWN_NAME, &DebugValue2);
tkp.PrivilegeCount = 2;
tkp.Privileges[0].Luid = DebugValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
tkp.Privileges[1].Luid = DebugValue2;
tkp.Privileges[1].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tkp,0,NULL,NULL);
CloseHandle(hToken);
***********
le message d'erreur:
'Stack around the variable 'tkp' was corrupted '
le meme message, que se soit en debug ou release, et l'application continue son execution sans probleme quand je clique sur continuer.
***********
pour me débrouiller j'ai changé mon code :

HANDLE hToken;
LUID DebugValue;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);

LookupPrivilegeValue((LPSTR) NULL, SE_DEBUG_NAME, &DebugValue);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = DebugValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tkp,0,NULL,NULL);

OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
LookupPrivilegeValue((LPSTR) NULL, SE_SHUTDOWN_NAME, &DebugValue);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = DebugValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tkp,0,NULL,NULL);

CloseHandle(hToken);
***********
Ce code fonctionne correctement, mais je trouve que c'est bete comme solution,en plus je veux comprendre pourkoi ça n'a pas marché au debut.

merci
lundi 18 octobre 2004 à 05:02:35 | Re : Privileges:

Nebula

Membre Club
Parce qu'on ne peut ajuster qu'un privilège à la fois, cf WinNT.h :
#define ANYSIZE_ARRAY 1
typedef struct _TOKEN_PRIVILEGES { // tp
DWORD PrivilegeCount;
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
} TOKEN_PRIVILEGES;


#include <windows.h>
#include <assert.h>

int main(void) {
HANDLE hToken;
struct {
DWORD PrivilegeCount;
LUID_AND_ATTRIBUTES Privileges[2];
} tkp;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
LookupPrivilegeValue((LPSTR) NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);
LookupPrivilegeValue((LPSTR) NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[1].Luid);
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
tkp.Privileges[1].Attributes = SE_PRIVILEGE_ENABLED;
tkp.PrivilegeCount = 2;
assert(AdjustTokenPrivileges(hToken,FALSE,&tkp,0,NULL,NULL) != 0);
assert(GetLastError() == ERROR_SUCCESS);
CloseHandle(hToken);
return 0;
}


Fonctionne sans déclencher assert, donc devrait aller (pas testé de terminer un process ni de rebooter, je t'en laisse le soin).
lundi 18 octobre 2004 à 14:14:51 | Re : Privileges:

Nebula

Membre Club
Je regarde ce code à tête reposée et j'ai deux remarques :
1) pense à fermer le handle sur ton process après avoir ajusté les tokens
2) est-il possible de faire #define ANYSIZE_ARRAY 2 avant windows.h sans tout mettre en l'air ?
mardi 19 octobre 2004 à 22:51:45 | Re : Privileges:

boumarsel

En cherchant ANYSIZE_ARRAY dans winnt.h j'ai trouvé qu'elle est utilisée dans d?autres structures, donc vaut mieux la laisser comme elle est.

et pour la premiere solution, ça marche pas aussi car il n'arrive pas à convertir le type de la variable "tkp" en PTOKEN_PRIVILEGES ds la fonction AdjustTokenPrivileges(hToken,FALSE,&tkp,0,NULL,NULL);

donc je pense que je serais obligé d'ajuster les privileges par 2 appels à la fonction "AdjustTokenPrivileges", a moins si tu me propose une autre solution


Cette discussion est classée dans : name, privileges, tkp, htoken, debugvalue


Répondre à ce message

Sujets en rapport avec ce message

Reference pour arguments de fonction! [ par CoxJoe ] Hello,Voila mon code qui est tres simple :# include # include using namespace std;// fonction pour entrer des lettresvoid getchar(char& name[]){ cout Pb de concaténation [ par lcampeur ] J'ai un probleme de concaténation qui fait planté mon programme. Je recupere un nom de fichier avec la fonction : CString fileName ;char * Name ;fileN Cas d'école... [ par ClemB ] Bonjour, J'ai le soucis suivant dans le code ci après :typedef struct { const char *Name; ... ...} TOTO;bool AAA (TOTO *retour){ CString sTest = socket winsock grrr [ par dekai ] Voilà mon pb lorsque je tente un send ou recv j'obtient une erreur et ej comprends pas pourquoi. Merci de m'aider.Voici le code (je travaille sous dev Visual C++ et lecture de fichier [ par xakal ] J'ai des problemes avec les fichiers et C++.Plus exactement Visual C++, ce que je cherche a faire c?est de lire un fichier et l?afficher ligne a ligne Probleme Hostname Visual C++ [ par Steph115 ] Salut a tous voila j'ai vu que la fonction gethostbyname defini comme suit : This function gets host data corresponding to a host name.struct hostent tableau de chaines [ par ashboody ] const char * Ini_GetPrivateProfileString (...);mytype myfunc (char **RegisteredChannels_Name);{strcpy( RegisteredChannels_Name[ChannelIndex], tableaux de chaines en argument de fonction [ par ashboody ] je dispose d'une fonction connect a laquelle je doit passer un tableau de chaine char **RegisteredChannels_Name. Pour cela je déclare mon tableau dans Win32: pb et question [ par o0Leo0o ] Voila, donc, en premier, je voulasi vous demander...Dans une boite de dialogue, si j'utilise la commande while, le programme plante.C'est normal?Et en Récuperer l'instance name d'un performance counter [ par Tsu91 ] Bonjour,Je fais un petit programme en C++, et j'utilise un performancecounter pour connaitre la bande passante utilisé.Pour cela j'ai besoin de spécif


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,427 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales