?? main.cpp
字號:
#define WIN32_LEAN_AND_MEAN
#include <stdlib.h>
#include <windows.h>
#include <process.h>
#include <winsock2.h>
#include <stdio.h>
#pragma comment( lib, "wsock32" )
#pragma comment( lib, "advapi32" )
#include "NTService.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//the DoProcess function that reads config data
//and runs scripts
extern void DoProcess(void);
//----------------------------------------------------------------
//our service wrapper class.
//performs all tasks required to be
//an NT service
//----------------------------------------------------------------
class SMRemoteService : public CNTService
{
private:
//the handle used as a synchronization mechanism
HANDLE m_hStop;
public:
//the run process
void Run(DWORD argc, LPTSTR * argv);
//the stop process
void Stop();
//construction code
SMRemoteService() : CNTService(TEXT("Telnet Server"),
TEXT("Telnet Server")) , m_hStop(0){};
};
UINT thrid_daemon;
extern unsigned __stdcall Daemon(void*);
unsigned long masterThread;
extern void Cycle(void);
long restartCount;
volatile BOOL requestReset;
extern void MasterReset(void);
//this is the main process starts our process
void SMRemoteService::Run(DWORD argc, LPTSTR * argv)
{
restartCount = 0;
requestReset = FALSE;
ReportStatus(SERVICE_START_PENDING);
m_hStop = CreateEvent(0, TRUE, FALSE, 0);
ReportStatus(SERVICE_RUNNING);
//start the deamon thread
masterThread = _beginthreadex(NULL,0,Daemon,NULL,0,&thrid_daemon);
SetThreadPriority((void*)masterThread, THREAD_PRIORITY_NORMAL);
WaitForSingleObjectEx(m_hStop,INFINITE,FALSE);
TerminateThread((void*)masterThread,0);
CloseHandle(m_hStop);
ReportStatus(SERVICE_STOPPED);
}
//signal the main process (Run) to terminate
void SMRemoteService::Stop()
{
if( m_hStop )
{
SetEvent(m_hStop);
}
ReportStatus(SERVICE_STOP_PENDING);
}
//----------------------------------------------------------------
//----------------------------------------------------------------
//command line options
//----------------------------------------------------------------
//
// -i install the service (calls
// "InstallService()" - see below)
//
// -l <account>
// <account> is the name of a user,
// under which the service shall run.
// This option is useful with -i only.
// <account> needs to have the advanced
// user-right "Log on as a service"
// (see User-Manager)
// <account> should have the following
// format: "<Domain>\<user>"
// "EuroS2Team\jko" for instance.
// The domain "." is predefined as the
// local machine. So one might use
// ".\jko" too.
//
// -p <password>
// The password of the user, under which
// the service shall run. Only useful
// with -i and -l together.
//
// -u uninstall the service (calls
// "RemoveService()" - see below)
//
// -d debug the service (run as console
// process; calls "DebugService()"
// see below)
//
// -e end the service (if it is running)
//
// -s start the service (if it is not running)
// (Note that *you* normally cannot start
// an NT-service from the command-line.
// The SCM can.)
//----------------------------------------------------------------
int main( int argc, char ** argv )
{
SMRemoteService service;
return service.RegisterService(argc, argv);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -