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
Afficher la suite