CAtlServiceModuleT 클래스
이 클래스는 서비스를 구현합니다.
Important
이 클래스와 해당 멤버는 Windows 런타임에서 실행되는 애플리케이션에서 사용할 수 없습니다.
구문
template <class T, UINT nServiceNameID>
class ATL_NO_VTABLE CAtlServiceModuleT : public CAtlExeModuleT<T>
매개 변수
T
에서 파생된 CAtlServiceModuleT
클래스입니다.
nServiceNameID
서비스의 리소스 식별자입니다.
멤버
공용 생성자
속성 | 설명 |
---|---|
CAtlServiceModuleT::CAtlServiceModuleT | 생성자입니다. |
공용 메서드
공용 데이터 멤버
속성 | 설명 |
---|---|
CAtlServiceModuleT::m_bService | 프로그램이 서비스로 실행 중임을 나타내는 플래그입니다. |
CAtlServiceModuleT::m_dwThreadID | 스레드 식별자를 저장하는 멤버 변수입니다. |
CAtlServiceModuleT::m_hServiceStatus | 현재 서비스의 상태 정보 구조에 대한 핸들을 저장하는 멤버 변수입니다. |
CAtlServiceModuleT::m_status | 현재 서비스의 상태 정보 구조를 저장하는 멤버 변수입니다. |
CAtlServiceModuleT::m_szServiceName | 등록할 서비스의 이름입니다. |
설명
CAtlServiceModuleT
CAtlExeModuleT에서 파생된 ATL 서비스 모듈을 구현합니다. CAtlServiceModuleT
는 명령줄 처리, 설치, 등록 및 제거를 위한 메서드를 제공합니다. 추가 기능이 필요한 경우 이러한 메서드와 다른 메서드를 재정의할 수 있습니다.
이 클래스는 이전 버전의 ATL에서 사용된 사용되지 않는 CComModule 클래스 를 대체합니다. 자세한 내용은 ATL 모듈 클래스를 참조하세요.
상속 계층 구조
CAtlServiceModuleT
요구 사항
헤더: atlbase.h
CAtlServiceModuleT::CAtlServiceModuleT
생성자입니다.
CAtlServiceModuleT() throw();
설명
데이터 멤버를 초기화하고 초기 서비스 상태를 설정합니다.
CAtlServiceModuleT::Handler
서비스의 처리기 루틴입니다.
void Handler(DWORD dwOpcode) throw();
매개 변수
dwOpcode
처리기 작업을 정의하는 스위치입니다. 자세한 내용은 비고를 참조하세요.
설명
SCM(서비스 제어 관리자)이 서비스 상태를 검색하기 위해 호출하고 중지 또는 일시 중지와 같은 지침을 실행하기 위해 호출하는 코드입니다. SCM은 서비스가 수행해야 하는 작업을 나타내기 위해 Handler
아래와 같이 작업 코드를 전달합니다.
작업 코드 | 의미 |
---|---|
SERVICE_CONTROL_STOP | 서비스를 중지합니다. atlbase.h의 CAtlServiceModuleT::OnStop 메서드를 재정의하여 동작을 변경합니다. |
SERVICE_CONTROL_PAUSE | 사용자가 구현되었습니다. atlbase.h의 빈 메서드 CAtlServiceModuleT::OnPause 를 재정의하여 서비스를 일시 중지합니다. |
SERVICE_CONTROL_CONTINUE | 사용자가 구현되었습니다. 빈 메서드 CAtlServiceModuleT::OnContinue in atlbase.h를 재정의하여 서비스를 계속합니다. |
SERVICE_CONTROL_INTERROGATE | 사용자가 구현되었습니다. atlbase.h의 빈 메서드 CAtlServiceModuleT::OnInterrogate 를 재정의하여 서비스를 심문합니다. |
SERVICE_CONTROL_SHUTDOWN | 사용자가 구현되었습니다. atlbase.h의 빈 메서드 CAtlServiceModuleT::OnShutdown 을 재정의하여 서비스를 종료합니다. |
작업 코드가 인식되지 않으면 CAtlServiceModuleT::OnUnknownRequest 메서드가 호출됩니다.
기본 ATL 생성 서비스는 중지 명령만 처리합니다. SCM이 중지 명령을 통과하면 서비스가 SCM에 프로그램이 중지되도록 지시합니다. 그런 다음 서비스는 종료 메시지를 자체에 게시하기 위해 호출 PostThreadMessage
합니다. 그러면 메시지 루프가 종료되고 서비스가 궁극적으로 닫힙니다.
CAtlServiceModuleT::InitializeSecurity
서비스에 대한 기본 보안 설정을 제공합니다.
HRESULT InitializeSecurity() throw();
Return Value
성공 시 S_OK를 반환하거나 실패 시 HRESULT 오류를 반환합니다.
설명
파생 CAtlServiceModuleT
되는 모든 클래스는 파생 클래스에서 이 메서드를 구현해야 합니다.
호출에서 PKT 수준 인증, RPC_C_IMP_LEVEL_IDENTIFY 가장 수준 및 적절한 null이 아닌 보안 설명자를 CoInitializeSecurity
사용합니다.
마법사에서 생성된 비대화되지 않은 서비스 프로젝트의 경우
class CNonAttribServiceModule : public CAtlServiceModuleT< CNonAttribServiceModule, IDS_SERVICENAME >
{
public :
DECLARE_LIBID(LIBID_NonAttribServiceLib)
DECLARE_REGISTRY_APPID_RESOURCEID(IDR_NONATTRIBSERVICE, "{29160736-339F-4A1C-ABEF-C320CE103E12}")
HRESULT InitializeSecurity() throw()
{
// TODO : Call CoInitializeSecurity and provide the appropriate security settings for
// your service
// Suggested - PKT Level Authentication,
// Impersonation Level of RPC_C_IMP_LEVEL_IDENTIFY
// and an appropriate Non NULL Security Descriptor.
return S_OK;
}
};
특성이 지정된 서비스 프로젝트의 경우
[ module(SERVICE, uuid = "{D3103322-7B70-4581-8E59-12769BD9A62B}",
name = "AttribService",
helpstring = "AttribService 1.0 Type Library",
resource_name="IDS_SERVICENAME") ]
class CAttribServiceModule
{
public:
HRESULT InitializeSecurity() throw()
{
// TODO : Call CoInitializeSecurity and provide the appropriate security settings for
// your service
// Suggested - PKT Level Authentication,
// Impersonation Level of RPC_C_IMP_LEVEL_IDENTIFY
// and an appropriate Non NULL Security Descriptor.
return S_OK;
}
};
CAtlServiceModuleT::Install
서비스를 설치하고 만듭니다.
BOOL Install() throw();
Return Value
성공하면 TRUE를 반환하고 실패하면 FALSE를 반환합니다.
설명
SCM(Service Control Manager) 데이터베이스에 서비스를 설치한 다음 서비스 개체를 만듭니다. 서비스를 만들 수 없는 경우 메시지 상자가 표시되고 메서드가 FALSE를 반환합니다.
CAtlServiceModuleT::IsInstalled
서비스가 설치되었는지 확인합니다.
BOOL IsInstalled() throw();
Return Value
서비스가 설치되어 있으면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.
CAtlServiceModuleT::LogEvent
이벤트 로그에 씁니다.
void __cdecl LogEvent(LPCTSTR pszFormat, ...) throw();
매개 변수
pszFormat
이벤트 로그에 쓸 문자열입니다.
...
이벤트 로그에 쓸 선택적 추가 문자열입니다.
설명
이 메서드는 ReportEvent 함수를 사용하여 이벤트 로그에 세부 정보를 기록합니다. 실행 중인 서비스가 없으면 문자열이 콘솔로 전송됩니다.
CAtlServiceModuleT::m_bService
프로그램이 서비스로 실행 중임을 나타내는 플래그입니다.
BOOL m_bService;
설명
애플리케이션 EXE와 서비스 EXE를 구분하는 데 사용됩니다.
CAtlServiceModuleT::m_dwThreadID
서비스의 스레드 식별자를 저장하는 멤버 변수입니다.
DWORD m_dwThreadID;
설명
이 변수는 현재 스레드의 스레드 식별자를 저장합니다.
CAtlServiceModuleT::m_hServiceStatus
현재 서비스의 상태 정보 구조에 대한 핸들을 저장하는 멤버 변수입니다.
SERVICE_STATUS_HANDLE m_hServiceStatus;
설명
SERVICE_STATUS 구조에는 서비스에 대한 정보가 포함됩니다.
CAtlServiceModuleT::m_status
현재 서비스의 상태 정보 구조를 저장하는 멤버 변수입니다.
SERVICE_STATUS m_status;
설명
SERVICE_STATUS 구조에는 서비스에 대한 정보가 포함됩니다.
CAtlServiceModuleT::m_szServiceName
등록할 서비스의 이름입니다.
TCHAR [256] m_szServiceName;
설명
서비스 이름을 저장하는 null로 끝나는 문자열입니다.
CAtlServiceModuleT::OnContinue
서비스를 계속하려면 이 메서드를 재정의합니다.
void OnContinue() throw();
CAtlServiceModuleT::OnInterrogate
서비스를 심문하려면 이 메서드를 재정의합니다.
void OnInterrogate() throw();
CAtlServiceModuleT::OnPause
서비스를 일시 중지하려면 이 메서드를 재정의합니다.
void OnPause() throw();
CAtlServiceModuleT::OnShutdown
서비스를 종료하려면 이 메서드를 재정의합니다.
void OnShutdown() throw();
CAtlServiceModulet::OnStop
서비스를 중지하려면 이 메서드를 재정의합니다.
void OnStop() throw();
CAtlServiceModuleT::OnUnknownRequest
서비스에 대한 알 수 없는 요청을 처리하도록 이 메서드를 재정의합니다.
void OnUnknownRequest(DWORD /* dwOpcode*/) throw();
매개 변수
dwOpcode
예약되었습니다.
CAtlServiceModuleT::P arseCommandLine
명령줄을 구문 분석하고 필요한 경우 등록을 수행합니다.
bool ParseCommandLine(LPCTSTR lpCmdLine, HRESULT* pnRetCode) throw();
매개 변수
lpCmdLine
명령줄
pnRetCode
등록에 해당하는 HRESULT입니다(발생한 경우).
Return Value
성공 시 true를 반환하거나 명령줄에 제공된 RGS 파일을 등록할 수 없는 경우 false를 반환합니다.
설명
명령줄을 구문 분석하고 필요한 경우 제공된 RGS 파일을 등록하거나 등록 취소합니다. 이 메서드는 CAtlExeModuleT::P arseCommandLine을 호출하여 /RegServer 및 /UnregServer를 확인 합니다. -/Service 인수를 추가하면 서비스가 등록됩니다.
CAtlServiceModuleT::P reMessageLoop
이 메서드는 메시지 루프를 입력하기 직전에 호출됩니다.
HRESULT PreMessageLoop(int nShowCmd) throw();
매개 변수
nShowCmd
이 매개 변수는 CAtlExeModuleT::P reMessageLoop에 전달됩니다.
Return Value
성공 시 S_OK를 반환하거나 실패 시 HRESULT 오류를 반환합니다.
설명
서비스에 대한 사용자 지정 초기화 코드를 추가하려면 이 메서드를 재정의합니다.
CAtlServiceModuleT::RegisterAppId
레지스트리에 서비스를 등록합니다.
inline HRESULT RegisterAppId(bool bService = false) throw();
매개 변수
bService
서비스로 등록하려면 true여야 합니다.
Return Value
성공 시 S_OK를 반환하거나 실패 시 HRESULT 오류를 반환합니다.
CAtlServiceModuleT::Run
서비스를 실행합니다.
HRESULT Run(int nShowCmd = SW_HIDE) throw();
매개 변수
nShowCmd
창을 표시하는 방법을 지정합니다. 이 매개 변수는 WinMain 섹션에서 설명하는 값 중 하나일 수 있습니다. 기본값은 SW_HIDE.
Return Value
성공 시 S_OK를 반환하거나 실패 시 HRESULT 오류를 반환합니다.
설명
호출 Run
된 후 CAtlServiceModuleT::P reMessageLoop, CAtlExeModuleT::RunMessageLoop 및 CAtlExeModuleT::P ostMessageLoop을 호출합니다.
CAtlServiceModuleT::ServiceMain
이 메서드는 서비스 제어 관리자에 의해 호출됩니다.
void ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv) throw();
매개 변수
dwArgc
argc 인수입니다.
lpszArgv
argv 인수입니다.
설명
SCM(서비스 제어 관리자)은 제어판 서비스 애플리케이션을 열고, 서비스를 선택하고, 시작을 클릭할 때 호출 ServiceMain
합니다.
SCM 호출 ServiceMain
후 서비스는 SCM에 처리기 함수를 제공해야 합니다. 이 함수를 사용하면 SCM이 서비스의 상태를 가져오고 특정 지침(예: 일시 중지 또는 중지)을 전달할 수 있습니다. 그 후 CAtlServiceModuleT ::Run 이 호출되어 서비스의 기본 작업을 수행합니다. Run
는 서비스가 중지될 때까지 계속 실행됩니다.
CAtlServiceModuleT::SetServiceStatus
이 메서드는 서비스 상태를 업데이트합니다.
void SetServiceStatus(DWORD dwState) throw();
매개 변수
dwState
새 상태입니다. 가능한 값은 SetServiceStatus를 참조하세요.
설명
서비스에 대한 서비스 제어 관리자의 상태 정보를 업데이트합니다. CAtlServiceModuleT::Run, CAtlServiceModuleT::ServiceMain 및 기타 처리기 메서드에서 호출됩니다. 상태는 CAtlServiceModuleT::m_status 멤버 변수에도 저장됩니다.
CAtlServiceModuleT::Start
CAtlServiceModuleT::WinMain
서비스가 시작될 때 호출됩니다.
HRESULT Start(int nShowCmd) throw();
매개 변수
nShowCmd
창을 표시하는 방법을 지정합니다. 이 매개 변수는 WinMain 섹션에서 설명하는 값 중 하나일 수 있습니다.
Return Value
성공 시 S_OK를 반환하거나 실패 시 HRESULT 오류를 반환합니다.
설명
CAtlServiceModuleT::WinMain 메서드는 등록 및 설치뿐만 아니라 레지스트리 항목 제거 및 모듈 제거와 관련된 작업을 모두 처리합니다. 서비스가 실행되면 .를 WinMain
호출합니다 Start
.
CAtlServiceModuleT::Uninstall
서비스를 중지하고 제거합니다.
BOOL Uninstall() throw();
Return Value
성공하면 TRUE를 반환하고 실패하면 FALSE를 반환합니다.
설명
서비스 실행을 중지하고 Service Control Manager 데이터베이스에서 제거합니다.
CAtlServiceModuleT::Unlock
서비스의 잠금 수를 줄입니다.
LONG Unlock() throw();
Return Value
진단 및 디버깅에 유용할 수 있는 잠금 수를 반환합니다.
CAtlServiceModuleT::UnregisterAppId
레지스트리에서 서비스를 제거합니다.
HRESULT UnregisterAppId() throw();
Return Value
성공 시 S_OK를 반환하거나 실패 시 HRESULT 오류를 반환합니다.
CAtlServiceModuleT::WinMain
이 메서드는 서비스를 시작하는 데 필요한 코드를 구현합니다.
int WinMain(int nShowCmd) throw();
매개 변수
nShowCmd
창을 표시하는 방법을 지정합니다. 이 매개 변수는 WinMain 섹션에서 설명하는 값 중 하나일 수 있습니다.
Return Value
서비스의 반환 값을 반환합니다.
설명
이 메서드는 명령줄(CAtlServiceModuleT::P arseCommandLine 사용)을 처리한 다음 서비스를 시작합니다(CAtlServiceModuleT::Start 사용).