Windows nt services

Soyez le premier à donner votre avis sur cette source.

Vue 11 929 fois - Téléchargée 756 fois

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 / Exemple :


==> 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++...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

ritchieja
Messages postés
1
Date d'inscription
samedi 7 novembre 2009
Statut
Membre
Dernière intervention
7 mars 2013

comment ajouter mon propre code a ce service
par exemple je veux ce service qu'il fait quelque chose ??
nurnen
Messages postés
3
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
8 septembre 2009

Dans NTService.c, dans la fonction suivante :
void WINAPI ServiceHandler(DWORD dwControl)
il faut ajouter :
case SERVICE_CONTROL_INTERROGATE:
break;
nurnen
Messages postés
3
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
8 septembre 2009

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

http://support.microsoft.com/kb/320789
nurnen
Messages postés
3
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
8 septembre 2009

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.
cs_vicenzo
Messages postés
179
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
25 août 2010

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.