begin process at 2010 02 09 18:49:44
  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

Creer un service sous NT ou win2000 [ par waxman ] Bonjour, je cherche desesperement comment creer un service sous nt ou 2000. J'ai deja developpé mon appli mais je n'arrive pas à la declarer en tant q Creer un service sous NT ou win2000 [ par waxman ] Bonjour, je cherche desesperement comment creer un service sous nt ou 2000. J'ai deja developpé mon appli mais je n'arrive pas à la declarer en tant q Creer un service sous NT ou win2000 [ par waxman ] Bonjour, je cherche desesperement comment creer un service sous nt ou 2000. J'ai deja developpé mon appli mais je n'arrive pas à la declarer en tant q Creer un service sous NT ou win2000 [ par waxman ] Bonjour, je cherche desesperement comment creer un service sous nt ou 2000. J'ai deja developpé mon appli mais je n'arrive pas à la declarer en tant q arrive pas a compiler .... [ par Heero ] #include void display();int main(int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); coder un service sous win 2000 [ par Sylfeline ] J'essaye de coder un service sous win 2000.J'ai trouvé un example ici http://www.muukka.net/programming/service.html- je tape en ligne de commande mon ressources et API !!!! [ par Xs ] salut !voila, pour me simplifier la tache, j'utlise les ressources pour creer une boite de dialog (sous VC++ 6).mais j'obtiens, lors de la compilation scanf() [ par clb ] bonjour à tous,j'ecris par exemple :int fonction(){ if(true) return 0; else return -1}dans main, si cette fonction retourne 0,alors j'appli passer un programme en "windows service" cbuilder [ par Sloft ] Comment faire pour faire passer un programme en "windows service" sous c++builder 5, merci ! Pb sur un ptit bout de prog en DirectX.... [ par Haldwin ] Salut a tous....Voila j'ai deux ptits pbs quand je lance cette appli ci-dessous... (VC++)La première est q'une fois sur deux ma variable hWnd apres le


Nos sponsors


Sondage...

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 : 1,154 sec (4)

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