* 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
diff --git a/utvpn/utvpn-unix-v101-7101-public/src/Mayaqua/Mayaqua.h b/utvpn/utvpn-unix-v101-7101-public/src/Mayaqua/Mayaqua.h
new file mode 100644 (file)
index 0000000..f221a53
--- /dev/null
@@ -0,0 +1,554 @@
+// SoftEther UT-VPN SourceCode\r
+// \r
+// Copyright (C) 2004-2010 SoftEther Corporation.\r
+// Copyright (C) 2004-2010 University of Tsukuba, Japan.\r
+// Copyright (C) 2003-2010 Daiyuu Nobori.\r
+// All Rights Reserved.\r
+// \r
+// http://utvpn.tsukuba.ac.jp/\r
+// \r
+// This program is free software; you can redistribute it and/or\r
+// modify it under the terms of the GNU General Public License\r
+// version 2 as published by the Free Software Foundation.\r
+// \r
+// This program is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+// GNU General Public License for more details.\r
+// \r
+// You should have received a copy of the GNU General Public License version 2\r
+// along with this program; if not, write to the Free Software\r
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+// \r
+// このファイルは GPL バージョン 2 ライセンスで公開されています。\r
+// 誰でもこのファイルの内容を複製、改変したり、改変したバージョンを再配布\r
+// することができます。ただし、原著作物を改変した場合は、原著作物の著作権表示\r
+// を除去することはできません。改変した著作物を配布する場合は、改変実施者の\r
+// 著作権表示を原著作物の著作権表示に付随して記載するようにしてください。\r
+// \r
+// この SoftEther UT-VPN オープンソース・プロジェクトは、日本国の\r
+// ソフトイーサ株式会社 (SoftEther Corporation, http://www.softether.co.jp/ )\r
+// および筑波大学 (University of Tsukuba, http://www.tsukuba.ac.jp/ ) によって\r
+// ホストされています。\r
+// 本プログラムの配布者は、本プログラムを、業としての利用以外のため、\r
+// および、試験または研究のために利用が行われることを想定して配布\r
+// しています。\r
+// SoftEther UT-VPN プロジェクトの Web サイトは http://utvpn.tsukuba.ac.jp/ に\r
+// あります。\r
+// 本ソフトウェアの不具合の修正、機能改良、セキュリティホールの修復などのコード\r
+// の改変を行った場合で、その成果物を SoftEther UT-VPN プロジェクトに提出して\r
+// いただける場合は、 http://utvpn.tsukuba.ac.jp/ までソースコードを送付して\r
+// ください。SoftEther UT-VPN プロジェクトの本体リリースまたはブランチリリース\r
+// に組み込みさせていただきます。\r
+// \r
+// GPL に基づいて原著作物が提供される本ソフトウェアの改良版を配布、販売する\r
+// 場合は、そのソースコードを GPL に基づいて誰にでも開示する義務が生じます。\r
+// \r
+// 本ソフトウェアに関連する著作権、特許権、商標権はソフトイーサ株式会社\r
+// (SoftEther Corporation) およびその他の著作権保持者が保有しています。\r
+// ソフトイーサ株式会社等はこれらの権利を放棄していません。本ソフトウェアの\r
+// 二次著作物を配布、販売する場合は、これらの権利を侵害しないようにご注意\r
+// ください。\r
+// \r
+// お願い: どのような通信ソフトウェアにも通常は必ず未発見の\r
+// セキュリティホールが潜んでいます。本ソースコードをご覧いただいた結果、\r
+// UT-VPN にセキュリティホールを発見された場合は、当該セキュリティホールの\r
+// 情報を不特定多数に開示される前に、必ず、ソフトイーサ株式会社\r
+// および脆弱性情報の届出を受け付ける公的機関まで通報いただき、\r
+// 公益保護にご協力いただきますようお願い申し上げます。\r
+// \r
+// ソフトイーサ株式会社は、当該セキュリティホールについて迅速に対処を\r
+// 行い、UT-VPN および UT-VPN に関連するソフトウェアのユーザー・顧客\r
+// を保護するための努力を行います。\r
+// \r
+// ソフトイーサへの届出先: http://www.softether.co.jp/jp/contact/\r
+// 日本国内の脆弱性情報届出受付公的機関:\r
+//         独立行政法人 情報処理推進機構\r
+//         http://www.ipa.go.jp/security/vuln/report/\r
+// \r
+// 上記各事項について不明な点は、ソフトイーサ株式会社までご連絡ください。\r
+// 連絡先: http://www.softether.co.jp/jp/contact/\r
+\r
+// -----------------------------------------------\r
+// [ChangeLog]\r
+// 2010.05.20\r
+//  新規リリース by SoftEther\r
+// -----------------------------------------------\r
+\r
+// Mayaqua.h\r
+// Mayaqua Kernel ヘッダファイル\r
+\r
+#ifndef        MAYAQUA_H\r
+#define        MAYAQUA_H\r
+\r
+// PenCore.dll 関係\r
+#define        PENCORE_DLL_NAME                "|PenCore.dll"\r
+\r
+//#define      USE_PROBE                                               // Probe を使う\r
+\r
+// リリースフラグ用マクロ\r
+#ifdef VPN_SPEED\r
+\r
+#define        DONT_USE_KERNEL_STATUS                  // カーネルステータスを更新しない\r
+#define        WIN32_USE_HEAP_API_FOR_MEMORY   // メモリ確保にヒープ API を使用する\r
+#define        WIN32_NO_DEBUG_HELP_DLL                 // デバッグ用 DLL を呼び出さない\r
+#define        DONT_CHECK_HEAP                                 // ヒープの状態をチェックしない\r
+\r
+#endif // VPN_SPEED\r
+\r
+#ifdef VPN_EXE\r
+// 実行可能ファイルビルド用\r
+#ifdef WIN32\r
+#include <windows.h>\r
+#include "../PenCore/resource.h"\r
+int main(int argc, char *argv[]);\r
+int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, char *CmdLine, int CmdShow)\r
+{\r
+       return main(0, NULL);\r
+}\r
+#endif // WIN32\r
+#endif // VPN_EXE\r
+\r
+// 定数\r
+#define        DEFAULT_TABLE_FILE_NAME         "|strtable.stb"         // デフォルト文字列テーブル\r
+#define        STRTABLE_ID                                     "UT_VPN_20100520"       // 文字列テーブル識別子\r
+\r
+// OS の判別\r
+#ifdef WIN32\r
+#define        OS_WIN32                // Microsoft Windows\r
+#else\r
+#define        OS_UNIX                 // UNIX\r
+#endif // WIN32\r
+\r
+// ディレクトリ区切り\r
+#ifdef OS_WIN32\r
+#define        PATH_BACKSLASH  // バックスラッシュ (\)\r
+#else  // WIN32\r
+#define        PATH_SLASH              // スラッシュ (/)\r
+#endif // WIN32\r
+\r
+// 文字コード\r
+#ifdef OS_WIN32\r
+#define        CODE_SHIFTJIS   // Shift_JIS コード\r
+#else  // WIN32\r
+#define        CODE_EUC                // euc-jp コード\r
+#endif // WIN32\r
+\r
+// エンディアン\r
+#define        IsBigEndian()           (g_little_endian ? false : true)\r
+#define        IsLittleEndian()        (g_little_endian)\r
+\r
+#ifdef OS_WIN32\r
+// snprintf 関数の置換\r
+#define        snprintf        _snprintf\r
+#endif // OS_WIN32\r
+\r
+// コンパイラ依存\r
+#ifndef        OS_WIN32\r
+// gcc コンパイラ\r
+#define        GCC_PACKED              __attribute__ ((__packed__))\r
+#else  // OS_WIN32\r
+// VC++ コンパイラ\r
+#define        GCC_PACKED\r
+#endif // OS_WIN32\r
+\r
+// 現在のファイルと行番号を表示するマクロ\r
+#define        WHERE                   printf("%s: %u\n", __FILE__, __LINE__); SleepThread(10);\r
+#define        WHERE32                 {       \\r
+       char tmp[128]; sprintf(tmp, "%s: %u", __FILE__, __LINE__); Win32DebugAlert(tmp);        \\r
+       }\r
+#define TIMECHECK              printf("%-12s:%5u", __FILE__, __LINE__);TimeCheck();\r
+\r
+// プローブ関係\r
+#ifdef USE_PROBE\r
+#define        PROBE_WHERE                                             WriteProbe(__FILE__, __LINE__, "");\r
+#define        PROBE_STR(str)                                  WriteProbe(__FILE__, __LINE__, (str));\r
+#define        PROBE_DATA2(str, data, size)    WriteProbeData(__FILE__, __LINE__, (str), (data), (size));\r
+#define        PROBE_DATA(data, size)                  WriteProbeData(__FILE__, __LINE__, "", (data), (size));\r
+#else  // USE_PROBE\r
+#define        PROBE_WHERE\r
+#define        PROBE_STR(str)\r
+#define        PROBE_DATA2(str, data, size)\r
+#define        PROBE_DATA(data, size)\r
+#endif // USE_PROBE\r
+\r
+// 現在の時間を表示するマクロ\r
+#ifdef WIN32\r
+#define        WHEN                    {WHERE; MsPrintTick();}\r
+#else  // WIN32\r
+#define        WHEN\r
+#endif // WIN32\r
+\r
+#ifdef OS_UNIX\r
+// UNIX 系 OS にのみ必要なヘッダ\r
+#include <sys/types.h>\r
+#include <unistd.h>\r
+#include <termios.h>\r
+#include <dirent.h>\r
+#ifdef UNIX_LINUX\r
+#include <sys/vfs.h>\r
+#elif  UNIX_BSD\r
+#include <sys/param.h>\r
+#include <sys/mount.h>\r
+#endif\r
+#ifdef UNIX_SOLARIS\r
+#include <sys/statvfs.h>\r
+#define        USE_STATVFS\r
+#endif // UNIX_SOLARIS\r
+#include <sys/stat.h>\r
+#include <sys/file.h>\r
+#include <sys/socket.h>\r
+#include <sys/time.h>\r
+#include <sys/resource.h>\r
+#include <sys/wait.h>\r
+#include <sys/ioctl.h>\r
+#ifdef UNIX_SOLARIS\r
+#include <sys/filio.h>\r
+#endif // UNIX_SOLARIS\r
+#include <sys/poll.h>\r
+#include <sys/resource.h>\r
+#include <pthread.h>\r
+#include <signal.h>\r
+#include <fcntl.h>\r
+#include <netinet/in.h>\r
+#include <netinet/tcp.h>\r
+//#include <netinet/ip.h>\r
+#include <netdb.h>\r
+#include <net/if.h>\r
+#include <net/if_arp.h>\r
+#include <readline/readline.h>\r
+#include <readline/history.h>\r
+//#include <curses.h>\r
+\r
+#ifdef UNIX_LINUX\r
+typedef void *iconv_t;\r
+iconv_t iconv_open (__const char *__tocode, __const char *__fromcode);\r
+size_t iconv (iconv_t __cd, char **__restrict __inbuf,\r
+                     size_t *__restrict __inbytesleft,\r
+                     char **__restrict __outbuf,\r
+                     size_t *__restrict __outbytesleft);\r
+int iconv_close (iconv_t __cd);\r
+#else  // UNIX_LINUX\r
+#include <iconv.h>\r
+#endif // UNIX_LINUX\r
+\r
+\r
+#ifdef UNIX_LINUX\r
+#include <netinet/if_ether.h>\r
+#include <net/ethernet.h>\r
+#include <netpacket/packet.h>\r
+#endif // UNIX_LINUX\r
+\r
+#ifdef UNIX_SOLARIS\r
+#include <sys/dlpi.h>\r
+#include <sys/stropts.h>\r
+#include <sys/stream.h>\r
+#endif // UNIX_SOLARIS\r
+\r
+#ifndef        NO_VLAN\r
+\r
+#include <Mayaqua/TunTap.h>\r
+\r
+#endif // NO_VLAN\r
+\r
+#define        closesocket(s)          close(s)\r
+\r
+#else  // Win32 のみ\r
+\r
+#include <conio.h>\r
+\r
+#endif // OS_UNIX\r
+\r
+// IPv6 サポートフラグ\r
+#ifndef        WIN32\r
+#ifndef        AF_INET6\r
+#define        NO_IPV6\r
+#endif // AF_INET6\r
+#endif // WIN32\r
+\r
+// 基本型宣言\r
+#include <Mayaqua/MayaType.h>\r
+\r
+// オブジェクト管理\r
+#include <Mayaqua/Object.h>\r
+\r
+// オブジェクト追跡\r
+#include <Mayaqua/Tracking.h>\r
+\r
+// ファイル入出力\r
+#include <Mayaqua/FileIO.h>\r
+\r
+// メモリ管理\r
+#include <Mayaqua/Memory.h>\r
+\r
+// 文字列処理\r
+#include <Mayaqua/Str.h>\r
+\r
+// 国際化文字列処理\r
+#include <Mayaqua/Internat.h>\r
+\r
+// 暗号化処理\r
+#include <Mayaqua/Encrypt.h>\r
+\r
+// セキュアトークン\r
+#include <Mayaqua/Secure.h>\r
+\r
+// カーネル\r
+#include <Mayaqua/Kernel.h>\r
+\r
+// パッケージ\r
+#include <Mayaqua/Pack.h>\r
+\r
+// 設定ファイル\r
+#include <Mayaqua/Cfg.h>\r
+\r
+// 文字列テーブル\r
+#include <Mayaqua/Table.h>\r
+\r
+// ネットワーク通信\r
+#include <Mayaqua/Network.h>\r
+\r
+// 64 bit リアルタイムクロック\r
+#include <Mayaqua/Tick64.h>\r
+\r
+// OS 依存コード\r
+#include <Mayaqua/OS.h>\r
+\r
+// Microsoft Windows 用コード\r
+#include <Mayaqua/Microsoft.h>\r
+\r
+\r
+// グローバル変数\r
+extern bool g_memcheck;\r
+extern bool g_debug;\r
+extern char *cmdline;\r
+extern wchar_t *uni_cmdline;\r
+extern bool g_little_endian;\r
+extern LOCK *tick_manual_lock;\r
+\r
+// カーネル状態\r
+#define        NUM_KERNEL_STATUS       128\r
+extern UINT64 kernel_status[NUM_KERNEL_STATUS];\r
+extern UINT64 kernel_status_max[NUM_KERNEL_STATUS];\r
+extern LOCK *kernel_status_lock[NUM_KERNEL_STATUS];\r
+extern BOOL kernel_status_inited;\r
+\r
+// カーネル状態操作マクロ\r
+#define        KS_LOCK(id)             LockKernelStatus(id)\r
+#define        KS_UNLOCK(id)   UnlockKernelStatus(id)\r
+#define        KS_GET64(id)    (kernel_status[id])\r
+#define        KS_GET(id)              ((UINT)KS_GET64(id))\r
+#define        KS_GETMAX64(id) (kernel_status_max[id])\r
+#define        KS_GETMAX(id)   ((UINT)KS_GETMAX64(id))\r
+\r
+#ifdef DONT_USE_KERNEL_STATUS\r
+// カーネルステータス操作を無効にする\r
+#define        KS_INC(id)\r
+#define        KS_DEC(id)\r
+#define        KS_ADD(id, n)\r
+#define        KS_SUB(id, n)\r
+#else  // DONT_USE_KERNEL_STATUS\r
+// カーネルステータス操作を有効にする\r
+#define        KS_INC(id)                                                      \\r
+if (kernel_status_inited) {                                    \\r
+       KS_LOCK(id);                                                    \\r
+       kernel_status[id]++;                                    \\r
+       kernel_status_max[id] = MAX(kernel_status_max[id], kernel_status[id]);  \\r
+       KS_UNLOCK(id);                                                  \\r
+}\r
+#define        KS_DEC(id)                                                      \\r
+if (kernel_status_inited) {                                    \\r
+       KS_LOCK(id);                                                    \\r
+       kernel_status[id]--;                                    \\r
+       kernel_status_max[id] = MAX(kernel_status_max[id], kernel_status[id]);  \\r
+       KS_UNLOCK(id);                                                  \\r
+}\r
+#define        KS_ADD(id, n)                                           \\r
+if (kernel_status_inited) {                                    \\r
+       KS_LOCK(id);                                                    \\r
+       kernel_status[id] += n;                                 \\r
+       kernel_status_max[id] = MAX(kernel_status_max[id], kernel_status[id]);  \\r
+       KS_UNLOCK(id);                                                  \\r
+}\r
+#define        KS_SUB(id, n)                                           \\r
+if (kernel_status_inited) {                                    \\r
+       KS_LOCK(id);                                                    \\r
+       kernel_status[id] -= n;                                 \\r
+       kernel_status_max[id] = MAX(kernel_status_max[id], kernel_status[id]);  \\r
+       KS_UNLOCK(id);                                                  \\r
+}\r
+#endif // DONT_USE_KERNEL_STATUS\r
+\r
+// カーネル状態一覧\r
+// 文字列関係\r
+#define        KS_STRCPY_COUNT                 0               // StrCpy 呼び出し回数\r
+#define        KS_STRLEN_COUNT                 1               // StrLen 呼び出し回数\r
+#define        KS_STRCHECK_COUNT               2               // StrCheck 呼び出し回数\r
+#define        KS_STRCAT_COUNT                 3               // StrCat 呼び出し回数\r
+#define        KS_FORMAT_COUNT                 4               // Format 呼び出し回数\r
+// メモリ関係\r
+#define        KS_MALLOC_COUNT                 5               // Malloc 呼び出し回数\r
+#define        KS_REALLOC_COUNT                6               // ReAlloc 呼び出し回数\r
+#define        KS_FREE_COUNT                   7               // Free 呼び出し回数\r
+#define        KS_TOTAL_MEM_SIZE               8               // これまでに確保したメモリの合計サイズ\r
+#define        KS_CURRENT_MEM_COUNT    9               // 現在確保しているメモリブロック数\r
+#define        KS_TOTAL_MEM_COUNT              10              // これまでに確保したメモリブロック数の合計\r
+#define        KS_ZERO_COUNT                   11              // Zero 呼び出し回数\r
+#define        KS_COPY_COUNT                   12              // Copy 呼び出し回数\r
+// ロック関係\r
+#define        KS_NEWLOCK_COUNT                13              // NewLock を呼び出した回数\r
+#define        KS_DELETELOCK_COUNT             14              // DeleteLock を呼び出した回数\r
+#define        KS_LOCK_COUNT                   15              // Lock を呼び出した回数\r
+#define        KS_UNLOCK_COUNT                 16              // Unlock を呼び出した回数\r
+#define        KS_CURRENT_LOCK_COUNT   17              // 現在の LOCK オブジェクト数\r
+#define        KS_CURRENT_LOCKED_COUNT 18              // 現在のロックされている LOCK オブジェクト数\r
+// カウンタ情報\r
+#define        KS_NEW_COUNTER_COUNT    19              // NewCounter を呼び出した回数\r
+#define        KS_DELETE_COUNTER_COUNT 20              // DeleteCounter を呼び出した回数\r
+#define        KS_INC_COUNT                    21              // Inc を呼び出した回数\r
+#define        KS_DEC_COUNT                    22              // Dec を呼び出した回数\r
+#define        KS_CURRENT_COUNT                23              // 現在のカウント数の合計\r
+// 参照カウンタ情報\r
+#define        KS_NEWREF_COUNT                 24              // NewRef を呼び出した回数\r
+#define        KS_FREEREF_COUNT                72              // REF オブジェクトを削除した回数\r
+#define        KS_ADDREF_COUNT                 25              // AddRef を呼び出した回数\r
+#define        KS_RELEASE_COUNT                26              // Release を呼び出した回数\r
+#define        KS_CURRENT_REF_COUNT    27              // 現在の REF オブジェクト数\r
+#define        KS_CURRENT_REFED_COUNT  28              // 現在の参照数の合計\r
+// バッファ情報\r
+#define        KS_NEWBUF_COUNT                 29              // NewBuf を呼び出した回数\r
+#define        KS_FREEBUF_COUNT                30              // FreeBuf を呼び出した回数\r
+#define        KS_CURRENT_BUF_COUNT    31              // 現在の BUF オブジェクトの数\r
+#define        KS_READ_BUF_COUNT               32              // ReadBuf を呼び出した回数\r
+#define        KS_WRITE_BUF_COUNT              33              // WriteBuf を呼び出した回数\r
+#define        KS_ADJUST_BUFSIZE_COUNT 34              // バッファサイズを調整した回数\r
+#define        KS_SEEK_BUF_COUNT               35              // SeekBuf を呼び出した回数\r
+// FIFO 情報\r
+#define        KS_NEWFIFO_COUNT                36              // NewFifo を呼び出した回数\r
+#define        KS_FREEFIFO_COUNT               37              // FIFO オブジェクトを削除した回数\r
+#define        KS_READ_FIFO_COUNT              38              // ReadFifo を呼び出した回数\r
+#define        KS_WRITE_FIFO_COUNT             39              // WriteFifo を呼び出した回数\r
+#define        KS_PEEK_FIFO_COUNT              40              // PeekFifo を呼び出した回数\r
+// リスト関係\r
+#define        KS_NEWLIST_COUNT                41              // NewList を呼び出した回数\r
+#define        KS_FREELIST_COUNT               42              // LIST オブジェクトを削除した回数\r
+#define        KS_INSERT_COUNT                 43              // Add を呼び出した回数\r
+#define        KS_DELETE_COUNT                 44              // Delete を呼び出した回数\r
+#define        KS_SORT_COUNT                   45              // Sort を呼び出した回数\r
+#define        KS_SEARCH_COUNT                 46              // Search を呼び出した回数\r
+#define        KS_TOARRAY_COUNT                47              // ToArray を呼び出した回数\r
+// キュー関係\r
+#define        KS_NEWQUEUE_COUNT               48              // NewQueue を呼び出した回数\r
+#define        KS_FREEQUEUE_COUNT              49              // QUEUE オブジェクトを削除した回数\r
+#define        KS_PUSH_COUNT                   50              // Push を呼び出した回数\r
+#define        KS_POP_COUNT                    51              // POP を呼び出した回数\r
+// スタック関係\r
+#define        KS_NEWSK_COUNT                  52              // NewSk を呼び出した回数\r
+#define        KS_FREESK_COUNT                 53              // SK オブジェクトを削除した回数\r
+#define        KS_INSERT_QUEUE_COUNT   54              // InsertQueue を呼び出した回数\r
+#define        KS_GETNEXT_COUNT                55              // GetNext を呼び出した回数\r
+// カーネル関係\r
+#define        KS_GETTIME_COUNT                56              // 時刻を取得した回数\r
+#define        KS_GETTICK_COUNT                57              // システムタイマを取得した回数\r
+#define        KS_NEWTHREAD_COUNT              58              // NewThread を呼び出した回数\r
+#define        KS_FREETHREAD_COUNT             59              // THREAD オブジェクトを削除した回数\r
+#define        KS_WAITFORTHREAD_COUNT  60              // WaitForThread を呼び出した回数\r
+#define        KS_NEWEVENT_COUNT               61              // NewEvent を呼び出した回数\r
+#define        KS_FREEEVENT_COUNT              62              // EVENT オブジェクトを削除した回数\r
+#define        KS_WAIT_COUNT                   63              // Wait を呼び出した回数\r
+#define        KS_SLEEPTHREAD_COUNT    64              // SleepThread を呼び出した回数\r
+// IO 関係\r
+#define        KS_IO_OPEN_COUNT                65              // ファイルを開いた回数\r
+#define        KS_IO_CREATE_COUNT              66              // ファイルを作成した回数\r
+#define        KS_IO_CLOSE_COUNT               67              // ファイルを閉じた回数\r
+#define        KS_IO_READ_COUNT                68              // ファイルから読み込んだ回数\r
+#define        KS_IO_WRITE_COUNT               69              // ファイルに書き込んだ回数\r
+#define        KS_IO_TOTAL_READ_SIZE   70              // ファイルから読み込んだ合計バイト数\r
+#define        KS_IO_TOTAL_WRITE_SIZE  71              // ファイルに書き込んだ合計バイト数\r
+// メモリプール関係\r
+#define        KS_MEMPOOL_MALLOC_COUNT 75              // メモリプールを確保した回数\r
+#define        KS_MEMPOOL_FREE_COUNT   73              // メモリプールを解放した回数\r
+#define        KS_MEMPOOL_CURRENT_NUM  74              // 現在のメモリプールの個数\r
+#define        KS_MEMPOOL_REALLOC_COUNT        76      // メモリプールを ReAlloc した回数\r
+\r
+\r
+// マクロ\r
+#define        IsDebug()               (g_debug)               // デバッグモード\r
+#define        IsMemCheck()    (g_memcheck)    // メモリチェックモード\r
+\r
+// 関数プロトタイプ\r
+void InitMayaqua(bool memcheck, bool debug, int argc, char **argv);\r
+void FreeMayaqua();\r
+bool IsNt();\r
+bool IsUnicode();\r
+void MayaquaDotNetMode();\r
+bool MayaquaIsDotNetMode();\r
+void MayaquaMinimalMode();\r
+bool MayaquaIsMinimalMode();\r
+bool Is64();\r
+bool Is32();\r
+bool IsIA64();\r
+bool IsX64();\r
+void InitKernelStatus();\r
+void FreeKernelStatus();\r
+void PrintDebugInformation();\r
+void LockKernelStatus(UINT id);\r
+void UnlockKernelStatus(UINT id);\r
+void PrintKernelStatus();\r
+void InitCommandLineStr(int argc, char **argv);\r
+void FreeCommandLineStr();\r
+void SetCommandLineStr(char *str);\r
+void SetCommandLineUniStr(wchar_t *str);\r
+char *GetCommandLineStr();\r
+wchar_t *GetCommandLineUniStr();\r
+void ParseCommandLineTokens();\r
+void FreeCommandLineTokens();\r
+TOKEN_LIST *GetCommandLineToken();\r
+UNI_TOKEN_LIST *GetCommandLineUniToken();\r
+void InitOsInfo();\r
+void FreeOsInfo();\r
+void Alert(char *msg, char *caption);\r
+void AlertW(wchar_t *msg, wchar_t *caption);\r
+OS_INFO *GetOsInfo();\r
+UINT GetOsType();\r
+void PrintOsInfo(OS_INFO *info);\r
+void CheckEndian();\r
+void CheckUnixTempDir();\r
+void TimeCheck();\r
+void SetHamMode();\r
+bool IsHamMode();\r
+void InitProbe();\r
+void FreeProbe();\r
+void EnableProbe(bool enable);\r
+bool IsProbeEnabled();\r
+void WriteProbe(char *filename, UINT line, char *str);\r
+void WriteProbeData(char *filename, UINT line, char *str, void *data, UINT size);\r
+USHORT CalcChecksum16(void *buf, UINT size);\r
+\r
+#ifdef OS_WIN32\r
+// インポートライブラリ (for Win32)\r
+#pragma comment(lib, "Ws2_32.lib")\r
+#pragma comment(lib, "winmm.lib")\r
+#pragma comment(lib, "kernel32.lib")\r
+#pragma comment(lib, "user32.lib")\r
+#pragma comment(lib, "gdi32.lib")\r
+#pragma comment(lib, "shell32.lib")\r
+#pragma comment(lib, "comctl32.lib")\r
+#pragma comment(lib, "dbghelp.lib")\r
+#pragma comment(lib, "Iphlpapi.lib")\r
+#pragma comment(lib, "setupapi.lib")\r
+#pragma comment(lib, "version.lib")\r
+#pragma comment(lib, "Netapi32.lib")\r
+#pragma comment(lib, "shlwapi.lib")\r
+#pragma warning( disable : 4099 )\r
+#endif // OS_WIN32\r
+\r
+// デバッグ用\r
+#ifndef        ENCRYPT_C\r
+//#define      Disconnect(s)           {Debug("Disconnect() Called: %s %u\n", __FILE__, __LINE__);Disconnect(s);}\r
+#endif\r
+\r
+\r
+#endif // MAYAQUA_H\r
+\r
+\r