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) {

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату
×