Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получение SERVICE_CONTROL_HARDWAREPROFILECHANGE, ...в сервисе 
:(
    Опции темы
Sleepman
Дата 19.11.2007, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 1.1.2005
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Не могу найти причину, почему моему сервису не приходит event с кодом SERVICE_CONTROL_HARDWAREPROFILECHANGE?
Помогите пожалуйста!!!
код ниже

Код

#include <windows.h>
#include <dbt.h>
#include "service.h"


void main( ) 

   SERVICE_TABLE_ENTRY   DispatchTable[] = 
   { 
      { "Service", (LPSERVICE_MAIN_FUNCTION)SDService }, 
      { NULL, NULL } 
   }; 
 
   if (!StartServiceCtrlDispatcher( DispatchTable)) 
   { 
    ;
   }

 
DWORD WINAPI ServiceCtrlHandlerEx (DWORD dwControl,  DWORD dwEventType,
                                            LPVOID lpEventData,  LPVOID lpContext) 

    DWORD status; 
 
    switch( dwControl ) 
    { 
     case SERVICE_CONTROL_PAUSE: 
       // Do whatever it takes to pause here. 
         MyServiceStatus.dwCurrentState = SERVICE_PAUSED;
          break; 
 
       case SERVICE_CONTROL_CONTINUE: 
       // Do whatever it takes to continue here. 
          MyServiceStatus.dwCurrentState = SERVICE_RUNNING;
          break; 
 
       case SERVICE_CONTROL_STOP: 
       // Do whatever it takes to stop here. 
         MyServiceStatus.dwWin32ExitCode = 0; 
          MyServiceStatus.dwCurrentState  = SERVICE_STOPPED; 
          MyServiceStatus.dwCheckPoint    = 0; 
          MyServiceStatus.dwWaitHint      = 0; 

          if( !SetServiceStatus ( MyServiceStatusHandle, &MyServiceStatus ) )
          { 
             status = GetLastError();  
          } 
            return NO_ERROR; 
 
       case SERVICE_CONTROL_INTERROGATE: 
       // Fall through to send current status. 
         break;
        case SERVICE_CONTROL_HARDWAREPROFILECHANGE:
          switch (dwEventType)
          {
            case DBT_CONFIGCHANGED:
              _asm {nop};
              break;
            case DBT_DEVNODES_CHANGED:
              _asm {nop};
              break;
          }
          break; 
       default: 
            _asm { nop };
    } 
 
    // Send current status. 
    if( !SetServiceStatus( MyServiceStatusHandle,  &MyServiceStatus ) ) 
    { 
     status = GetLastError(); 
       // SetServiceStatus error - в файл 
    } 
    return NO_ERROR; 
}

void WINAPI SDService (DWORD argc, LPTSTR *argv) 

    DWORD dwStatus = -1;              
    DWORD dwErr = -1;     

    MyServiceStatus.dwServiceType        = SERVICE_WIN32_OWN_PROCESS; 
    MyServiceStatus.dwCurrentState       = SERVICE_START_PENDING; 
    MyServiceStatus.dwControlsAccepted   = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE | SERVICE_ACCEPT_HARDWAREPROFILECHANGE; 
    MyServiceStatus.dwWin32ExitCode      = 0; 
    MyServiceStatus.dwServiceSpecificExitCode = 0; 
    MyServiceStatus.dwCheckPoint         = 0; 
    MyServiceStatus.dwWaitHint           = 0; 
 
  MyServiceStatusHandle = RegisterServiceCtrlHandlerEx ("Service", ServiceCtrlHandlerEx,
                                                        NULL);
 
    if ( MyServiceStatusHandle == (SERVICE_STATUS_HANDLE)0 ) 
    { 
        // в файл
        //SvcDebugOut(" [MY_SERVICE] RegisterServiceCtrlHandler failed %d\n", GetLastError()); 
        return; 
    } 

    MyServiceStatus.dwCurrentState       = SERVICE_RUNNING; 
    MyServiceStatus.dwCheckPoint         = 0; 
    MyServiceStatus.dwWaitHint             = 0; 
 
    if ( !SetServiceStatus ( MyServiceStatusHandle, &MyServiceStatus ) ) 
    { 
        dwErr = GetLastError(); 
       _asm { int 3 };
    } 
  return; 


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0849 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.