0/5 (22 avis)
Vue 17 992 fois - Téléchargée 1 428 fois
//Source developpé sous dev c++ //--------------------------------------------------------------------------- //Commande preprocesseur #include <stdio.h> #include <time.h> //Pour la fonction sleep #include <winsock2.h> //Pour le client winsock //Déclaration des variables SERVICE_STATUS m_ServiceStatus; SERVICE_STATUS_HANDLE m_ServiceStatusHandle; bool bRunning=true; //Déclaration des variable pour le client winsock SOCKET s; in_addr addr; sockaddr_in sin; hostent * host; WSADATA wsa; char buf[1024]; int octet = 0; //Déclaration des fonctions void WINAPI ServiceMain(DWORD argc, LPTSTR *argv); void WINAPI ServiceCtrlHandler(DWORD Opcode); bool InstallService(); bool DeleteService(); int Action(void); //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //Fonction principal //Analyse des arguments passé en paramètre. //Si pas de paramètre passé en argument initialisation du service int main(int argc, char* argv[]) { if(argc>1) { if(strcmp(argv[1],"-i")==0) //Control de l'argument passé au prog {InstallService();} //Rien lancement du service //-i pour enregistement du service if(strcmp(argv[1],"-d")==0) //-d pour désactivation du service {DeleteService();} } else { //Si pas d'argument : //déclaration du service et démarrage dans ServiceMain() SERVICE_TABLE_ENTRY DispatchTable[]={{"Connexion",ServiceMain},{NULL,NULL}}; StartServiceCtrlDispatcher(DispatchTable); } return 0; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //Fontion principal où se situe le code que le service execute void WINAPI ServiceMain(DWORD argc, LPTSTR *argv) { //Déclaration des variables DWORD status; DWORD specificError; m_ServiceStatus.dwServiceType =SERVICE_WIN32; m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING; m_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP; m_ServiceStatus.dwWin32ExitCode = 0; m_ServiceStatus.dwServiceSpecificExitCode = 0; m_ServiceStatus.dwCheckPoint = 0; m_ServiceStatus.dwWaitHint = 0; m_ServiceStatusHandle = RegisterServiceCtrlHandler("Connexion",ServiceCtrlHandler); if (m_ServiceStatusHandle == (SERVICE_STATUS_HANDLE)0) { return; } m_ServiceStatus.dwCurrentState = SERVICE_RUNNING; m_ServiceStatus.dwCheckPoint = 0; m_ServiceStatus.dwWaitHint = 0; if (!SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus)) { } bRunning=true; //C'est la qu'il faut mettre les commandes qui s'éxécuteront pendant tout le temps ou le service fontcionne while(bRunning) { //Commande que le service execute //les 4 ligne du dessous servent juste aà montrer que le service tourne et que tout les minutes il écrit test dans le fichier text FILE * log ; log = fopen ( "c:\\log.txt" , "a" ) ; fprintf ( log , "test\n" ) ; fclose ( log ) ; Sleep(6000); //Le temps est en millisseconde, sert à temporiser l'action pour pas quelle s'execute en boucle //on peut aussi avoir une action qui se déclanche sur un évènement partculié Action(); //Fonction où mettre le code a executer } return; } //--------------------------------------------------------------------------- //Fonction de control de l'état du service void WINAPI ServiceCtrlHandler(DWORD Opcode) { switch(Opcode) { //Si le service reçoit la commande de se mettre en pause case SERVICE_CONTROL_PAUSE: m_ServiceStatus.dwCurrentState = SERVICE_PAUSED; break; case SERVICE_CONTROL_CONTINUE: m_ServiceStatus.dwCurrentState = SERVICE_RUNNING; break; //Si le service reçoit la commande de stopper case SERVICE_CONTROL_STOP: m_ServiceStatus.dwWin32ExitCode = 0; m_ServiceStatus.dwCurrentState = SERVICE_STOPPED; m_ServiceStatus.dwCheckPoint = 0; m_ServiceStatus.dwWaitHint = 0; SetServiceStatus (m_ServiceStatusHandle,&m_ServiceStatus); bRunning=false; //donc la boucle plus haut ne s'effectura plus break; case SERVICE_CONTROL_INTERROGATE: break; } return; } //--------------------------------------------------------------------------- //Si l'argument est -i enregistement du service ici bool InstallService() { char strDir[1024]; SC_HANDLE schSCManager,schService; GetCurrentDirectory(1024,strDir); strcat(strDir,"\\connexion.exe"); schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); if (schSCManager == NULL) return false; LPCTSTR lpszBinaryPathName=strDir; schService = CreateService(schSCManager,"Connexion","Connexion réseaux", SERVICE_ALL_ACCESS, // Type d'acces SERVICE_WIN32_OWN_PROCESS, // Type de service SERVICE_AUTO_START, // Pour le demarrage automatique SERVICE_ERROR_NORMAL, // error control type lpszBinaryPathName, // service's binary NULL, // no load ordering group NULL, // no tag identifier NULL, // no dependencies NULL, // Si null demarrer en tant que compte system NULL); // Mot de passe : null si demarrer en tant que system if (schService == NULL) return false; CloseServiceHandle(schService); return true; } //--------------------------------------------------------------------------- //Si l'argument est -d désactivation du service ici bool DeleteService() { SC_HANDLE schSCManager; SC_HANDLE hService; schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); if (schSCManager == NULL) return false; hService=OpenService(schSCManager,"Connexion",SERVICE_ALL_ACCESS); if (hService == NULL) return false; if(DeleteService(hService)==0) return false; if(CloseServiceHandle(hService)==0) return false; else return true; } //--------------------------------------------------------------------------- //Fonction pour la connexion a internet int Action(void) { WSAStartup(0x0202, &wsa); s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); /*if(s == SOCKET_ERROR){ //printf("socket : %d\n", WSAGetLastError()); }
18 juin 2012 à 18:22
18 avril 2012 à 09:45
1>------ Rebuild All started: Project: Service Windows, Configuration: Release Win32 ------
1>Build started 18/04/2012 09:32:15.
1>_PrepareForClean:
1> Deleting file "Release\Service Windows.lastbuildstate".
1>InitializeBuildStatus:
1> Touching "Release\Service Windows.unsuccessfulbuild".
1>ClCompile:
1> main.cpp
1>main.cpp(88): warning C4101: 'status' : variable locale non référencée
1>main.cpp(89): warning C4101: 'specificError' : variable locale non référencée
1>LINK : fatal error LNK1181: impossible d'ouvrir le fichier en entrée 'C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Lib\WS2_32.Lib'
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.95
======== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
18 avril 2012 à 09:43
13 nov. 2007 à 11:22
MERCI D4AVANCE
24 déc. 2006 à 10:35
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.