2010-08-18 2 views
1

Mon programme de service exécute une autre instance de lui-même avec, essentiellement, CreateProcess(GetCommandLine()). Le processus enfant utilise ensuite OpenProcess pour obtenir un handle de son processus parent (afin qu'il puisse détecter le moment où le parent a cessé de s'exécuter). Pour certains clients, OpenProcess échoue avec ERROR_ACCESS_DENIED. J'essaie de déterminer la raison et de reproduire les circonstances pour les tests internes. Je veux quelque chose que je peux envoyer aux clients (soit un programme, soit des instructions pour utiliser des programmes qui sont déjà couramment installés sur les serveurs Windows) pour qu'ils s'exécutent et génèrent un rapport incluant le compte sur lequel le service s'exécute et quels privilèges ce compte et ses groupes ont été accordés ou refusés. Comment puis-je recueillir cette information auprès des clients?Que rapportera les permissions d'un compte?

Répondre

0

Obtenir le nom de compte est facile - GetUserName. Obtenir les droits assignés à ce compte est un peu plus de travail. Si ma mémoire est bonne, la séquence passe quelque chose comme:

GetKernelObjectSecurity(Current_oject, &security_descriptor) 
GetSecurityDescriptorDacl(security_descriptor, &dacl) 
GetEffectiveRightsFromAcl(dacl, user_name, &rights) 

Vous pourriez préférer utiliser GetExplicitEntriesFromAcl pour cette dernière étape. Il y a un problème avec tout ceci: s'ils ont trop restreint l'utilisateur, certains (ou tous) peuvent échouer aussi.

+0

Je pourrais peut-être travailler avec ceci. Mais quel objet noyau devrais-je passer à GetKernelObjectSecurity? Je devine GetCurrentProcess, puisque je veux savoir ce que le processus actuel est autorisé à faire. MSDN dit que j'ai besoin de l'autorisation READ_CONTROL pour appeler cette fonction, mais cela ne devrait pas être un problème puisque le processus demande des informations sur lui-même, n'est-ce pas? –

+0

Oui, vous voudriez que le processus actuel soit géré (je pense). Oui, je pense que vous aurez presque toujours la permission de voir cela, mais c'est difficile à dire - il est probablement possible de mettre en place des permissions pour empêcher cela. –

Questions connexes