dev/windows
[windows] 외부에서 서비스 제어 못하게 하기
최연탄
2017. 5. 23. 16:45
728x90
반응형
참고: https://msdn.microsoft.com/en-us/library/windows/desktop/ms685996(v=vs.85).aspx
본인이 만든 windows service를 작업관리자나 sc 등의 명령으로 정지 못하게 하고 싶은 경우 SERVICE_STATUS의 dwControlsAccepted 값을 제어함으로 목적을 달성할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | BOOL Lock(SERVICE_STATUS_HANDLE hServiceStatus) { SERVICE_STATUS ss; ss.dwCheckPoint = 0; ss.dwControlsAccepted = 0; // 어떤 제어 요청도 받지 않음 ss.dwCurrentState = dwCurrentState ss.dwServiceSpecificExitCode = 0; ss.dwServiceType = SERVICE_WIN32_OWN_PROCESS; ss.dwWaitHint = 0; ss.dwWin32ExitCode = 0; return SetServiceStatus(hServiceStatus, &ss); } BOOL Unlock(SERVICE_STATUS_HANDLE hServiceStatus) { SERVICE_STATUS ss; ss.dwCheckPoint = 0; ss.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE; ss.dwCurrentState = dwCurrentState ss.dwServiceSpecificExitCode = 0; ss.dwServiceType = SERVICE_WIN32_OWN_PROCESS; ss.dwWaitHint = 0; ss.dwWin32ExitCode = 0; return SetServiceStatus(hServiceStatus, &ss); } |
여기서 파라미터로 받는 SERVICE_STATUS_HANDLE은 서비스 등록 시 사용한 RegisterServiceCtrlHandlerEx의 리턴 값을 사용해야한다.
반응형