OSDN Git Service

ちょっとだけデバッグ
[iptd/iPTd.git] / iPTd_R2.cpp
1 /**\r
2  * @file iPTd_R2.cpp\r
3  *\r
4  */\r
5 \r
6 #include <SDKDDKVer.h>\r
7 #include <windows.h>\r
8 #include <stdio.h>\r
9 #include <tchar.h>\r
10 \r
11 #include <Raym/Log.h>\r
12 \r
13 \r
14 #define SERVICE_NAME (TEXT("Demo_Service"))\r
15 \r
16 \r
17 BOOL g_bRun = TRUE;\r
18 BOOL g_bService = TRUE;\r
19 \r
20 SERVICE_STATUS_HANDLE g_hServiceStatus = NULL;\r
21 \r
22 \r
23 \r
24 DWORD WINAPI HandlerEx ( \r
25     DWORD dwControl, \r
26     DWORD dwEventType, \r
27     LPVOID lpEventData, \r
28     LPVOID lpContext ) {\r
29 \r
30      SERVICE_STATUS ss;\r
31      BOOL bRet;\r
32      \r
33      // Initialize Variables for Service Control\r
34      ss.dwServiceType = SERVICE_WIN32_OWN_PROCESS;\r
35      ss.dwWin32ExitCode = NO_ERROR;\r
36      ss.dwServiceSpecificExitCode = 0;\r
37      ss.dwCheckPoint = 1;\r
38      ss.dwWaitHint = 3000;\r
39      ss.dwControlsAccepted = SERVICE_ACCEPT_STOP;\r
40 \r
41      switch(dwControl) {\r
42      case SERVICE_CONTROL_STOP:\r
43 \r
44           DebugLog0("SERVICE_CONTROL_STOP\n");\r
45 \r
46           // Set STOP_PENDING status.\r
47           ss.dwCurrentState = SERVICE_STOP_PENDING;\r
48                \r
49           bRet = SetServiceStatus (g_hServiceStatus, &ss);\r
50           \r
51           if (!bRet) {\r
52                DebugLog0 ("SetServiceStatus failed. %u\n", GetLastError());\r
53                break;\r
54           }\r
55 \r
56           // SERVICE SPECIFIC STOPPING CODE HERE.\r
57           // ...\r
58           // ...\r
59           \r
60           g_bService = FALSE;\r
61           Sleep (3 * 1000);\r
62 \r
63 \r
64           // Set STOPPED status.\r
65           ss.dwCurrentState = SERVICE_STOPPED;\r
66           ss.dwCheckPoint = 0;\r
67           ss.dwWaitHint = 0;\r
68           \r
69           bRet = SetServiceStatus (g_hServiceStatus, &ss);\r
70                     \r
71           if (!bRet) {\r
72                DebugLog0 ("SetServiceStatus failed. %u\n", GetLastError());\r
73                break;\r
74           }\r
75 \r
76           break;\r
77 \r
78      case SERVICE_CONTROL_PAUSE:\r
79 \r
80           DebugLog0 ("SERVICE_CONTROL_PAUSE\n");\r
81 \r
82           // Set PAUSE_PENDING status.\r
83           ss.dwCurrentState = SERVICE_PAUSE_PENDING;\r
84                          \r
85           bRet = SetServiceStatus (g_hServiceStatus, &ss);\r
86                     \r
87           if (!bRet) {\r
88                DebugLog0 ("SetServiceStatus failed. %u\n", GetLastError());\r
89                break;\r
90           }\r
91 \r
92           // APPLICATION SPECIFIC PAUSE_PENDING CODE HERE.\r
93           // ...\r
94           // ...\r
95           \r
96           g_bRun = FALSE;\r
97 \r
98           // Set PAUSE_PENDING status.\r
99           ss.dwCurrentState = SERVICE_PAUSED;\r
100           ss.dwCheckPoint = 0;\r
101           ss.dwWaitHint = 0;\r
102           ss.dwControlsAccepted |= SERVICE_ACCEPT_PAUSE_CONTINUE;\r
103                                    \r
104           bRet = SetServiceStatus (g_hServiceStatus, &ss);\r
105                               \r
106           if (!bRet) {\r
107                DebugLog0 ("SetServiceStatus failed. %u\n", GetLastError());\r
108                break;\r
109           }\r
110           \r
111           break;\r
112           \r
113      case SERVICE_CONTROL_CONTINUE:\r
114 \r
115           DebugLog0 ("SERVICE_CONTROL_CONTINUE\n");\r
116 \r
117           // Set PAUSE_PENDING status.\r
118           ss.dwCurrentState = SERVICE_START_PENDING;\r
119                                    \r
120           bRet = SetServiceStatus (g_hServiceStatus, &ss);\r
121                               \r
122           if (!bRet) {\r
123                DebugLog0 ("SetServiceStatus failed. %u\n", GetLastError());\r
124                break;\r
125           }\r
126           \r
127           // APPLICATION SPECIFIC START_PENDING CODE HERE.\r
128           // ...\r
129           // ...\r
130                     \r
131           g_bRun = TRUE;\r
132           \r
133           // Set RUNNING status.\r
134           ss.dwCurrentState = SERVICE_RUNNING;\r
135           ss.dwCheckPoint = 0;\r
136           ss.dwWaitHint = 0;\r
137           ss.dwControlsAccepted |= SERVICE_ACCEPT_PAUSE_CONTINUE;\r
138                                              \r
139           bRet = SetServiceStatus (g_hServiceStatus, &ss);\r
140                                         \r
141           if (!bRet) {\r
142                DebugLog0 ("SetServiceStatus failed. %u\n", GetLastError());\r
143                break;\r
144           }\r
145           \r
146           break;\r
147      default:\r
148 \r
149           return ERROR_CALL_NOT_IMPLEMENTED;\r
150 \r
151      }\r
152 \r
153      return NO_ERROR;\r
154 }\r
155 \r
156 \r
157 VOID WINAPI ServiceMain(DWORD dwArgc, PTSTR* pszArgv) {\r
158 \r
159      BOOL bRet;\r
160      SERVICE_STATUS ss;\r
161 \r
162      // Initialize Variables for Service Control\r
163      ss.dwServiceType = SERVICE_WIN32_OWN_PROCESS;\r
164      ss.dwWin32ExitCode = NO_ERROR;\r
165      ss.dwServiceSpecificExitCode = 0;\r
166      ss.dwCheckPoint = 1;\r
167      ss.dwWaitHint = 1000;\r
168      ss.dwControlsAccepted = SERVICE_ACCEPT_STOP;\r
169 \r
170      // Register Service Control Handler\r
171      \r
172      g_hServiceStatus = \r
173           RegisterServiceCtrlHandlerEx (SERVICE_NAME, HandlerEx, NULL);\r
174 \r
175      if(0 == g_hServiceStatus) {\r
176           DebugLog0 (\r
177                "RegisterServiceCtrlHandler failed. %u\n", \r
178                GetLastError());\r
179           return;\r
180      }\r
181 \r
182      // Entering Starting Service.\r
183      DebugLog0 ("SERVICE_START_PENDING...\n");\r
184      \r
185      ss.dwCurrentState = SERVICE_START_PENDING;\r
186      \r
187      bRet = SetServiceStatus (g_hServiceStatus, &ss);\r
188 \r
189      if (!bRet) {\r
190           DebugLog0 ("SetServiceStatus failed. %u\n", GetLastError());\r
191           return;\r
192      }\r
193 \r
194      // APPLICATION SPECIFIC INITIALIZATION CODE\r
195      // ...\r
196      // ...\r
197      \r
198      // Finish Initializing.\r
199      DebugLog0 ("SERVICE_RUNNING.\n");\r
200      \r
201      ss.dwCurrentState = SERVICE_RUNNING;\r
202      ss.dwCheckPoint = 0;\r
203      ss.dwWaitHint = 0;\r
204      ss.dwControlsAccepted = \r
205           SERVICE_ACCEPT_PAUSE_CONTINUE |\r
206           SERVICE_ACCEPT_STOP;\r
207           \r
208      bRet = SetServiceStatus (g_hServiceStatus, &ss);\r
209           \r
210      if (!bRet) {\r
211           DebugLog0 ("SetServiceStatus failed. %u\n", GetLastError());\r
212           return;\r
213      }\r
214 \r
215      //\r
216      // Service Main Code.\r
217      //\r
218      \r
219      while(g_bService) {\r
220 \r
221           if(g_bRun) {\r
222                DebugLog0 ("%s is running.\n", SERVICE_NAME);\r
223           }\r
224 \r
225           Sleep(2 * 1000);\r
226      }\r
227 \r
228      DebugLog0 ("END OF ServiceMain\n");\r
229      \r
230 }\r
231 \r
232 SERVICE_TABLE_ENTRY ServiceTable[] =\r
233 {\r
234     { TEXT("iPTd"), ServiceMain },\r
235     { NULL, NULL }\r
236 };\r
237 \r
238 \r
239 \r
240 int main(int argc, char *argv[])\r
241 {\r
242     BOOL bRet;\r
243     bRet = StartServiceCtrlDispatcher(ServiceTable);\r
244 //    assert(bRet);\r
245 }\r
246 \r