IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

[Service réseau] pb avec OpenService "Descripteur non valide"


Sujet :

Windows

  1. #1
    Membre actif Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Points : 250
    Points
    250
    Par défaut [Service réseau] pb avec OpenService "Descripteur non valide"
    Bonjour,

    J'essaie d'effectuer des opérations sur un service (récupération du compte du service, dont le code provient de la faq :http://delphi.developpez.com/faq/?pa...#configservice).
    Ce code marche très bien pour un système local, mais pas avec un service réseau (compte "NT AUTHORITY\NetworkService").

    Voici ma fonction (en delphi, mais les fonctions de manipulation de service sont commune à d'autres langages avec la advapi32.dll) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    // sIdentifiant : l'identifiant du service (ex: Service_De_Sauvegarde)
    function DonnerCompteService(sIdentifiant : String) : String;
    var 
      MyHandleService, MyHandleSCM : SC_Handle;
      MyConfigService     : PQueryServiceConfig;
      iOctetsNecessaires, iErreur  : DWORD;
    
    begin
      if (sIdentifiant <> '') then
      begin
        // Initialisation
        Result := '';
    
        // Mappage du service
        MyHandleSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
        MyHandleService := OpenService(MyHandleSCM, PChar(sIdentifiant),
            SERVICE_ALL_ACCESS);
    
        // Récupération de la taille du buffer
        QueryServiceConfig(MyHandleService, nil, 0, iOctetsNecessaires);
    
        // Gestion des erreurs
        iErreur := GetLastError;
        if iErreur <> ERROR_INSUFFICIENT_BUFFER then
        begin
          Result := Result + SysErrorMessage(iErreur);
          Exit;
        end;
    
        // Allocation du biffer
        GetMem(MyConfigService, iOctetsNecessaires);
    
        // Récupération des configurations du service
        if WinSvc.QueryServiceConfig(MyHandleService, MyConfigService,
            iOctetsNecessaires, iOctetsNecessaires) then
          Result := MyConfigService^.lpServiceStartName;
    
        // Nettoyage
        CloseServiceHandle(MyHandleSCM);
        CloseServiceHandle(MyHandleService);
      end
      else
        Result := 'Paramètres incorrects.';
    end;
    J'ai effectué quelques tests :
    avec un service en local, j'obtient "LocalSystem"
    avec un service réseau : "Descripteur non valide"
    J'ai essayer avec ou sans mdp pour le compte "NT AUTHORITY\NetworkService".
    Au vue du message d'erreur, je pense à un problème de sécurité dans les fonctions OpenSCManager ou OpenService. Mais je ne vois aucune solution...

    Merci d'avance pour votre aide!

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Effectivement, c'est un problème de droit d'accès à la base SCM distante.

    Il faudrait que tu sois administrateur du domaine pour faire cela ou alors que tu exécutes ce code avec un compte sur ta machine locale qui ait des droits sur la machine distante. Il y a peut être aussi d'autre autorisations à mettre en place sur la machine distante (accès à la registry à distance par exemple)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre actif Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Points : 250
    Points
    250
    Par défaut
    Ok merci, donc c'est pas mon code que je doit changer, mais les droits sur mes postes?

    Je vais essayé de donner une vue plus générale de mon service :
    J'ai un service, qui va lancer un exe à distance (sur le serveur).
    C'est cet exe qui va exécuter le code ci-dessus.

    C'est le poste du service ou le serveur que je doit paramétrer en admin du domaine? Quel domaine?

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par djidane39 Voir le message
    Ok merci, donc c'est pas mon code que je doit changer, mais les droits sur mes postes?
    J'ai pas dit cela, pour l'instant, c'est vrai que c'est plus un problème de droits/privilèges que de programme.

    Citation Envoyé par djidane39 Voir le message
    C'est le poste du service ou le serveur que je doit paramétrer en admin du domaine? Quel domaine?
    Explication ultra light car bien sûr c'est plus complexe que cela :

    Un domaine, c'est une entité contenant un serveur du domaine, une seule base de comptes utilisateurs hébergée sur le serveur et des PC clients qui font partie du domaine et qui sous traitent l'identification/authentification des utilisateurs du poste client au serveur du domaine.

    De même que sur un PC, tu as un groupe des administrateurs qui ont tous les droits sur le poste local, sur le domaine, tu as un groupe des administrateurs du domaine qui ont tous les droits sur tous les postes client du domaine.

    Citation Envoyé par djidane39 Voir le message
    Je vais essayé de donner une vue plus générale de mon service :
    J'ai un service, qui va lancer un exe à distance (sur le serveur).
    C'est cet exe qui va exécuter le code ci-dessus.
    • Un service local, il tourne avec quelle identité
    • il va lancer un exe à distance, comment ?
    • Avec quels droits/privilèges cet exe va s'exécuter sur le poste distant
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre actif Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Points : 250
    Points
    250
    Par défaut
    Merci pour les explications!
    Citation Envoyé par ram-0000 Voir le message
    • Un service local, il tourne avec quelle identité
    • Il va lancer un exe à distance, comment ?
    • Avec quels droits/privilèges cet exe va s'exécuter sur le poste distant
    * C'est un service lancer en tant que "NT AUTHORITY\NetworkService"
    * Il lance un exe du serveur avec la fonction Delphi CreateProcess
    * Apparemment CreateProcess permet de paramétrer des droits, je vais regarder de ce coté là!

Discussions similaires

  1. [JDBC]ResultSet:Index de descripteur non valide
    Par etiennegaloup dans le forum JDBC
    Réponses: 8
    Dernier message: 20/04/2018, 17h10
  2. Réponses: 0
    Dernier message: 23/12/2009, 23h21
  3. Réponses: 7
    Dernier message: 03/09/2007, 12h57
  4. IOException : Descripteur non valide
    Par akrobat dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 20/06/2006, 09h12
  5. TThread et waitfor - descripteur non valide
    Par code34 dans le forum Langage
    Réponses: 2
    Dernier message: 27/10/2003, 23h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo