Comme ceci:
SECURITY_DESCRIPTOR SD;
InitializeSecurityDescriptor(&SD, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&SD, TRUE, NULL, FALSE);
J'omis de contrôle d'erreur par souci de concision. Tu ne ferais pas ça.
Quand vous appelez CreateNamedPipe
vous pouvez configurer les attributs de sécurité dossier comme celui-ci:
SA.nLength = sizeof(SA);
SA.lpSecurityDescriptor = &SD;
SA.bInheritHandle = TRUE;
La documentation pour SetSecurityDescriptorDacl
états:
Lorsque le paramètre pDacl ne pointe pas vers un DACL et l'indicateur bDaclPresent est TRUE, un DACL NULL est spécifié. Tout accès est autorisé. Vous ne devez pas utiliser un DACL NULL avec un objet car tout utilisateur peut modifier la liste DACL et le propriétaire du descripteur de sécurité. Cela interférera avec l'utilisation de l'objet.
Donc, ce qui précède est comment le faire, mais la documentation souligne que vous ne devriez pas le faire.
Hm, la part de changer la propriété a été une surprise. Mais dans mon cas ce n'est pas un problème, je dois juste pouvoir me connecter à partir de mon exe indépendamment de l'utilisateur qui l'exécute, et se connecter au tuyau ne les laissera pas pirater mon service Windows ou quoi que ce soit. Mais il est toujours intéressant - est-il possible d'accorder l'accès à tout le monde à se connecter, sans leur permettre de changer de propriétaire? – sashoalm
Oui, alors vous auriez besoin d'utiliser un vrai DACL. Le code dans mon commentaire à votre question précédente explique comment je fais cela. –