BOOL CreateDriver( CString DriverName, CString FullDriver) {
///////////////////////////////////////////////////////////////
// Open service control manager
SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hSCManager=NULL) {
AfxMessageBox('Could not open Service Control Manager');
return FALSE;
}
//////////////////////////////////////////////////////////////////////
// If driver is running, stop it
SC_HANDLE hDriver = OpenService(hSCManager, DriverName, SERVICE_ALL_ACCESS);
if (hDriver!=NULL) {
SERVICE_STATUS ss;
if (ControlService(hDriver, SERVICE_CONTROL_INTERROGATE, &ss)) {
if (ss.dwCurrentState != SERVICE_STOPPED) {
if (!ControlService(hDriver, SERVICE_CONTROL_STOP, &ss)) {
AfxMessageBox('Could not stop driver');
CloseServiceHandle(hSCManager);
CloseServiceHandle(hDriver);
return FALSE;
}
// Give it 10 seconds to stop
BOOL Stopped = FALSE;
for (int seconds=0; seconds<10; seconds++) {
Sleep(1000);
if (ControlService(hDriver, SERVICE_CONTROL_INTERROGATE, &ss) && ss.dwCurrentState==SERVICE_STOPPED) {
Stopped = TRUE;
break;
}
}
if (!Stopped) {
AfxMessageBox('Could not stop driver');
CloseServiceHandle(hSCManager);
CloseServiceHandle(hDriver);
return FALSE;
}
}
CloseServiceHandle(hDriver);
}
return TRUE;
}
//////////////////////////////////////////////////////////////////////
// Create driver service
hDriver = CreateService(hSCManager, DriverName.DriverName, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL, Drivers, NULL, NULL,'parport ', NULL, NULL);
if (hDriver==NULL) {
AfxMessageBox('Could not install driver with Service Control Manager');
CloseServiceHandle(hSCManager);
return FALSE;
}
//////////////////////////////////////////////////////////////////////
CloseServiceHandle(hSCManager);
return TRUE;
}
///////////////////////////////////////////////////////////////////////
BOOL StartDriver(CString DriverName) {
//////////////////////////////////////////////////////////////////////
// Open service control manager
SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hSCManager==NULL) {
AfxMessageBox('Could not open Service Control Manager');
return FALSE;
}
//////////////////////////////////////////////////////////////////////
// Driver isn't there
SC_HANDLE hDriver = OpenService(hSCManager,DriverName,SERVICE_ALL_ACCESS);
if (hDriver==NULL) {
AfxMessageBox('Could not open driver service');
CloseServiceHandle(hSCManager);
return FALSE;
}
SERVICE_STATUS ss;
if (!ControlService(hDriver, SERVICE_CONTROL_INTERROGATE, &ss) ss.dwCurrentState!=SERVICE_STOPPED) {
AfxMessageBox('Could not interrogate driver service');
CloseServiceHandle(hSCManager);
CloseServiceHandle(hDriver);
return FALSE;
}
if (!StartService(hDriver, 0, NULL)) {
AfxMessageBox('Could not start driver');
CloseServiceHandle(hSCManager);
CloseServiceHandle(hDriver);
return FALSE;
}
// Give it 10 seconds to start
BOOL Started = FALSE;
for (int seconds=0; seconds<10; seconds++) {
Sleep(1000);
if (ControlService(hDriver, SERVICE_CONTROL_INTERROGATE, &ss) & ss.dwCurrentState==SERVICE_RUNNING) {
Started = TRUE;
break;
}
}
if (!Started) {