begin process at 2012 02 05 04:17:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > WINDOWS NT SERVICES

WINDOWS NT SERVICES


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Système Classé sous :services, service, nt, windows, manager Niveau :Initié Date de création :03/06/2007 Date de mise à jour :01/11/2007 10:00:47 Vu / téléchargé :9 788 / 589

Auteur : vicenzo

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

ANSI C Windows NT Services API Encapsulation (WinServices Library v1.6.0)

Cette librairie est une encapsulation complète de l'API de services Microsoft Windows NT (NT4, 2k, 2000 and Vista).

Dorénavant disponible sur SourceForge.net :  http://sourceforge.net/projects/ntwinserv

Source

  • ==> SOMMAIRE *******************************************************************
  • 1. DESCRIPTION
  • 2. IMPLEMENTATION DE SERVICES
  • 3. CONTROLE DE SERVICES
  • 4. CONTACT
  • ==> 1. DESCRIPTION ****************************************************************
  • > IMPLEMENTATION DE SERVICES
  • * Encapsulation quasi complète de l'API windows de services
  • * full customization via callback
  • * embeddable dans une Dll
  • * full logging support (via Windows events logs)
  • * convertit toute application C/C++ en service Windows NT
  • > CONTROLE DE SERVICES
  • * installation, modification, suppression
  • * start, stop, pause, redémarrage de service
  • * vérification du status d'un service
  • * listage de services
  • * Informations complètes sur un service
  • * gestion des dépendances
  • * gestions des services sur des machines distantes
  • > MISC.
  • * ansi / unicode support
  • ==> 2. SERVICE IMPLEMENTATION *************************************************
  • Pour implémenter un service, il suffit juste de fournir une fonction de traitement !
  • Exemple :
  • #include <NTService.h>
  • void WINAPI MyServiceMain()
  • {
  • while (!ServiceIsTerminated())
  • {
  • if (ServiceGetCurrentStatus() == SERVICE_RUNNING)
  • {
  • /* code application */
  • /* ... */
  • }
  • ServiceSleep(1000);
  • }
  • }
  • int main(int argc, char** argv)
  • {
  • return ServiceRun("MyServiceName", MyServiceMain, 1000, SERVICE_ACCEPT_STOP);
  • }
  • Pour plus de contrôle et/ou information sur le service et ses évènements, il est possible de fournir une fonction callback
  • Exemple :
  • DWORD WINAPI MyServiceCallback(DWORD dwEvent, DWORD dwState)
  • {
  • switch (dwEvent)
  • {
  • case SE_INSTALL:
  • if (dwState == SS_SUCCESS)
  • ServiceLog(EVENTLOG_INFORMATION_TYPE, _T("Installation ok"));
  • break;
  • case SE_DELETE:
  • if (dwState == SS_SUCCESS)
  • ServiceLog(EVENTLOG_INFORMATION_TYPE, _T("Uninstallation ok"));
  • break;
  • case SE_START:
  • /*...*/
  • break;
  • case SE_STOP:
  • /*...*/
  • break;
  • case SE_PAUSE:
  • /*...*/
  • break;
  • case SE_CONTINUE:
  • /*...*/
  • break;
  • case SE_CUSTOM:
  • return ServiceLog(EVENTLOG_INFORMATION_TYPE, _T("Event %s - Status %s"), dwEvent, dwState);
  • }
  • return SS_SUCCESS;
  • }
  • Pour utiliser le logging par défaut dans le journal système de windows, il faut inclure les fichiers NTEventLog.xxx à votre projet
  • ==> 3. IMPLEMENTATION DE SERVICES ********************************************************
  • La librarie fournit toute les fonctions nécessaires pour contrôler des services en local ou distants.
  • Exemple pour lister les services en local :
  • LPSERVICE_ITEM list = LocalServiceGetList(SERVICE_WIN32, SERVICE_STATE_ALL, &count);
  • for (i = 0; i < count; i++)
  • {
  • printf(list[i].lpDisplayName);
  • printf(list[i].lpServiceName);
  • LPSERVICE_INFO info = LocalServiceGetInfo();
  • if (info)
  • {
  • printf(info->lpBinaryPathName);
  • printf(info->lpDescription);
  • printf(info->lpServiceStartName);
  • ServiceFreePointer(info);
  • }
  • }
  • ==> 4. CONTACT ****************************************************************
  • Pour toute remarque, commentaire, bug, contactez moi :
  • vince_rogier@yahoo.fr
  • Have fun !!!
==> SOMMAIRE *******************************************************************

    1. DESCRIPTION
    2. IMPLEMENTATION DE SERVICES
    3. CONTROLE DE SERVICES
    4. CONTACT


==> 1. DESCRIPTION ****************************************************************

    > IMPLEMENTATION DE SERVICES
    
    * Encapsulation quasi complète de l'API windows de services
    * full customization via callback
    * embeddable dans une Dll
    * full logging support (via Windows events logs)
    * convertit toute application C/C++ en service Windows NT

    > CONTROLE DE SERVICES

    * installation, modification, suppression
    * start, stop, pause, redémarrage de service
    * vérification du status d'un service
    * listage de services
    * Informations complètes sur un service
    * gestion des dépendances
    * gestions des services sur des machines distantes

    > MISC.

    * ansi / unicode support

==> 2. SERVICE IMPLEMENTATION *************************************************

Pour implémenter un service, il suffit juste de fournir une fonction de traitement !

Exemple :


#include <NTService.h>

void WINAPI MyServiceMain()
{
    while (!ServiceIsTerminated())
    {
        if (ServiceGetCurrentStatus() == SERVICE_RUNNING)
        {
            /* code application */
            /* ... */	
        }
        
        ServiceSleep(1000);			
    }
}

int main(int argc, char** argv)
{
    return ServiceRun("MyServiceName", MyServiceMain, 1000, SERVICE_ACCEPT_STOP);
}

Pour plus de contrôle et/ou information sur le service et ses évènements, il est possible de fournir une fonction callback

Exemple :

DWORD WINAPI MyServiceCallback(DWORD dwEvent, DWORD dwState)
{
    switch (dwEvent)
    {
        case SE_INSTALL: 
            if (dwState == SS_SUCCESS)
                ServiceLog(EVENTLOG_INFORMATION_TYPE, _T("Installation ok"));
            break;
        case SE_DELETE: 
            if (dwState == SS_SUCCESS)
                ServiceLog(EVENTLOG_INFORMATION_TYPE, _T("Uninstallation ok"));
            break;
        case SE_START: 
            /*...*/
            break;
        case SE_STOP: 
            /*...*/
            break;
        case SE_PAUSE:
            /*...*/
            break;
        case SE_CONTINUE:
            /*...*/
            break;
        case SE_CUSTOM: 
            return ServiceLog(EVENTLOG_INFORMATION_TYPE,  _T("Event %s - Status %s"), dwEvent, dwState);
    }
    
    return SS_SUCCESS;
}

Pour utiliser le logging par défaut dans le journal système de windows, il faut inclure les fichiers NTEventLog.xxx à votre projet

==> 3. IMPLEMENTATION DE SERVICES ********************************************************

La librarie fournit toute les fonctions nécessaires pour contrôler des services en local ou distants.

Exemple pour lister les services en local :

LPSERVICE_ITEM list = LocalServiceGetList(SERVICE_WIN32, SERVICE_STATE_ALL, &count);

for (i = 0; i < count; i++) 
{
    printf(list[i].lpDisplayName);
    printf(list[i].lpServiceName);
 
    LPSERVICE_INFO info = LocalServiceGetInfo();
	
    if (info)
    {
        printf(info->lpBinaryPathName);
        printf(info->lpDescription);
        printf(info->lpServiceStartName);

        ServiceFreePointer(info);
    }
}

==> 4. CONTACT ****************************************************************

Pour toute remarque, commentaire, bug, contactez moi :

vince_rogier@yahoo.fr


Have fun !!!


 Conclusion

Des projets exemples VC++6 et VS2005 sont fournis...
De plus, pour une fois c'est du bon vieux C et non des classes C++...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

03 juin 2007 19:28:54 :
Ajout code exemple en ligne
03 juin 2007 19:36:11 :
.
03 juin 2007 19:42:27 :
.
03 juin 2007 19:46:56 :
.
03 juin 2007 19:47:44 :
.
03 juin 2007 19:49:53 :
.
03 juin 2007 20:15:30 :
.
03 juin 2007 20:25:17 :
.
03 juin 2007 20:26:42 :
.
03 juin 2007 20:27:15 :
.
03 juin 2007 20:39:09 :
.
04 juin 2007 22:31:16 :
Ajout fonction ServiceGetList : récupere la liste de tous les sercvice d'un machine Ajour fonction ServiceGetInfo : met à jout la config d'un service Remplacement ServiceModify par ServiceSetInfo : récupère la config d'un service Ajout de un paramètre sur les fonctions ServiceStop et ServiceRestart Correction gestion des dependances lors de l'arrêt d'un service Mis à jour du projet de test avec quelques fonctions de test ...
04 juin 2007 22:34:52 :
Désolé, les retours chariot ont sauté...
05 juin 2007 07:09:35 :
Correction d'un appel de fonction
24 juillet 2007 19:10:36 :
modification des mots clés
30 août 2007 22:26:53 :
Important remodelage de la librairie ! 2007/08/12 : v1.3 - added debug support, custom msg file, remove remote macros 2007/08/20 : v1.4 - added GPL license 2007/08/27 : v1.5 - API modifications
30 août 2007 22:33:59 :
.
30 août 2007 22:36:20 :
Désolé pour l'indentation du texte, ca marche pô ! 2007/08/12 : v1.3 - added debug support, custom msg file, remove remote macros 2007/08/30 : v1.4 - added GPL license 2007/08/27 : v1.5 - API modifications
30 août 2007 22:43:29 :
.
02 septembre 2007 10:09:20 :
text indentation
07 septembre 2007 09:12:36 :
v1.6 : correction de 3 bugs génants dans la gestion de l'EventLog (installation et logging) et dans la gestion des events du callback.
21 octobre 2007 18:11:17 :
la librairie est dorénavant hébergée sur SourceForge.net. URL : http://sourceforge.net/projects/ntwinserv
21 octobre 2007 18:14:42 :
Cette librairie est dorénavant hébergée sur SourceForge.net URL : http://sourceforge.net/projects/ntwinserv Pour ceux qui codent en C et bossent avec Oracle, visitez aussi : http://sourceforge.net/projects/orclib
01 novembre 2007 09:59:33 :
mise à jour du lien + mise à jour zip
01 novembre 2007 10:00:47 :
mise à jour lien + modif zip (aucune modif du code)

 Sources de la même categorie

Source avec Zip Source avec une capture UNE LISTE HÉTÉROGÈNE DOUBLEMENT CHAINÉE par pgl10
Source avec Zip Source avec une capture POUR AFFICHER LES CARACTÈRES ACCENTUÉS SOUS WINDOWS EN MODE ... par pgl10
Source avec Zip PETITE CLASSE DE GESTION DES PROCESSUS SOUS WINDOWS par wisar
Source avec Zip KEYLOGGER AVEC NOM DU PROCESSUS ET DE LA FENETRE QUI A LE FO... par wisar
Source avec Zip LINUX USB BOOT LEGER par patatalo

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture POUR AFFICHER LES CARACTÈRES ACCENTUÉS SOUS WINDOWS EN MODE ... par pgl10
Source avec Zip Source avec une capture SOKOBAN EN C POUR DÉBUTANT (VERSION AMÉLIORÉE BASÉE SUR LE T... par eustatika
Source avec Zip [MYLIB] GESTION DE FICHIERS par Galaad2908
Source avec Zip Source avec une capture GESTIONNAIRE DE SERVICES WINDOWS par draluorg
Source avec Zip Source avec une capture [C/WIN32] SERVICE WIN, ÉTEINT LE PC APRÈS 1H D'INACTIVITÉ. par deck_bsd

Commentaires et avis

Commentaire de dridri80 le 20/06/2007 14:19:31

j'obtiens les erreurs suivantes :

Compiling...
service.c
\service\service.c(165) : error C2065: 'SERVICE_CONTROL_DEVICEEVENT' : undeclared identifier
\service\service.c(165) : error C2051: case expression not constant
\service\service.c(166) : error C2065: 'SERVICE_CONTROL_HARDWAREPROFILECHANGE' : undeclared identifier
\service\service.c(166) : error C2051: case expression not constant
\service\service.c(167) : error C2065: 'SERVICE_CONTROL_POWEREVENT' : undeclared identifier
\service\service.c(167) : error C2051: case expression not constant
\service\service.c(168) : error C2065: 'SERVICE_CONTROL_SESSIONCHANGE' : undeclared identifier
\service\service.c(168) : error C2051: case expression not constant

que faire ?

Commentaire de vicenzo le 20/06/2007 19:42:17

C'est que ton SDK ne contient pas ces constantes...
J'utilise le SDK fournis par VS2005.
Je viens de vérifier le SDK fourni par VC6 qui ... effectivement ne définit pas ces constantes...
Je mettrai la source a jour dans la soirée si possible...
Sinon tu peux rajouter, pour le moment, les lignes suivantes au début du service.c

#ifndef SERVICE_CONTROL_DEVICEEVENT

#define SERVICE_CONTROL_DEVICEEVENT            0x0000000B
#define SERVICE_CONTROL_HARDWAREPROFILECHANGE  0x0000000C
#define SERVICE_CONTROL_POWEREVENT             0x0000000D
#define SERVICE_CONTROL_SESSIONCHANGE          0x0000000E

#endif

Vincent

Commentaire de nurnen le 15/06/2009 08:37:43 9/10

Au démarrage par net start, j'ai l'erreur "System error 1064 has occurred.
An exception occurred in the service when handling the control request."
(ERROR_EXCEPTION_IN_SERVICE)
Le service démarrage toutefois et semble se comporter correctement.
Exécuter le programme en ligne de commande ne lance pas le service.
Une idée pour enlever l'erreur?
Le lancement par le gestionnaire de services (graphique) fonctionne sans erreur.

Commentaire de nurnen le 08/09/2009 14:14:53

L'événement SERVICE_CONTROL_INTERROGATE n'est pas traité. Je pense que c'est la raison.

http://support.microsoft.com/kb/320789

Commentaire de nurnen le 08/09/2009 14:34:58

Dans NTService.c, dans la fonction suivante :
void WINAPI ServiceHandler(DWORD dwControl)
il faut ajouter :
case SERVICE_CONTROL_INTERROGATE:
break;

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Forcer le démarage d'un service Windows [ par Djpoops ] Boujour,J'utilise un logiciel de monitoring r&#233;seau et il y a 2 modules distincts. Ceux-ci sont reconnus comme services Windows et sont en d&#233; c++ Manipuler les services windows [ par PriMe2302 ] Bonjour, Je voudrais stopper et désactiver des services en c++ j'ai utiliser ce code : System::ServiceProcess::ServiceController^ serviceControll Services windows [ par mohdaef ] Bonjour J'ai écrit un premier petit service pour Windows afin de comprendre le fonctionnement. J'ai une attente de connexion de socket sur port, lor Erreur StartService [ par Taron31 ] Bonjour, je souhaiterais créer un service (Driver) ainsi que le lancer, voici mon code, l'erreur se situe au niveau de l'appel StartService avec le co Message windows et les services [ par slfs ] Bonjour,Je dois convertir une application windows en un service.J'ai des soucis pour trouver l'équivalent des messages windows (fonction postmessage,. question sur service windows [ par deck_bsd ] Bonjour/bonsoir à tous,Voila une petite question qui à mon avis n'en est pas une :DVoila en faite je crée un service et pour cela j'ai créer un projet Information sur les services [ par deck_bsd ] Bonjour / Bonsoir,Voila j'ai crée mon 1er service lol, mais j'ai deux question en suspen.- Qu'est ce que le SC manager ? Le gestionnaire de service?- Problème screenshot via service NT [ par Valty ] Bonjour, Après de (nombreux) tests, je n'ai pas réussi à réaliser une capture d'écran (screenshot) du desktop courant à partir d'un service NT. PS: Récupérer les infos sur les services Windows [ par sen25000 ] Bonjour. Comment afficher dans un fichier/tableau la liste des services Windows de façon à savoir quand ils ont démarré et quand ils se sont arrêtés.


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,546 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales