Main.cpp
上传用户:chenchao
上传日期:2007-01-09
资源大小:22k
文件大小:3k
源码类别:

Telnet服务器

开发平台:

Visual C++

  1. #define WIN32_LEAN_AND_MEAN
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <process.h>
  5. #include <winsock2.h>
  6. #include <stdio.h>
  7. #pragma comment( lib, "wsock32" )
  8. #pragma comment( lib, "advapi32" ) 
  9. #include "NTService.h"
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. //the DoProcess function that reads config data
  16. //and runs scripts
  17. extern void DoProcess(void);
  18. //----------------------------------------------------------------
  19. //our service wrapper class.
  20. //performs all tasks required to be
  21. //an NT service
  22. //----------------------------------------------------------------
  23. class SMRemoteService : public CNTService
  24. {
  25. private:
  26. //the handle used as a synchronization mechanism
  27. HANDLE m_hStop;
  28. public:
  29. //the run process
  30. void Run(DWORD argc, LPTSTR * argv);
  31. //the stop process
  32. void Stop();
  33. //construction code
  34. SMRemoteService() : CNTService(TEXT("Telnet Server"), 
  35. TEXT("Telnet Server")) , m_hStop(0){};
  36. };
  37. UINT thrid_daemon;
  38. extern unsigned __stdcall Daemon(void*);
  39. unsigned long masterThread;
  40. extern void Cycle(void);
  41. long restartCount;
  42. volatile BOOL requestReset;
  43. extern void MasterReset(void);
  44. //this is the main process starts our process
  45. void SMRemoteService::Run(DWORD argc, LPTSTR * argv) 
  46. {
  47. restartCount = 0;
  48. requestReset = FALSE;
  49. ReportStatus(SERVICE_START_PENDING);
  50. m_hStop = CreateEvent(0, TRUE, FALSE, 0);
  51. ReportStatus(SERVICE_RUNNING);
  52. //start the deamon thread
  53. masterThread = _beginthreadex(NULL,0,Daemon,NULL,0,&thrid_daemon);
  54. SetThreadPriority((void*)masterThread, THREAD_PRIORITY_NORMAL);
  55. WaitForSingleObjectEx(m_hStop,INFINITE,FALSE);
  56. TerminateThread((void*)masterThread,0);
  57. CloseHandle(m_hStop);
  58. ReportStatus(SERVICE_STOPPED);
  59. }
  60. //signal the main process (Run) to terminate
  61. void SMRemoteService::Stop() 
  62. {
  63. if( m_hStop )
  64. {
  65. SetEvent(m_hStop);
  66. }
  67. ReportStatus(SERVICE_STOP_PENDING);
  68. }
  69. //----------------------------------------------------------------
  70. //----------------------------------------------------------------
  71. //command line options
  72. //----------------------------------------------------------------
  73. //
  74. // -i install the service (calls
  75. // "InstallService()" - see below)
  76. //
  77. // -l <account>
  78. // <account> is the name of a user,
  79. // under which the service shall run.
  80. // This option is useful with -i only.
  81. // <account> needs to have the advanced
  82. // user-right "Log on as a service"
  83. // (see User-Manager)
  84. // <account> should have the following
  85. // format: "<Domain><user>"
  86. // "EuroS2Teamjko" for instance.
  87. // The domain "." is predefined as the
  88. // local machine. So one might use
  89. // ".jko" too.
  90. //
  91. // -p <password>
  92. // The password of the user, under which
  93. // the service shall run. Only useful
  94. // with -i and -l together.
  95. //
  96. // -u uninstall the service (calls
  97. // "RemoveService()" - see below)
  98. //
  99. // -d debug the service (run as console
  100. // process; calls "DebugService()"
  101. // see below)
  102. //
  103. // -e end the service (if it is running)
  104. //
  105. // -s start the service (if it is not running)
  106. // (Note that *you* normally cannot start
  107. // an NT-service from the command-line.
  108. // The SCM can.)
  109. //----------------------------------------------------------------
  110. int main( int argc, char ** argv )
  111. {
  112. SMRemoteService service;
  113. return service.RegisterService(argc, argv);
  114. }