Программирование драйверов Windows


Приложение для тестирования драйвера Example.sys - часть 2


// Функция удаления драйвера на основе SCM вызовов BOOL RemoveDriver(SC_HANDLE scm, LPCTSTR DriverName) { SC_HANDLE Service = OpenService (scm, DriverName, SERVICE_ALL_ACCESS); if (Service == NULL) return FALSE; BOOL ret = DeleteService (Service); if (!ret) { /* неудача при удалении драйвера */ }

CloseServiceHandle (Service); return ret; }

// Функция запуска драйвера на основе SCM вызовов BOOL StartDriver(SC_HANDLE scm, LPCTSTR DriverName) { SC_HANDLE Service = OpenService(scm, DriverName, SERVICE_ALL_ACCESS); if (Service == NULL) return FALSE; /* open failed */ BOOL ret = StartService( Service, // дескриптор 0, // число аргументов NULL ); // указатель на аргументы if (!ret) // неудача { DWORD err = GetLastError(); if (err == ERROR_SERVICE_ALREADY_RUNNING) ret = TRUE; // OK, драйвер уже работает! else { /* другие проблемы */} }

CloseServiceHandle (Service); return ret; } // Функция останова драйвера на основе SCM вызовов BOOL StopDriver(SC_HANDLE scm, LPCTSTR DriverName) { SC_HANDLE Service = OpenService (scm, DriverName, SERVICE_ALL_ACCESS ); if (Service == NULL) // Невозможно выполнить останов драйвера { DWORD err = GetLastError(); return FALSE; } SERVICE_STATUS serviceStatus; BOOL ret = ControlService(Service, SERVICE_CONTROL_STOP, &serviceStatus); if (!ret) { DWORD err = GetLastError(); // дополнительная диагностика }

CloseServiceHandle (Service); return ret; }

// Соберем вместе действия по установке, запуску, останову // и удалению драйвера (для обобщения сведений). // (Однако пользоваться этой функцией в данном примере не придется.) /* Закомментируем ее. void Test_SCM_Installation(void) { SC_HANDLE scm = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); if(scm == NULL) // неудача { // Получаем код ошибки и ее текстовый эквивалент unsigned long err = GetLastError(); PrintErrorMessage(err); // см. п. 2.1.5 return; } BOOL res; res = InstallDriver(scm, DRIVERNAME, DRIVERBINARY ); // Ошибка может оказаться не фатальной. Продолжаем: res = StartDriver (scm, DRIVERNAME ); if(res) { //Е Здесь следует разместить функции работы с драйвером .. .. ..


Начало  Назад  Вперед