2010-02-01 5 views
0

J'utilise CreateService pour installer un service Windows sur Windows XP. Je voudrais configurer les choses de sorte que seul l'administrateur puisse démarrer/arrêter/mettre en pause/reprendre le service.Installation du service Windows XPE - comment définir la sécurité au moment de CreateService?

En ce moment je suis en utilisant ce qui suit pour installer le service:

schService = CreateService(schSCManager, 
    ServiceName, 
    ServiceDisplayName, // service name to display 
    SERVICE_ALL_ACCESS, // desired access 
    SERVICE_WIN32_OWN_PROCESS, // service type 
    SERVICE_AUTO_START, // start type 
    SERVICE_ERROR_NORMAL, // error control type 
    binaryPathName, // service's binary (this program) 
    NULL, // no load ordering group 
    NULL, // no tag identifier 
    NULL, // no dependencies 
    NULL, // LocalSystem account 
    NULL); // no password 

Et le service se termine avec la sécurité tels que les membres du groupe de PowerUsers peut démarrer et arrêter le service. J'ai compris que je peux utiliser sc sdshow pour examiner le descripteur de sécurité, et j'ai élaboré une ligne SDDL qui ferait la bonne chose pour nous.

J'ai également appris que notre installation Win XPE ne contient pas le binaire sc.exe, donc nous ne pouvons pas vraiment l'utiliser pour installer ce système particulier. Donc, ce que j'ai besoin de savoir est: Quelles sont les API que j'ai besoin d'utiliser, pour définir le descripteur de sécurité sur ce service au moment où je fais l'appel CreateService. Je ne suis absolument pas familier avec les API de sécurité Windows, donc je ne sais pas par où commencer.

MISE À JOUR: La réponse est SetServiceObjectSecurity (ci-dessous). Question suivante: Quelle est la meilleure façon d'installer SecurityDescriptor? Est-il préférable d'obtenir le descripteur par défaut, puis le modifier? Ou devrais-je simplement créer un nouveau descripteur?

Répondre

1

Je ne suis pas vraiment familier avec Windows XP Embedded, mais normalement vous obtiendriez ce que vous êtes après avoir utilisé la fonction SetServiceObjectSecurity. Utilisez le handle que vous obtenez de CreateService et créez un descripteur de sécurité correspondant à ce que vous voulez.

Questions connexes