source: lab/vendor/utvpn/utvpn-unix-v101-7101-public/src/Mayaqua/Mayaqua.h @ 146

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