* tar xzf utvpn-src-unix-v101-7101-public-2010.06.27.tar.gz
[lab.git] / utvpn / utvpn-unix-v101-7101-public / src / Mayaqua / Mayaqua.h
1 // SoftEther UT-VPN SourceCode\r
2 // \r
3 // Copyright (C) 2004-2010 SoftEther Corporation.\r
4 // Copyright (C) 2004-2010 University of Tsukuba, Japan.\r
5 // Copyright (C) 2003-2010 Daiyuu Nobori.\r
6 // All Rights Reserved.\r
7 // \r
8 // http://utvpn.tsukuba.ac.jp/\r
9 // \r
10 // This program is free software; you can redistribute it and/or\r
11 // modify it under the terms of the GNU General Public License\r
12 // version 2 as published by the Free Software Foundation.\r
13 // \r
14 // This program is distributed in the hope that it will be useful,\r
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
17 // GNU General Public License for more details.\r
18 // \r
19 // You should have received a copy of the GNU General Public License version 2\r
20 // along with this program; if not, write to the Free Software\r
21 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
22 // \r
23 // このファイルは GPL バージョン 2 ライセンスで公開されています。\r
24 // 誰でもこのファイルの内容を複製、改変したり、改変したバージョンを再配布\r
25 // することができます。ただし、原著作物を改変した場合は、原著作物の著作権表示\r
26 // を除去することはできません。改変した著作物を配布する場合は、改変実施者の\r
27 // 著作権表示を原著作物の著作権表示に付随して記載するようにしてください。\r
28 // \r
29 // この SoftEther UT-VPN オープンソース・プロジェクトは、日本国の\r
30 // ソフトイーサ株式会社 (SoftEther Corporation, http://www.softether.co.jp/ )\r
31 // および筑波大学 (University of Tsukuba, http://www.tsukuba.ac.jp/ ) によって\r
32 // ホストされています。\r
33 // 本プログラムの配布者は、本プログラムを、業としての利用以外のため、\r
34 // および、試験または研究のために利用が行われることを想定して配布\r
35 // しています。\r
36 // SoftEther UT-VPN プロジェクトの Web サイトは http://utvpn.tsukuba.ac.jp/ に\r
37 // あります。\r
38 // 本ソフトウェアの不具合の修正、機能改良、セキュリティホールの修復などのコード\r
39 // の改変を行った場合で、その成果物を SoftEther UT-VPN プロジェクトに提出して\r
40 // いただける場合は、 http://utvpn.tsukuba.ac.jp/ までソースコードを送付して\r
41 // ください。SoftEther UT-VPN プロジェクトの本体リリースまたはブランチリリース\r
42 // に組み込みさせていただきます。\r
43 // \r
44 // GPL に基づいて原著作物が提供される本ソフトウェアの改良版を配布、販売する\r
45 // 場合は、そのソースコードを GPL に基づいて誰にでも開示する義務が生じます。\r
46 // \r
47 // 本ソフトウェアに関連する著作権、特許権、商標権はソフトイーサ株式会社\r
48 // (SoftEther Corporation) およびその他の著作権保持者が保有しています。\r
49 // ソフトイーサ株式会社等はこれらの権利を放棄していません。本ソフトウェアの\r
50 // 二次著作物を配布、販売する場合は、これらの権利を侵害しないようにご注意\r
51 // ください。\r
52 // \r
53 // お願い: どのような通信ソフトウェアにも通常は必ず未発見の\r
54 // セキュリティホールが潜んでいます。本ソースコードをご覧いただいた結果、\r
55 // UT-VPN にセキュリティホールを発見された場合は、当該セキュリティホールの\r
56 // 情報を不特定多数に開示される前に、必ず、ソフトイーサ株式会社\r
57 // および脆弱性情報の届出を受け付ける公的機関まで通報いただき、\r
58 // 公益保護にご協力いただきますようお願い申し上げます。\r
59 // \r
60 // ソフトイーサ株式会社は、当該セキュリティホールについて迅速に対処を\r
61 // 行い、UT-VPN および UT-VPN に関連するソフトウェアのユーザー・顧客\r
62 // を保護するための努力を行います。\r
63 // \r
64 // ソフトイーサへの届出先: http://www.softether.co.jp/jp/contact/\r
65 // 日本国内の脆弱性情報届出受付公的機関:\r
66 //         独立行政法人 情報処理推進機構\r
67 //         http://www.ipa.go.jp/security/vuln/report/\r
68 // \r
69 // 上記各事項について不明な点は、ソフトイーサ株式会社までご連絡ください。\r
70 // 連絡先: http://www.softether.co.jp/jp/contact/\r
71 \r
72 // -----------------------------------------------\r
73 // [ChangeLog]\r
74 // 2010.05.20\r
75 //  新規リリース by SoftEther\r
76 // -----------------------------------------------\r
77 \r
78 // Mayaqua.h\r
79 // Mayaqua Kernel ヘッダファイル\r
80 \r
81 #ifndef MAYAQUA_H\r
82 #define MAYAQUA_H\r
83 \r
84 // PenCore.dll 関係\r
85 #define PENCORE_DLL_NAME                "|PenCore.dll"\r
86 \r
87 //#define       USE_PROBE                                               // Probe を使う\r
88 \r
89 // リリースフラグ用マクロ\r
90 #ifdef  VPN_SPEED\r
91 \r
92 #define DONT_USE_KERNEL_STATUS                  // カーネルステータスを更新しない\r
93 #define WIN32_USE_HEAP_API_FOR_MEMORY   // メモリ確保にヒープ API を使用する\r
94 #define WIN32_NO_DEBUG_HELP_DLL                 // デバッグ用 DLL を呼び出さない\r
95 #define DONT_CHECK_HEAP                                 // ヒープの状態をチェックしない\r
96 \r
97 #endif  // VPN_SPEED\r
98 \r
99 #ifdef  VPN_EXE\r
100 // 実行可能ファイルビルド用\r
101 #ifdef  WIN32\r
102 #include <windows.h>\r
103 #include "../PenCore/resource.h"\r
104 int main(int argc, char *argv[]);\r
105 int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, char *CmdLine, int CmdShow)\r
106 {\r
107         return main(0, NULL);\r
108 }\r
109 #endif  // WIN32\r
110 #endif  // VPN_EXE\r
111 \r
112 // 定数\r
113 #define DEFAULT_TABLE_FILE_NAME         "|strtable.stb"         // デフォルト文字列テーブル\r
114 #define STRTABLE_ID                                     "UT_VPN_20100520"       // 文字列テーブル識別子\r
115 \r
116 // OS の判別\r
117 #ifdef  WIN32\r
118 #define OS_WIN32                // Microsoft Windows\r
119 #else\r
120 #define OS_UNIX                 // UNIX\r
121 #endif  // WIN32\r
122 \r
123 // ディレクトリ区切り\r
124 #ifdef  OS_WIN32\r
125 #define PATH_BACKSLASH  // バックスラッシュ (\)\r
126 #else   // WIN32\r
127 #define PATH_SLASH              // スラッシュ (/)\r
128 #endif  // WIN32\r
129 \r
130 // 文字コード\r
131 #ifdef  OS_WIN32\r
132 #define CODE_SHIFTJIS   // Shift_JIS コード\r
133 #else   // WIN32\r
134 #define CODE_EUC                // euc-jp コード\r
135 #endif  // WIN32\r
136 \r
137 // エンディアン\r
138 #define IsBigEndian()           (g_little_endian ? false : true)\r
139 #define IsLittleEndian()        (g_little_endian)\r
140 \r
141 #ifdef  OS_WIN32\r
142 // snprintf 関数の置換\r
143 #define snprintf        _snprintf\r
144 #endif  // OS_WIN32\r
145 \r
146 // コンパイラ依存\r
147 #ifndef OS_WIN32\r
148 // gcc コンパイラ\r
149 #define GCC_PACKED              __attribute__ ((__packed__))\r
150 #else   // OS_WIN32\r
151 // VC++ コンパイラ\r
152 #define GCC_PACKED\r
153 #endif  // OS_WIN32\r
154 \r
155 // 現在のファイルと行番号を表示するマクロ\r
156 #define WHERE                   printf("%s: %u\n", __FILE__, __LINE__); SleepThread(10);\r
157 #define WHERE32                 {       \\r
158         char tmp[128]; sprintf(tmp, "%s: %u", __FILE__, __LINE__); Win32DebugAlert(tmp);        \\r
159         }\r
160 #define TIMECHECK               printf("%-12s:%5u", __FILE__, __LINE__);TimeCheck();\r
161 \r
162 // プローブ関係\r
163 #ifdef  USE_PROBE\r
164 #define PROBE_WHERE                                             WriteProbe(__FILE__, __LINE__, "");\r
165 #define PROBE_STR(str)                                  WriteProbe(__FILE__, __LINE__, (str));\r
166 #define PROBE_DATA2(str, data, size)    WriteProbeData(__FILE__, __LINE__, (str), (data), (size));\r
167 #define PROBE_DATA(data, size)                  WriteProbeData(__FILE__, __LINE__, "", (data), (size));\r
168 #else   // USE_PROBE\r
169 #define PROBE_WHERE\r
170 #define PROBE_STR(str)\r
171 #define PROBE_DATA2(str, data, size)\r
172 #define PROBE_DATA(data, size)\r
173 #endif  // USE_PROBE\r
174 \r
175 // 現在の時間を表示するマクロ\r
176 #ifdef  WIN32\r
177 #define WHEN                    {WHERE; MsPrintTick();}\r
178 #else   // WIN32\r
179 #define WHEN\r
180 #endif  // WIN32\r
181 \r
182 #ifdef  OS_UNIX\r
183 // UNIX 系 OS にのみ必要なヘッダ\r
184 #include <sys/types.h>\r
185 #include <unistd.h>\r
186 #include <termios.h>\r
187 #include <dirent.h>\r
188 #ifdef  UNIX_LINUX\r
189 #include <sys/vfs.h>\r
190 #elif   UNIX_BSD\r
191 #include <sys/param.h>\r
192 #include <sys/mount.h>\r
193 #endif\r
194 #ifdef  UNIX_SOLARIS\r
195 #include <sys/statvfs.h>\r
196 #define USE_STATVFS\r
197 #endif  // UNIX_SOLARIS\r
198 #include <sys/stat.h>\r
199 #include <sys/file.h>\r
200 #include <sys/socket.h>\r
201 #include <sys/time.h>\r
202 #include <sys/resource.h>\r
203 #include <sys/wait.h>\r
204 #include <sys/ioctl.h>\r
205 #ifdef  UNIX_SOLARIS\r
206 #include <sys/filio.h>\r
207 #endif  // UNIX_SOLARIS\r
208 #include <sys/poll.h>\r
209 #include <sys/resource.h>\r
210 #include <pthread.h>\r
211 #include <signal.h>\r
212 #include <fcntl.h>\r
213 #include <netinet/in.h>\r
214 #include <netinet/tcp.h>\r
215 //#include <netinet/ip.h>\r
216 #include <netdb.h>\r
217 #include <net/if.h>\r
218 #include <net/if_arp.h>\r
219 #include <readline/readline.h>\r
220 #include <readline/history.h>\r
221 //#include <curses.h>\r
222 \r
223 #ifdef  UNIX_LINUX\r
224 typedef void *iconv_t;\r
225 iconv_t iconv_open (__const char *__tocode, __const char *__fromcode);\r
226 size_t iconv (iconv_t __cd, char **__restrict __inbuf,\r
227                      size_t *__restrict __inbytesleft,\r
228                      char **__restrict __outbuf,\r
229                      size_t *__restrict __outbytesleft);\r
230 int iconv_close (iconv_t __cd);\r
231 #else   // UNIX_LINUX\r
232 #include <iconv.h>\r
233 #endif  // UNIX_LINUX\r
234 \r
235 \r
236 #ifdef  UNIX_LINUX\r
237 #include <netinet/if_ether.h>\r
238 #include <net/ethernet.h>\r
239 #include <netpacket/packet.h>\r
240 #endif  // UNIX_LINUX\r
241 \r
242 #ifdef  UNIX_SOLARIS\r
243 #include <sys/dlpi.h>\r
244 #include <sys/stropts.h>\r
245 #include <sys/stream.h>\r
246 #endif  // UNIX_SOLARIS\r
247 \r
248 #ifndef NO_VLAN\r
249 \r
250 #include <Mayaqua/TunTap.h>\r
251 \r
252 #endif  // NO_VLAN\r
253 \r
254 #define closesocket(s)          close(s)\r
255 \r
256 #else   // Win32 のみ\r
257 \r
258 #include <conio.h>\r
259 \r
260 #endif  // OS_UNIX\r
261 \r
262 // IPv6 サポートフラグ\r
263 #ifndef WIN32\r
264 #ifndef AF_INET6\r
265 #define NO_IPV6\r
266 #endif  // AF_INET6\r
267 #endif  // WIN32\r
268 \r
269 // 基本型宣言\r
270 #include <Mayaqua/MayaType.h>\r
271 \r
272 // オブジェクト管理\r
273 #include <Mayaqua/Object.h>\r
274 \r
275 // オブジェクト追跡\r
276 #include <Mayaqua/Tracking.h>\r
277 \r
278 // ファイル入出力\r
279 #include <Mayaqua/FileIO.h>\r
280 \r
281 // メモリ管理\r
282 #include <Mayaqua/Memory.h>\r
283 \r
284 // 文字列処理\r
285 #include <Mayaqua/Str.h>\r
286 \r
287 // 国際化文字列処理\r
288 #include <Mayaqua/Internat.h>\r
289 \r
290 // 暗号化処理\r
291 #include <Mayaqua/Encrypt.h>\r
292 \r
293 // セキュアトークン\r
294 #include <Mayaqua/Secure.h>\r
295 \r
296 // カーネル\r
297 #include <Mayaqua/Kernel.h>\r
298 \r
299 // パッケージ\r
300 #include <Mayaqua/Pack.h>\r
301 \r
302 // 設定ファイル\r
303 #include <Mayaqua/Cfg.h>\r
304 \r
305 // 文字列テーブル\r
306 #include <Mayaqua/Table.h>\r
307 \r
308 // ネットワーク通信\r
309 #include <Mayaqua/Network.h>\r
310 \r
311 // 64 bit リアルタイムクロック\r
312 #include <Mayaqua/Tick64.h>\r
313 \r
314 // OS 依存コード\r
315 #include <Mayaqua/OS.h>\r
316 \r
317 // Microsoft Windows 用コード\r
318 #include <Mayaqua/Microsoft.h>\r
319 \r
320 \r
321 // グローバル変数\r
322 extern bool g_memcheck;\r
323 extern bool g_debug;\r
324 extern char *cmdline;\r
325 extern wchar_t *uni_cmdline;\r
326 extern bool g_little_endian;\r
327 extern LOCK *tick_manual_lock;\r
328 \r
329 // カーネル状態\r
330 #define NUM_KERNEL_STATUS       128\r
331 extern UINT64 kernel_status[NUM_KERNEL_STATUS];\r
332 extern UINT64 kernel_status_max[NUM_KERNEL_STATUS];\r
333 extern LOCK *kernel_status_lock[NUM_KERNEL_STATUS];\r
334 extern BOOL kernel_status_inited;\r
335 \r
336 // カーネル状態操作マクロ\r
337 #define KS_LOCK(id)             LockKernelStatus(id)\r
338 #define KS_UNLOCK(id)   UnlockKernelStatus(id)\r
339 #define KS_GET64(id)    (kernel_status[id])\r
340 #define KS_GET(id)              ((UINT)KS_GET64(id))\r
341 #define KS_GETMAX64(id) (kernel_status_max[id])\r
342 #define KS_GETMAX(id)   ((UINT)KS_GETMAX64(id))\r
343 \r
344 #ifdef  DONT_USE_KERNEL_STATUS\r
345 // カーネルステータス操作を無効にする\r
346 #define KS_INC(id)\r
347 #define KS_DEC(id)\r
348 #define KS_ADD(id, n)\r
349 #define KS_SUB(id, n)\r
350 #else   // DONT_USE_KERNEL_STATUS\r
351 // カーネルステータス操作を有効にする\r
352 #define KS_INC(id)                                                      \\r
353 if (kernel_status_inited) {                                     \\r
354         KS_LOCK(id);                                                    \\r
355         kernel_status[id]++;                                    \\r
356         kernel_status_max[id] = MAX(kernel_status_max[id], kernel_status[id]);  \\r
357         KS_UNLOCK(id);                                                  \\r
358 }\r
359 #define KS_DEC(id)                                                      \\r
360 if (kernel_status_inited) {                                     \\r
361         KS_LOCK(id);                                                    \\r
362         kernel_status[id]--;                                    \\r
363         kernel_status_max[id] = MAX(kernel_status_max[id], kernel_status[id]);  \\r
364         KS_UNLOCK(id);                                                  \\r
365 }\r
366 #define KS_ADD(id, n)                                           \\r
367 if (kernel_status_inited) {                                     \\r
368         KS_LOCK(id);                                                    \\r
369         kernel_status[id] += n;                                 \\r
370         kernel_status_max[id] = MAX(kernel_status_max[id], kernel_status[id]);  \\r
371         KS_UNLOCK(id);                                                  \\r
372 }\r
373 #define KS_SUB(id, n)                                           \\r
374 if (kernel_status_inited) {                                     \\r
375         KS_LOCK(id);                                                    \\r
376         kernel_status[id] -= n;                                 \\r
377         kernel_status_max[id] = MAX(kernel_status_max[id], kernel_status[id]);  \\r
378         KS_UNLOCK(id);                                                  \\r
379 }\r
380 #endif  // DONT_USE_KERNEL_STATUS\r
381 \r
382 // カーネル状態一覧\r
383 // 文字列関係\r
384 #define KS_STRCPY_COUNT                 0               // StrCpy 呼び出し回数\r
385 #define KS_STRLEN_COUNT                 1               // StrLen 呼び出し回数\r
386 #define KS_STRCHECK_COUNT               2               // StrCheck 呼び出し回数\r
387 #define KS_STRCAT_COUNT                 3               // StrCat 呼び出し回数\r
388 #define KS_FORMAT_COUNT                 4               // Format 呼び出し回数\r
389 // メモリ関係\r
390 #define KS_MALLOC_COUNT                 5               // Malloc 呼び出し回数\r
391 #define KS_REALLOC_COUNT                6               // ReAlloc 呼び出し回数\r
392 #define KS_FREE_COUNT                   7               // Free 呼び出し回数\r
393 #define KS_TOTAL_MEM_SIZE               8               // これまでに確保したメモリの合計サイズ\r
394 #define KS_CURRENT_MEM_COUNT    9               // 現在確保しているメモリブロック数\r
395 #define KS_TOTAL_MEM_COUNT              10              // これまでに確保したメモリブロック数の合計\r
396 #define KS_ZERO_COUNT                   11              // Zero 呼び出し回数\r
397 #define KS_COPY_COUNT                   12              // Copy 呼び出し回数\r
398 // ロック関係\r
399 #define KS_NEWLOCK_COUNT                13              // NewLock を呼び出した回数\r
400 #define KS_DELETELOCK_COUNT             14              // DeleteLock を呼び出した回数\r
401 #define KS_LOCK_COUNT                   15              // Lock を呼び出した回数\r
402 #define KS_UNLOCK_COUNT                 16              // Unlock を呼び出した回数\r
403 #define KS_CURRENT_LOCK_COUNT   17              // 現在の LOCK オブジェクト数\r
404 #define KS_CURRENT_LOCKED_COUNT 18              // 現在のロックされている LOCK オブジェクト数\r
405 // カウンタ情報\r
406 #define KS_NEW_COUNTER_COUNT    19              // NewCounter を呼び出した回数\r
407 #define KS_DELETE_COUNTER_COUNT 20              // DeleteCounter を呼び出した回数\r
408 #define KS_INC_COUNT                    21              // Inc を呼び出した回数\r
409 #define KS_DEC_COUNT                    22              // Dec を呼び出した回数\r
410 #define KS_CURRENT_COUNT                23              // 現在のカウント数の合計\r
411 // 参照カウンタ情報\r
412 #define KS_NEWREF_COUNT                 24              // NewRef を呼び出した回数\r
413 #define KS_FREEREF_COUNT                72              // REF オブジェクトを削除した回数\r
414 #define KS_ADDREF_COUNT                 25              // AddRef を呼び出した回数\r
415 #define KS_RELEASE_COUNT                26              // Release を呼び出した回数\r
416 #define KS_CURRENT_REF_COUNT    27              // 現在の REF オブジェクト数\r
417 #define KS_CURRENT_REFED_COUNT  28              // 現在の参照数の合計\r
418 // バッファ情報\r
419 #define KS_NEWBUF_COUNT                 29              // NewBuf を呼び出した回数\r
420 #define KS_FREEBUF_COUNT                30              // FreeBuf を呼び出した回数\r
421 #define KS_CURRENT_BUF_COUNT    31              // 現在の BUF オブジェクトの数\r
422 #define KS_READ_BUF_COUNT               32              // ReadBuf を呼び出した回数\r
423 #define KS_WRITE_BUF_COUNT              33              // WriteBuf を呼び出した回数\r
424 #define KS_ADJUST_BUFSIZE_COUNT 34              // バッファサイズを調整した回数\r
425 #define KS_SEEK_BUF_COUNT               35              // SeekBuf を呼び出した回数\r
426 // FIFO 情報\r
427 #define KS_NEWFIFO_COUNT                36              // NewFifo を呼び出した回数\r
428 #define KS_FREEFIFO_COUNT               37              // FIFO オブジェクトを削除した回数\r
429 #define KS_READ_FIFO_COUNT              38              // ReadFifo を呼び出した回数\r
430 #define KS_WRITE_FIFO_COUNT             39              // WriteFifo を呼び出した回数\r
431 #define KS_PEEK_FIFO_COUNT              40              // PeekFifo を呼び出した回数\r
432 // リスト関係\r
433 #define KS_NEWLIST_COUNT                41              // NewList を呼び出した回数\r
434 #define KS_FREELIST_COUNT               42              // LIST オブジェクトを削除した回数\r
435 #define KS_INSERT_COUNT                 43              // Add を呼び出した回数\r
436 #define KS_DELETE_COUNT                 44              // Delete を呼び出した回数\r
437 #define KS_SORT_COUNT                   45              // Sort を呼び出した回数\r
438 #define KS_SEARCH_COUNT                 46              // Search を呼び出した回数\r
439 #define KS_TOARRAY_COUNT                47              // ToArray を呼び出した回数\r
440 // キュー関係\r
441 #define KS_NEWQUEUE_COUNT               48              // NewQueue を呼び出した回数\r
442 #define KS_FREEQUEUE_COUNT              49              // QUEUE オブジェクトを削除した回数\r
443 #define KS_PUSH_COUNT                   50              // Push を呼び出した回数\r
444 #define KS_POP_COUNT                    51              // POP を呼び出した回数\r
445 // スタック関係\r
446 #define KS_NEWSK_COUNT                  52              // NewSk を呼び出した回数\r
447 #define KS_FREESK_COUNT                 53              // SK オブジェクトを削除した回数\r
448 #define KS_INSERT_QUEUE_COUNT   54              // InsertQueue を呼び出した回数\r
449 #define KS_GETNEXT_COUNT                55              // GetNext を呼び出した回数\r
450 // カーネル関係\r
451 #define KS_GETTIME_COUNT                56              // 時刻を取得した回数\r
452 #define KS_GETTICK_COUNT                57              // システムタイマを取得した回数\r
453 #define KS_NEWTHREAD_COUNT              58              // NewThread を呼び出した回数\r
454 #define KS_FREETHREAD_COUNT             59              // THREAD オブジェクトを削除した回数\r
455 #define KS_WAITFORTHREAD_COUNT  60              // WaitForThread を呼び出した回数\r
456 #define KS_NEWEVENT_COUNT               61              // NewEvent を呼び出した回数\r
457 #define KS_FREEEVENT_COUNT              62              // EVENT オブジェクトを削除した回数\r
458 #define KS_WAIT_COUNT                   63              // Wait を呼び出した回数\r
459 #define KS_SLEEPTHREAD_COUNT    64              // SleepThread を呼び出した回数\r
460 // IO 関係\r
461 #define KS_IO_OPEN_COUNT                65              // ファイルを開いた回数\r
462 #define KS_IO_CREATE_COUNT              66              // ファイルを作成した回数\r
463 #define KS_IO_CLOSE_COUNT               67              // ファイルを閉じた回数\r
464 #define KS_IO_READ_COUNT                68              // ファイルから読み込んだ回数\r
465 #define KS_IO_WRITE_COUNT               69              // ファイルに書き込んだ回数\r
466 #define KS_IO_TOTAL_READ_SIZE   70              // ファイルから読み込んだ合計バイト数\r
467 #define KS_IO_TOTAL_WRITE_SIZE  71              // ファイルに書き込んだ合計バイト数\r
468 // メモリプール関係\r
469 #define KS_MEMPOOL_MALLOC_COUNT 75              // メモリプールを確保した回数\r
470 #define KS_MEMPOOL_FREE_COUNT   73              // メモリプールを解放した回数\r
471 #define KS_MEMPOOL_CURRENT_NUM  74              // 現在のメモリプールの個数\r
472 #define KS_MEMPOOL_REALLOC_COUNT        76      // メモリプールを ReAlloc した回数\r
473 \r
474 \r
475 // マクロ\r
476 #define IsDebug()               (g_debug)               // デバッグモード\r
477 #define IsMemCheck()    (g_memcheck)    // メモリチェックモード\r
478 \r
479 // 関数プロトタイプ\r
480 void InitMayaqua(bool memcheck, bool debug, int argc, char **argv);\r
481 void FreeMayaqua();\r
482 bool IsNt();\r
483 bool IsUnicode();\r
484 void MayaquaDotNetMode();\r
485 bool MayaquaIsDotNetMode();\r
486 void MayaquaMinimalMode();\r
487 bool MayaquaIsMinimalMode();\r
488 bool Is64();\r
489 bool Is32();\r
490 bool IsIA64();\r
491 bool IsX64();\r
492 void InitKernelStatus();\r
493 void FreeKernelStatus();\r
494 void PrintDebugInformation();\r
495 void LockKernelStatus(UINT id);\r
496 void UnlockKernelStatus(UINT id);\r
497 void PrintKernelStatus();\r
498 void InitCommandLineStr(int argc, char **argv);\r
499 void FreeCommandLineStr();\r
500 void SetCommandLineStr(char *str);\r
501 void SetCommandLineUniStr(wchar_t *str);\r
502 char *GetCommandLineStr();\r
503 wchar_t *GetCommandLineUniStr();\r
504 void ParseCommandLineTokens();\r
505 void FreeCommandLineTokens();\r
506 TOKEN_LIST *GetCommandLineToken();\r
507 UNI_TOKEN_LIST *GetCommandLineUniToken();\r
508 void InitOsInfo();\r
509 void FreeOsInfo();\r
510 void Alert(char *msg, char *caption);\r
511 void AlertW(wchar_t *msg, wchar_t *caption);\r
512 OS_INFO *GetOsInfo();\r
513 UINT GetOsType();\r
514 void PrintOsInfo(OS_INFO *info);\r
515 void CheckEndian();\r
516 void CheckUnixTempDir();\r
517 void TimeCheck();\r
518 void SetHamMode();\r
519 bool IsHamMode();\r
520 void InitProbe();\r
521 void FreeProbe();\r
522 void EnableProbe(bool enable);\r
523 bool IsProbeEnabled();\r
524 void WriteProbe(char *filename, UINT line, char *str);\r
525 void WriteProbeData(char *filename, UINT line, char *str, void *data, UINT size);\r
526 USHORT CalcChecksum16(void *buf, UINT size);\r
527 \r
528 #ifdef  OS_WIN32\r
529 // インポートライブラリ (for Win32)\r
530 #pragma comment(lib, "Ws2_32.lib")\r
531 #pragma comment(lib, "winmm.lib")\r
532 #pragma comment(lib, "kernel32.lib")\r
533 #pragma comment(lib, "user32.lib")\r
534 #pragma comment(lib, "gdi32.lib")\r
535 #pragma comment(lib, "shell32.lib")\r
536 #pragma comment(lib, "comctl32.lib")\r
537 #pragma comment(lib, "dbghelp.lib")\r
538 #pragma comment(lib, "Iphlpapi.lib")\r
539 #pragma comment(lib, "setupapi.lib")\r
540 #pragma comment(lib, "version.lib")\r
541 #pragma comment(lib, "Netapi32.lib")\r
542 #pragma comment(lib, "shlwapi.lib")\r
543 #pragma warning( disable : 4099 )\r
544 #endif  // OS_WIN32\r
545 \r
546 // デバッグ用\r
547 #ifndef ENCRYPT_C\r
548 //#define       Disconnect(s)           {Debug("Disconnect() Called: %s %u\n", __FILE__, __LINE__);Disconnect(s);}\r
549 #endif\r
550 \r
551 \r
552 #endif  // MAYAQUA_H\r
553 \r
554 \r