begin process at 2012 02 10 16:17:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

Erreur StartService


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Erreur StartService

jeudi 28 février 2008 à 22:26:46 | Erreur StartService

Taron31

Membre Club
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 code erreur 0x02 (FILE_NOT_FOUND), ce qui me semble bizzard, vu que le driver est bien sur le disque.

#include <windows.h>
#include <winsvc.h>

#include <stdlib.h>
#include <stdio.h>


BOOL ExtractSYS(PCHAR, DWORD);

DWORD RegisterDriver(PCHAR, PCHAR, PCHAR, DWORD);
DWORD LoadDriver(PCHAR);


int main(int argc, char *argv[])
{
    if(RegisterDriver("C:\\Driver.sys", "Driver", "Driver", 0x00) == DRIVER_MANAGER_OK) {

        LoadDriver("Driver");
    }

    return 0;
}


BOOL IsFileExist(LPSTR lpszFilename)
{
    DWORD dwAttr = GetFileAttributesA(lpszFilename);
   
    if(dwAttr == 0xffffffff) return FALSE;
    else return TRUE;
}

DWORD LoadDriver(PCHAR nom_driver)
{
    HANDLE hService;
    HANDLE hSCManager;

    //Ouvre le Service Manager
    hSCManager = OpenSCManager(
        NULL,                                        //lpMachineName
        NULL,                                        //lpDatabaseName
        SC_MANAGER_CREATE_SERVICE                    //dwDesiredAccess
        );
   
    if(!hSCManager)    return DRIVER_MANAGER_ERROR_SCM;

    //Si tout va bien, ouvre le driver
    hService = OpenService(
        hSCManager,                                    //hSCManager
        nom_driver,                                    //lpServiceName
        SERVICE_ALL_ACCESS                            //dwDesiredAccess
        );

    if (!hService)
    {
        fprintf(stderr, "Error with OpenService : 0x%.8X\n\n", GetLastError());

        CloseServiceHandle(hSCManager);
       
        return DRIVER_MANAGER_ERROR_ACCESS;
    }

    //Le démarre
    if (!StartService(
            hService,                                //hService
            0,                                        //dwNumServiceArgs
            NULL                                    //lpServiceArgVectors
            )
        )
    {
        fprintf(stderr, "Error with StartService : 0x%.8X\n\n", GetLastError());

        CloseServiceHandle(hService);
        CloseServiceHandle(hSCManager);
       
        return DRIVER_MANAGER_ERROR_RUN;

    }

    //Nettoie tout ca
    CloseServiceHandle(hService);
    CloseServiceHandle(hSCManager);
       
    return DRIVER_MANAGER_OK;
}

DWORD RegisterDriver(PCHAR emplacement, PCHAR nom_court, PCHAR nom_complet, DWORD type)
{
    // Ouvre une connexion au Service Manager
    SC_HANDLE hSCManager;
    SC_HANDLE hService;

    DWORD type_value;

     // Vérifie si le fichier existe
    if(!IsFileExist(emplacement)) return DRIVER_MANAGER_NO_FILE;

    hSCManager= OpenSCManager(
        NULL,                                        // lpMachineName
        NULL,                                        // lpDatabaseName
        SC_MANAGER_CREATE_SERVICE                    // dwDesiredAccess
        );
   
    if(!hSCManager){
       
        fprintf(stderr, "Error with OpenSCManager : 0x%.8X", GetLastError());   
        return DRIVER_MANAGER_ERROR_SCM;
    }

    switch (type)
    {
        case 0:   // A la demande
            type_value = SERVICE_DEMAND_START;
            break;

        case 1:   // Automatique
            type_value = SERVICE_AUTO_START;
            break;

        case 2:   // Boot
            type_value = SERVICE_BOOT_START;
            break;

        case 3:   // Désactivé
            type_value = SERVICE_DISABLED;
            break;

        case 4:   // Système
            type_value = SERVICE_SYSTEM_START;
            break;

        default:
            return DRIVER_MANAGER_ERROR_CREATE;
    }

   
    // Si tout va bien, on enregistre le driver
    hService = CreateService(
        hSCManager,                                    // hSCManager
        TEXT("Driver"),                                    // lpServiceName
        TEXT("Driver"),                                // lpDisplayName
        SERVICE_ALL_ACCESS,                            // dwDesiredAccess
        SERVICE_KERNEL_DRIVER,                        // dwServiceType
        SERVICE_DEMAND_START,                        // dwStartType
        SERVICE_ERROR_NORMAL,                        // dwErrorControl
        emplacement,                                // lpBinaryPathName
        NULL,                                        // lpLoadOrderGroup
        NULL,                                        // lpdwTagId
        NULL,                                        // lpDependencies
        NULL,                                        // lpServiceStartName
        NULL                                        // lpPassword
        );

    if(!hService)
    {
        fprintf(stderr, "Error with CreateService : 0x%.8X\n\n", GetLastError());

        CloseServiceHandle(hSCManager);

        if (GetLastError() == ERROR_SERVICE_EXISTS)
            return DRIVER_MANAGER_ERROR_ALREADY;
        else
            return DRIVER_MANAGER_ERROR_CREATE;
    }

    // Nettoie tout ca
    CloseServiceHandle(hService);
    CloseServiceHandle(hSCManager);
       
    return DRIVER_MANAGER_OK;
}


Si vous voyez d'où peut provenir le problème, merci.

____________________________
MVS
- Microsoft Student Partner
jeudi 28 février 2008 à 22:45:52 | Re : Erreur StartService

BruNews

Administrateur CodeS-SourceS
C'est voulu que tu mixes ANSI et UNICODE dans ton prog ?

ciao...
BruNews, MVP VC++
jeudi 28 février 2008 à 22:47:12 | Re : Erreur StartService

Taron31

Membre Club
A vrai dire, c'est codé "à la vas-vite", j'y ai pas prêté attention, tu n'aurais pas idée de la source du pb ?

Merci

___________________
MVS
- Most Valuable Student ( Microsoft)
jeudi 28 février 2008 à 22:57:58 | Re : Erreur StartService

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
Refais déja cohérent asi OU unicode, faut enlever source de bug l'une après l'autre.

Prends exemple ici, c'est full exemple qui fonctionne:
http://www.cppfrance.com/code.aspx?ID=36941
te suffit de regarder dans le code de l'installeur du service.

ciao...
BruNews, MVP VC++


Cette discussion est classée dans : manager, service, driver, return, hscmanager


Répondre à ce message

Sujets en rapport avec ce message

service request [ par zhour2010 ] bonjour j'ai un projet concernant la programmation d'une carte d'acquisition KPCI3101 avec le langage C++ le driver de la carte est driverlinx et dans [ServiceWin32] Lancer une Dll grace à SVCHOST.EXE [ par xela138 ] Bonjour, Je souhaiterai obtenir de l'aide, je n'arrive pas à lancer un service de ma conception. Il s'installe à priori sans probleme, mais quand le s driver 64 bits [ par fibre_optique01 ] bonjour, à tous je possède une imprimante EPSON STYLUS pro 9600 (grand format) et je suis sous Windows7 Familiale PREMUIM. récemment changé de pc qu Petit problème API Windows [ par hichem16 ] Bonjour à tous ( ou bien bonsoir vu l'heure [^^langue3]) voila , je débute en API Windows et je suis entrain de faire un petit programme bien à moi, CreateProcess pour programme de mise à jour [ par Rankin ] Bonjour à tous, Je développe un service windows qui gère différentes choses au niveau du réseau, mais peu importe sa fonction ; je souhaite le mettre Problème de message windows [ par Jbs106 ] Bonjour Bonjour, comme je l'ai précisé dans le titre, je souhaite réaliser une application de dessin, un SKETCHER avec les MFCs, je l'ai réalisé grac C++?/ Problème pour recevoir des octets dans un tableau [ par LiaGalanodel ] Bonjour a tous. Je suis une grande débutante en c++ et je me heurte a un problème. Voila, je dois faire un programme de socket. J'utilise pour cela Passage de méthodes en paramètre [ par Adel85 ] Bonjour, J'ai récupéré un code écrit en c++ (http://cubature-research-group.cs.latrobe.edu.au/code.htm) pour le calcul des intégrale double. Si j'uti driver port parallèle [ par Malloc16 ] Salut à tous ! Je suis actuellement sur un projet dans lequel je dois procéder à une lecture du port parallèle avec un programme écrit en langage C, 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 : 2,449 sec (3)

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