Création d'un service Nt
Date de publication : 27 novembre 2008
Par
Jean Luc Baptiste (www.btsig.org)
Création d'un service Nt (19 méga) Création de procédures globales. Création connexion FTP. Lecture de fichiers texte. Recherche de processus en mémoire. Arrêt de processus.
Ce nouveau cours va vous permettre de créer un service Nt.
|
Les services NT vous permettent de créer des programmes qui démarrent en même temps que Windows NT (avant l'ouverture de la session).
|
L'intérêt d'un service Nt est qu'il s'exécute avant l'ouverture de la session de l'utilisateur. Imaginez un instant que malgré vos remarques vos enfants continuent à utiliser des logiciels de téléchargement de type pair To pair (Lphant, Emule, kazaa..). Après les menaces, les injonctions, rien à faire, ils continuent à utiliser les softs à votre insu (ça sent le vécu !).
Comme vous êtes excédé, vous décidez de créer un service Nt qui fermera automatiquement et quasiment immédiatement les programmes incriminés, non, mais ! C'est qui qui commande ?!
|
Ce support est réalisé avec WinDev 12, mais la procédure est identique pour les versions antérieures.
|
Nous allons créer un nouveau projet nommé tp12.
Cliquez sur Fichier puis Nouveau.
Ensuite, dans le carrousel choisissez Projet (L'immense P jaune) :
L'assistant ouvre la première fenêtre de dialogue :
Saisissez les informations « Tp11 » dans le champ Nom du projet : et un résumé si vous le désirez ensuite cliquez sur le bouton symbolisant Suivant.
Voici le nouvel écran :
Comme nous n'avons aucun document à ajouter, nous pouvons cliquer sur Suivant.
Ici, l'assistant nous demande ce que nous voulons réaliser, le choix par défaut « Exécutable (.exe) » nous convient, cliquons sur le bouton Suivant.
Le choix par défaut « Plate-forme Windows » nous convient, cliquons sur Suivant.
Ici, vu la modestie de notre projet, nous allons rien modifier à cet écran et passer directement au suivant.
Là non plus, nous n'avons rien à indiquer, hop suivant !
Ici, indiquez que vous travaillez seul et cliquez sur Suivant.
Nous n'allons pas utiliser le gestionnaire de sources, un clic sur Suivant.
Nous n'allons pas demander à WinDev de préfixer nos variables et autres objets, choisissez le choix « Non, ne pas utiliser de charte de programmation » et Suivant.
Un Service Nt ne comportant aucune fenêtre, ni objet graphique choisissez « Aucune » dans la liste des chartes graphiques puis un clic sur Suivant.
Comme je viens de vous le dire notre projet ne comportera aucune fenêtre, donc cliquez juste sur Suivant.
Notre projet ne gérera aucune autre langue que le français, vous pouvez cliquer directement sur le bouton Suivant.
Nous n'utiliserons pas de base de données, sélectionnez ce choix-là et cliquez sur le bouton Suivant.
Nous voici arrivé à la fin de l'assistant vous pouvez cliquer sur le Jet vert.
WinDev nous demande ce que l'on veut réaliser, cliquez sur « Aller directement dans l'éditeur de WinDev »
Si vous êtes sous le tableau de bord :
Cliquez sur l'icône « Afficher le graphe du projet »:
Un service Nt WinDev doit avoir 3 procédures globales pour pourvoir fonctionner :
-
InitService : Cette procédure est appelée automatiquement au démarrage du service.
-
Service : Cette procédure correspond au service.
-
FinService : Cette procédure est appelée automatiquement à l'arrêt du service.
Nous allons créer la première « InitService » :
Dans la zone inférieure de l'éditeur, cliquez sur l'onglet du code, puis sur « Procédures Globales ». Enfin, faites un clic avec le bouton droit de la souris, dans la zone de droite pour faire apparaître le menu contextuel suivant.
Cliquez sur « Nouvelle procédure globale » et nommez là « InitService ».
Faites de même pour « Service » et pour « FinService ».
Voici le résultat attendu :
Au niveau du projet nous avons besoin de créer des variables globales pour cela cliquez sur « Projet » puis « Code du Projet ».
Vous voici dans l'éditeur de code du projet :
Dans la zone « Initialisation de Tp11 » saisissez ceci :
Nous avons deux booléens qui nous donnerons des renseignements sur l'état du service, une variable de type chaine de caractère qui contiendra le contenu du fichier des programmes interdits et un autre booléen « rec » qui nous indiquera si le fichier texte à bien été récupéré.
Nous allons maintenant créer une procédure globale qui nous permettra de récupérer le fichier texte sur un serveur Ftp.
Pourquoi utiliser un serveur Ftp ?
- La première raison est que cela permet d'apprendre à se servir des fonctions de manipulations FTP de WinDev.
- La deuxième est que de n'importe où dans le monde vous pouvez modifier votre fichier texte et par ricochet agir sur l'ordinateur contrôlé - whaouuu cette impression de puissance !
La nouvelle procédure globale va s'appeler « recupdonnees »
Voici son contenu :
La fonction FTPConnecte prend 6 paramètres :
- L'adresse de votre serveur FTP.
- Votre login
- Votre mot de passe
- Le numéro du port de connexion (21 par défaut).
- Le Type de connexion : Vrai (par défaut) pour une connexion passive au serveur FTP. Lors d'un transfert de fichiers, c'est le serveur qui prend l'initiative du transfert. Ce type de connexion permet de franchir certains "firewalls".
- Délai de connexion : Nombre de secondes au bout desquelles la requête de connexion au serveur FTP est abandonnée (par défaut 20).
FTPConnecte retourne un numéro de connexion qui doit être différent de -1 si la connexion au serveur FTP s'est bien déroulée.
La fonction FTPRécupére télécharge sur le serveur FTP le fichier demandé (ici pairtopair.txt) et le dépose dans le répertoire d'exécution (par FRepEncours).Cette fonction renvoie vrai si le téléchargement s'est bien passé, faux dans le cas contraire.
Si le téléchargement s'est bien déroulé, nous plaçons dans la chaine de caractère lefichier le contenu du fichier « pairtopair.txt » que voici :
Ceux qui n'ont pas de serveur FTP peuvent créer un fichier texte nommé pairtopair.txt et le placer dans le répertoire Windows de la machine à contrôler et modifier la procédure de la façon suivante :
Récapitulons :
Vous avez codé la procédure « recupdonnées », crée un dossier nommé « pairtopair » sur votre serveur FTP et déposé dans celui-ci le fichier « pairtopair.txt » contenant la liste des programmes dont vous ne voulez pas l'exécution sur vos ordinateurs.
Ou alors :
Vous n'avez pas de serveur FTP et vous avez codé la procédure « recupdonnées » simplifiée et avez crée le fichier « pairtopair.txt » que vous avez déposé ou que vous déposerez plus tard sur la machine hôte dans le dossier « System32 » de « Windows ».
À partir de maintenant il nous reste à coder les 3 procédures obligatoires. Commençons par « InitService » :
Il n'y a pas beaucoup de code. En fait, nous allons mettre notre booléen pour indiquer que le service est activé.
Continuons par « Finservice ».
Ben oui ! Elle est obligatoire, mais il n'est pas obligatoire d'y mettre quoi que ce soit !
Nous finissons par la procédure globale « Service »
Quelques commentaires sur le code :
Le début du programme indique que le service est en cours d'exécution grâce au booléen gbServiceEnCours.
Si le service n'est pas démarré alors, on relance l'initialisation du service.
Si rec = faux alors on relance la procédure de récupération du fichier texte.
Si le service est démarré alors, nous allons placer dans la chaine « lesprocess » l'ensemble des processus actifs en mémoire grâce à la fonction ExeListeProcessus. Les processus sont séparés, dans la chaine, par des retours chariot (RC)
Si la chaine lesprocess est différente de chaine vide alors
Pour toute sous chaine « processus » de la chaine « lesprocess » séparée par des retours chariot, on recherche si cette sous-chaine existe dans la liste des fichiers interdits inscrits dans la chaine contenant le fichier texte. La recherche d'une sous chaine dans une chaine se réalise avec la fonction ChaineOccurrence (qui renvoie le nombre de fois ou cette sous-chaine a été trouvée.
Si la sous-chaine a été trouvée, on récupère le process identifiant dans la variable « lepid ».
Le pid (Process identifiant ou l'identifiant du processus) identifie de manière unique le processus en mémoire.
Une fois que l'on a son numéro, il ne reste plus qu'à donner l'ordre à Windows de le tuer avec la fonction ExeTermine(numéro pid).
Voilà la partie codage est quasiment finie. Il nous faut maintenant régler quelques détails techniques.
Création de la bibliothèque.
Il est impératif de créer la bibliothèque de l'application. Pour cela cliquez sur le menu « Atelier » puis « Bibliothèque » puis « Générer la bibliothèque ».
Un assistant ce met en route, suivons le ensemble. Voici la première fenêtre :
Comme notre projet est à vocation à être unique cliquez sur « Non ».
Cliquez sur le bouton « Suivant ».
Ici, WinDev nous montre les éléments intégrés à la bibliothèque et le lieu ou elle va être créée. Cliquez sur « Suivant ».
Pour les langues de la bibliothèque le choix proposé par défaut est le bon, cliquez sur « Suivant ».
Ici, vous pouvez vous faire plaisir en inscrivant ce que vous voulez, puis cliquez sur « Suivant ».
Comme nous avons déclaré être seul développeur du projet le choix proposé par défaut est correct. Cliquez sur « Suivant ».
Ici, j'ai indiqué que la bibliothèque ne prendrait pas en compte les patchs, notre applicatif est régénérable intégralement. Cliquez sur « Suivant »
Voilà, nous sommes arrivés à la fin de l'assistant, il ne reste plus qu'a cliquer sur le jet vert.
Allons jeter un coup d'oil au répertoire de l'applicatif. Pour cela rendez-vous dans le répertoire « Exe » du l'applicatif.
La bibliothèque est correctement créée. Maintenant il va falloir créer un fichier ini dans ce répertoire. En voici le contenu :
Pour créer le fichier ini ouvrez un éditeur de texte, saisissez le texte tel qu'au-dessus et enregistrez-le en « WDSERVICE.INI ».
Il nous faut copier ensuite un programme fourni par Pc-Soft qui permet d'inscrire le service dans Windows.
Aller dans le répertoire de votre WinDev, puis dans le dossier Exemples, puis dans le dossier Exemples complets. Dans la liste des exemples, recherchez celui nommé WD Service NT. A l'intérieur vous trouverez 2 répertoires cliquez sur « WD Service NT » puis sur « Exe ». Copiez le programme nommé « WDSERVICE.EXE » dans le répertoire « exe » de notre application « Tp11 ».
Voici a présent le contenu du dossier « exe » du projet « Tp11 ».
Pour que le programme fonctionne, il faut aussi rajouter le Framework WinDev dans ce dossier. On ne va pas s'embêter à trier les bonnes dll des autres, nous allons toutes les copier. Pour cela allez dans le dossier Programme de votre WinDev et copier toutes les dll WD****.dll, remplacez les 2 premières étoiles par la version de WinDev que vous utilisez. Ensuite copiez l'ensemble dans le dossier « Exe » de « Tp11 ».
Voilà une capture écran de ce qui y a dans le dossier « exe » de « Tp11 ». Notez bien que beaucoup de ces dll ne sont pas nécessaires, mais plutôt que de passer du temps à rechercher que celle réellement utilisée par le programme la méthode utilisée a été une méthode empirique.
Installation du service :
Pour installer le service, rien de plus simple. Imaginons que vous copiez l'ensemble du répertoire « Exe » dans un dossier d'une clé usb. Imaginons que le dossier de la clé usb se nomme « Tp11 » et que votre clé apparaisse au niveau de l'ordinateur avec la lettre de volume « F ».
Cliquez sur « Démarrer », puis « Exécuter » et ensuite frappez la séquence de touche suivante « f:\Tp11\WDSERVICE.EXE -install » et validez en cliquant sur le bouton « Ok ».
Ouvrez maintenant le gestionnaire de service vous devriez voir apparaître votre service, vérifiez qu'il soit démarré. Si ce n'est pas le cas, démarrez-le.
Voilà, à partir de maintenant dès qu'un programme de la liste se lancera votre service le tuera aussitôt.
Pour enlever le service, il suffit de saisir :
« f:\Tp11\WDSERVICE.EXE -remove »
C'est fini, merci de m'avoir accompagné jusque-là.
Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ©
2008 Jean Luc Baptiste. Aucune reproduction, même partielle, ne peut être
faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc.
sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à
trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.