Не могу найти причину, почему моему сервису не приходит 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; }
|
|