begin process at 2010 02 10 08:54:44
  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é :8 144 / 541

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 [C/WIN32/WMI]SAVOIR SI UNE CLASSE COM EST INSTALLÉE par rt15
Source avec Zip Source avec une capture [C/WIN32][DRIVER] DÉTECTION DE CRÉATION OU DE SUPPRESSION DE... par deck_bsd
Source avec Zip DÉTECTION DE LANCEMENT D'APPLICATION (WIN32, REGISTERSHELLHO... par buno
Source avec Zip Source avec une capture [C/WIN32] INJECTION DE DLL 2 MÉTHODES (REMOTETHREAD PROPRE &... par deck_bsd
PRODUCER CONSUMER C (WITHIN LINUX) par PCBill

 Sources en rapport avec celle ci

EXPLORATEUR DE FICHIERS WINDOWS EN C par wildhawk
Source avec Zip Source avec une capture CLASSE GRAPH: GESTION DES GRAPHIQUES DANS LES APPLICATIONS W... par Pistol_Pete
Source avec Zip [SDL/C++] JEU SIMPLE POUR COMMENCER DANS LA PROGRAMMATION DE... par marmous
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; Affichage d'un message par un service NT [ par sephiro ] Bonjour,J'ai un petit probleme, j'ai écris un service NT dans les grandes lignes il attend sur un port pour mettre à disposition des informations , ce borland 4.5 sous windows NT [ par rems38 ] Bonjour,j'aimerais savoir si quelqu'un adeja utiliser borland 4.5 sous windows NT. Je n'ai aucun probleme pour la compilation ni pour executer mon pro Clé de registre d'un service NT [ par arvymetal ] Bonjour,J'ai cr&#233;e un service NT qui fait tourner une application Win32, et je souhaiterais enregistrer les param&#232;tres li&#233;s &#224; cette librairie de gestion des Services Windows [ par zedoo ] bonjour, je suis a la recherche d'une lib me permettant de demarrer ou de stopper des Services Windows. j ai trouve la Class ServiceController mais qu installation de postgreSQL [ par sapsap2 ] bonjour,j'essai d'installer postgreSQl; version windows; mais &#224; chaque fois j'ai de message:"Le service 'Secondary Logon ' n'est pas pas en cours Mettre un programme comme service windows [ par atifelkhachine ] Salut les amis.j veux savoir comment lancer mon programme comme service windows. Création "Service Windows" en C++ sous visual Studio .NET [ par lherderien ] Bonjour a tous, Je suis confront&#233; &#224; un probl&#232;me de d&#233;veloppement de service windows. J'ai d&#233;velopp&#233; un programme en C++ Service NT + Release = Bug lors de l'arret ! HELP ! [ par MV34 ] Bonjour,J'ai un petit probl&#232;me que je n'arrive pas &#224; corriger !Voil&#224; j'ai impl&#233;ment&#233; un programme sous forme de service Windo démarrage automatique d'un service windows [ par boutonk ] Bonjour,J'ai d&#233;velopp&#233; un service windows en c++ sous .Net et j'aimerais trouv&#233; une solution pour que ce service fonctionne seulement l


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,905 sec (3)

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