Класс CAtlServiceModuleT
Этот класс реализует службу.
Внимание
Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения Windows.
Синтаксис
template <class T, UINT nServiceNameID>
class ATL_NO_VTABLE CAtlServiceModuleT : public CAtlExeModuleT<T>
Параметры
T
Класс, производный от CAtlServiceModuleT
.
nServiceNameID
Идентификатор ресурса службы.
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CAtlServiceModuleT::CAtlServiceModuleT | Конструктор. |
Открытые методы
Имя | Описание |
---|---|
CAtlServiceModuleT::Handler | Подпрограмма обработчика для службы. |
CAtlServiceModuleT::InitializeSecurity | Предоставляет параметры безопасности по умолчанию для службы. |
CAtlServiceModuleT::Install | Устанавливает и создает службу. |
CAtlServiceModuleT::IsInstalled | Подтверждает, что служба установлена. |
CAtlServiceModuleT::LogEvent | Записывает в журнал событий. |
CAtlServiceModuleT::OnContinue | Переопределите этот метод, чтобы продолжить службу. |
CAtlServiceModuleT::OnInterrogate | Переопределите этот метод для допроса службы. |
CAtlServiceModuleT::OnPause | Переопределите этот метод, чтобы приостановить работу службы. |
CAtlServiceModuleT::OnShutdown | Переопределите этот метод, чтобы завершить работу службы |
CAtlServiceModuleT::OnStop | Переопределите этот метод, чтобы остановить службу |
CAtlServiceModuleT::OnUnknownRequest | Переопределите этот метод для обработки неизвестных запросов к службе |
CAtlServiceModuleT::P arseCommandLine | Анализирует командную строку и выполняет регистрацию при необходимости. |
CAtlServiceModuleT::P reMessageLoop | Этот метод вызывается непосредственно перед вводом цикла сообщений. |
CAtlServiceModuleT::RegisterAppId | Регистрирует службу в реестре. |
CAtlServiceModuleT::Run | Запускает службу. |
CAtlServiceModuleT::ServiceMain | Метод, вызываемый диспетчером управления службой. |
CAtlServiceModuleT::SetServiceStatus | Обновляет состояние службы. |
CAtlServiceModuleT::Start | CAtlServiceModuleT::WinMain Вызывается при запуске службы. |
CAtlServiceModuleT::Uninstall | Останавливает и удаляет службу. |
CAtlServiceModuleT::Unlock | Уменьшает количество блокировок службы. |
CAtlServiceModuleT::UnregisterAppId | Удаляет службу из реестра. |
CAtlServiceModuleT::WinMain | Этот метод реализует код, необходимый для запуска службы. |
Открытые члены данных
Имя | Описание |
---|---|
CAtlServiceModuleT::m_bService | Флаг, указывающий, что программа выполняется как услуга. |
CAtlServiceModuleT::m_dwThreadID | Переменная-член, сохраняющая идентификатор потока. |
CAtlServiceModuleT::m_hServiceStatus | Переменная-член, сохраняющая дескриптор в структуре сведений о состоянии текущей службы. |
CAtlServiceModuleT::m_status | Переменная-член, сохраняющая структуру сведений о состоянии для текущей службы. |
CAtlServiceModuleT::m_szServiceName | Имя зарегистрированной службы. |
Замечания
CAtlServiceModuleT
, производный от CAtlExeModuleT, реализует модуль службы ATL. CAtlServiceModuleT
предоставляет методы для обработки командной строки, установки, регистрации и удаления. Если требуется дополнительная функциональность, эти и другие методы можно переопределить.
Этот класс заменяет устаревший класс CComModule, используемый в более ранних версиях ATL. Дополнительные сведения см. в разделе "Классы модулей ATL".
Иерархия наследования
CAtlServiceModuleT
Требования
Заголовок: atlbase.h
CAtlServiceModuleT::CAtlServiceModuleT
Конструктор.
CAtlServiceModuleT() throw();
Замечания
Инициализирует элементы данных и задает начальное состояние службы.
CAtlServiceModuleT::Handler
Подпрограмма обработчика для службы.
void Handler(DWORD dwOpcode) throw();
Параметры
dwOpcode
Переключатель, определяющий операцию обработчика. Дополнительные сведения см. в примечаниях.
Замечания
Это код, который вызывает диспетчер управления службой (SCM), чтобы получить состояние службы и инструкции по проблеме, такие как остановка или приостановка. SCM передает код операции, показанный ниже, чтобы Handler
указать, что должна делать служба.
Код операции | Значение |
---|---|
SERVICE_CONTROL_STOP | останавливает службу. Переопределите метод CAtlServiceModuleT::OnStop в atlbase.h, чтобы изменить поведение. |
SERVICE_CONTROL_PAUSE | Пользователь реализован. Переопределите пустой метод CAtlServiceModuleT::OnPause в atlbase.h, чтобы приостановить работу службы. |
SERVICE_CONTROL_CONTINUE | Пользователь реализован. Переопределите пустой метод CAtlServiceModuleT::OnContinue в atlbase.h, чтобы продолжить службу. |
SERVICE_CONTROL_INTERROGATE | Пользователь реализован. Переопределите пустой метод CAtlServiceModuleT::OnInterrogate в atlbase.h для допроса службы. |
SERVICE_CONTROL_SHUTDOWN | Пользователь реализован. Переопределите пустой метод CAtlServiceModuleT::OnShutdown в atlbase.h, чтобы завершить работу службы. |
Если код операции не распознается, вызывается метод CAtlServiceModuleT::OnUnknownRequest .
Созданная по умолчанию служба ATL обрабатывает только инструкцию остановки. Если SCM передает инструкцию остановки, служба сообщает SCM, что программа будет остановиться. Затем служба вызывает PostThreadMessage
сообщение о выходе из себя. Это завершает цикл сообщений, и служба в конечном итоге закрывается.
CAtlServiceModuleT::InitializeSecurity
Предоставляет параметры безопасности по умолчанию для службы.
HRESULT InitializeSecurity() throw();
Возвращаемое значение
Возвращает 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();
Возвращаемое значение
Возвращает значение TRUE при успешном выполнении, false при сбое.
Замечания
Устанавливает службу в базу данных Service Control Manager (SCM), а затем создает объект службы. Если не удалось создать службу, отображается окно сообщения, а метод возвращает ЗНАЧЕНИЕ FALSE.
CAtlServiceModuleT::IsInstalled
Подтверждает, что служба установлена.
BOOL IsInstalled() throw();
Возвращаемое значение
Возвращает значение 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, соответствующий регистрации (если это произошло).
Возвращаемое значение
Возвращает значение true при успешном выполнении или значение false, если не удалось зарегистрировать файл RGS, предоставленный в командной строке.
Замечания
Анализирует командную строку и регистрирует или отменяет регистрацию предоставленного файла RGS при необходимости. Этот метод вызывает CAtlExeModuleT::P arseCommandLine, чтобы проверить наличие /RegServer и /UnregServer. Добавление аргумента -/Service зарегистрирует службу.
CAtlServiceModuleT::P reMessageLoop
Этот метод вызывается непосредственно перед вводом цикла сообщений.
HRESULT PreMessageLoop(int nShowCmd) throw();
Параметры
nShowCmd
Этот параметр передается в CAtlExeModuleT::P reMessageLoop.
Возвращаемое значение
Возвращает S_OK при успешном выполнении или ошибку HRESULT при сбое.
Замечания
Переопределите этот метод, чтобы добавить пользовательский код инициализации для службы.
CAtlServiceModuleT::RegisterAppId
Регистрирует службу в реестре.
inline HRESULT RegisterAppId(bool bService = false) throw();
Параметры
bService
Должен иметь значение true для регистрации в качестве службы.
Возвращаемое значение
Возвращает S_OK при успешном выполнении или ошибку HRESULT при сбое.
CAtlServiceModuleT::Run
Запускает службу.
HRESULT Run(int nShowCmd = SW_HIDE) throw();
Параметры
nShowCmd
Указывает способ отображения окна. Этот параметр может быть одним из значений, рассмотренных в разделе WinMain . Значение по умолчанию — SW_HIDE.
Возвращаемое значение
Возвращает S_OK при успешном выполнении или ошибку HRESULT при сбое.
Замечания
После вызова вызывается CAtlServiceModuleT::P reMessageLoop, CAtlExeModuleT::RunMessageLoop и CAtlExeModuleT::P ostMessageLoop. Run
CAtlServiceModuleT::ServiceMain
Этот метод вызывается диспетчером управления службами.
void ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv) throw();
Параметры
dwArgc
Аргумент argc.
lpszArgv
Аргумент argv.
Замечания
При открытии приложения служб в панель управления вызовы ServiceMain
диспетчера управления службами (SCM) выберите службу и нажмите кнопку "Пуск".
После вызовов ServiceMain
SCM служба должна предоставить функцию обработчика 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 .
Возвращаемое значение
Возвращает S_OK при успешном выполнении или ошибку HRESULT при сбое.
Замечания
Метод CAtlServiceModuleT::WinMain обрабатывает как регистрацию, так и установку, а также задачи, связанные с удалением записей реестра и удалением модуля. При запуске WinMain
службы вызывается Start
.
CAtlServiceModuleT::Uninstall
Останавливает и удаляет службу.
BOOL Uninstall() throw();
Возвращаемое значение
Возвращает значение TRUE при успешном выполнении, false при сбое.
Замечания
Останавливает работу службы и удаляет ее из базы данных Service Control Manager.
CAtlServiceModuleT::Unlock
Уменьшает количество блокировок службы.
LONG Unlock() throw();
Возвращаемое значение
Возвращает количество блокировок, которое может быть полезно для диагностика и отладки.
CAtlServiceModuleT::UnregisterAppId
Удаляет службу из реестра.
HRESULT UnregisterAppId() throw();
Возвращаемое значение
Возвращает S_OK при успешном выполнении или ошибку HRESULT при сбое.
CAtlServiceModuleT::WinMain
Этот метод реализует код, необходимый для запуска службы.
int WinMain(int nShowCmd) throw();
Параметры
nShowCmd
Указывает способ отображения окна. Этот параметр может быть одним из значений, рассмотренных в разделе WinMain .
Возвращаемое значение
Возвращает возвращаемое значение службы.
Замечания
Этот метод обрабатывает командную строку (с CAtlServiceModuleT ::P arseCommandLine), а затем запускает службу (с помощью CAtlServiceModuleT::Start).