-
Notifications
You must be signed in to change notification settings - Fork 4
/
readme.txt
345 lines (248 loc) · 11.7 KB
/
readme.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
----------------------------------------------------------------------
■「CSAORI」:SAORIサンプルクラス
■By CSAORI Project Team
https://github.com/ponapalt/csaori
----------------------------------------------------------------------
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■これは何をするものか
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
SAORIのサンプルクラスです。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■動作環境
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
・VisualStudio.NET2005 など
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■使用方法
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■1.基本的構造■
CSAORIは、以下の構成からなっています。(→は派生)
CSaori_base クラス 「SAORI的」DLLインタフェースを規定するクラス
→CSaori クラス SAORI DLLを規定するクラス
→CPlugin クラス Plugin DLLを規定するクラス
CSAORIInput クラス ベースウェアからSAORIへの呼び出しパラメータを
表現するクラス
CSAORIOutputクラス SAORIからベースウェアへの返却値を表現するクラス
SAORI_FUNC名前空間 SAORI作成に有用と思われるユーティリティ関数を
集めたクラス
■2.最も基本的な利用法■
最も簡単なCSAORIを使ったSAORI DLLのソースコードは、下記のようになります。
(同梱のSAORITESTプロジェクトを参考にしてください)
単純な処理であれば、CSAORIクラスからクラスの派生を行う必要はありません。
----------------------------------------------------------------------
SaoriTest.cpp
----------------------------------------------------------------------
#include "csaori.h"
bool CSAORI::load(){
return true;
}
bool CSAORI::unload(){
return true;
}
void CSAORI::exec(const CSAORIInput& in,CSAORIOutput& out){
out.result_code = SAORIRESULT_OK;
out.result = getModulePath();
out.result += in.args[0];
out.result += in.args[1];
}
----------------------------------------------------------------------
(1)おまじない
CSAORIを利用するには、開発環境でcsaori.cpp、csaori_base.cpp、及び両フ
ァイルの.hを参照設定した上で、自分で作るソースファイル(hoge.cppとしま
す)の先頭で、csaori.hをincludeしてください。
また、リンクの設定で、user32.libを参照設定してください。
(2)利用者が実装しなければならない関数
利用者が実装しなければならない関数は、load、unload、execです。
① load
SAORI DLLがロードされた際に呼び出されます。
初期化などの処理を行って下さい。処理に成功したら、trueを返して下さい。
② unload
SAORI DLLがアンロードされた際に呼び出されます。
終了などの処理を行って下さい。処理に成功したら、trueを返して下さい。
③ exec
SAORI DLLが(SHIORIなどの実行系から)実際にリクエストされた際に
呼び出されます。
引数として CSAORIInputへの参照、返却値としてCSAORIOutputへの参照を
持っています。
CSAORIInputを見て処理を行ったら、CSAORIOutputのresult_code、及び
resultを適切に設定して下さい。
■3.CSAORIが行ってくれること■
CSAORIは、以下の処理を行います。
・SAORI DLLのインタフェースの実装
・SHIORIなどの実行系からの呼び出し文字列をCSAORIInputに纏める
・execした後のCSAORIOutputをSHIORIに返す
なお、CSAORI内部では、文字コードはUNICODE(wchar_t)を用いています。
実行系からの呼び出しに応じて、UNICODEとの相互変換を行いますので、
利用者側は、load,unload,execの実装にあたって文字コードを意識する必要は
あまりありません。全てUNICODEでやり取りされると思って下さい。
■4.CSAORI 簡易リファレンス■
本項は、CSAORIのソースを見るのにあたって、何がどこにあるかを理解する手
助けの為に、利用者が知っておくべきだと思われる事項について記載したもの
です。完全なリファレンスは現在存在しませんので、ソースコードを確認して
ください。
----------------------------------------------------------------------
■string_t,char_t(CSaori_Base.h)
----------------------------------------------------------------------
CSAORIでは文字及び文字列を表すのに、char_t 及び string_t という名前を
利用しています。
----------------------------------------------------------------------
■SAORIRESULT(CSaori_Base.h)
----------------------------------------------------------------------
SAORIのリザルトコードを定義しています。execの処理では、必ずCSAORIOutput
のresult_codeに、この列挙体のどれかを設定してください。
----------------------------------------------------------------------
■グローバル pSaori オブジェクト(CSaori_base.cpp及びCSaori.h)
----------------------------------------------------------------------
CSAORIBase* pSaori;
CSAORIの唯一のオブジェクトが格納されます。DLLがロードされている間
このオブジェクトが存在し、モジュールパス等の情報を保持します。csa
ori.h で extern されているため、利用者側からは、例えば pSaori->get
ModulePath() 等とすることで、CSAORIオブジェクトの機能にアクセスで
きます。
----------------------------------------------------------------------
■SAORI_FUNC名前空間の関数
----------------------------------------------------------------------
UnicodeToMultiByte
string_t をShift-JIS等のマルチバイト文字列に変換します。
MultiByteToUnicode
上記の逆です。
CodePagetoString
Windowsコードページを、文字コードを表す文字列に変換します。
StringtoCodePage
上記の逆です。
CP番号 CODEPAGE 文字列(大文字小文字は無視されます)
932 CP_SJIS Shift_JIS または x-sjis
50220 CP_ISO2022JP ISO-2022-JP
20932 CP_EUCJP EUC-JP または x-euc-jp
65001 CP_UTF8 UTF-8
getResultString
SAORIリザルトコード番号を、それを表す文字列に変換します。
(例) 200 → OK
204 → No Content
getLine
文字列を行単位に切り出します。
intToString
数値を文字列に変換します。
AsyncMessageBox
非同期にメッセージBOXを表示します。
CCriticalSection
クリティカルセクションを扱うクラスです。
----------------------------------------------------------------------
■CSAORIInputクラス(Csaori_base.h 及び .cpp)
----------------------------------------------------------------------
vector_str args;
リクエストの引数がstring_t(UNICODE文字列)の配列で入っています。
args[0] 等としてアクセスできます。
------ 以下のメンバは、利用者はあまり意識する必要はありません。 ------
unsigned int codepage;
リクエストの元の文字コードのコードページ番号が入っています。
string_t cmd;
GET Version SAORI/1.0やEXECUTE SAORI/1.0といった、リクエストの最初
の行が入っています。
string_t id;
リクエストに ID: があれば、それが入っています。
map_strpair opts;
その他のリクエストヘッダが、key-valueペアで入っています。
bool parseString(const string_t &src);
リクエスト文字列を解析し、argsやopts等のメンバーを設定する処理です。
----------------------------------------------------------------------
■CSAORIOutputクラス(Csaori_base.h 及び .cpp)
----------------------------------------------------------------------
SAORIRESULT result_code;
SAORI/1.0 200 OK 等のリザルトコードを返すために、SAORIRESULT列挙体
のどれかを設定してください。
string_t result;
Result: 行で返す内容を設定してください。
vector_str values;
Values: 行で返す内容を設定してください。
------ 以下のメンバは、利用者はあまり意識する必要はありません。 ------
map_strpair opts;
ResultやValues以外のリザルトヘッダを設定したい場合に用います。
unsigned int codepage;
自動的にリクエストの文字コードにあわせて設定されます。
void setResultEmpty();
このCSAORIOutputオブジェクトを、「SAORI処理で何も返さない」を表す
リザルト状態にします。
result、valuesはクリアされ、result_codeは(何も設定がなければ)
204 No Content になります。
string_t toString();
このCSAORIOutputオブジェクトを、実行系に返す文字列にします。
----------------------------------------------------------------------
■CSAORIBaseクラス(Csaori_base.h 及び .cpp)
----------------------------------------------------------------------
virtual bool load()
load関数です。利用者側で実装してください。
virtual bool unload()
unload関数です。利用者側で実装してください。
virtual void exec(const CSAORIInput& in,CSAORIOutput& out)
実際のリクエストを処理するexec関数です。利用者側で実装してください。
const string_t& getModulePath(void)
実行系から渡される、DLLが存在するディレクトリパスを取得します。
HANDLE getModuleHandle(void)
DLLがアタッチされた際にDLLMainで渡されるHANDLEを取得します。
std::string checkAndModifyPath(const std::string &path);
string_t checkAndModifyPathW(const string_t &path);
パス表記の正規化を行います。WのついているのはUNICODEバージョンです。
・環境変数は展開されます。
・DLLのある位置からの相対パス表記は、getModulePathの返却値と結合され、
フルパスになります。
------ 以下のメンバは、利用者はあまり意識する必要はありません。 ------
virtual bool exec_insecure(const CSAORIInput& in,CSAORIOutput& out)
SecLevel Remote でリクエストが来た場合のexec関数です。
デフォルトで何もしないようにしていますので、そのまま何もしないことを
推奨します。
virtual void exec_before(const CSAORIInput& in,CSAORIOutput& out)
exec関数が実行される前の処理があればここに記載します。
virtual void exec_after(const CSAORIInput& in,CSAORIOutput& out)
exec関数が実行された後の処理があればここに記載します。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■配布条件等
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
以下の配布条件で規定するライセンスは、CSAORIサンプルクラス本体に適用
されるライセンスであり、CSAORIを用いて作成された派生SAORIは、CSAORI
とは異なるライセンスになっている場合があります。各SAORIのライセンスを
確認してください。
以下の文章において、CSAORIとは以下のファイルを示すものとします。
csaori.cpp
csaori.h
csaori_base.cpp
csaori_base.h
cplugin.cpp
cplugin.h
readme.txt(このファイル)
CSAORIは、以下の2.で明記したライセンスに従って利用できます。
ただし、「伺かゴースト」とその周辺プログラムに組み込んで利用する場合は、
1.のライセンスを適用するものとします。
要するに、ゴーストやそれに関係するユーティリティに組み込んで使う場合は、
何も気にしなくていいです。
----------------------------------------------------------------
1.伺かゴースト用ライセンス
使途を限定せず自由に利用することが出来ます。
配布パッケージに含まれているすべてのファイルを自由に取り扱うことが出来ます。
一部のファイル、もしくはそのファイルの内容の一部を抜き出して、
他の構成に含めてもかまいません。
このプログラムを使用した結果、あなたに何らかの損害が発生しても、
その責任を作者は負いません。
----------------------------------------------------------------
2.修正BSDライセンス
Copyright (C) 2008-, CSaori Project All rights reserved.
https://github.com/ponapalt/csaori
ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
以下の条件を満たす場合に限り、再頒布および使用が許可されます。
・ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
および下記免責条項を含めること。
・バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、
上記の著作権表示、本条件一覧、および下記免責条項を含めること。
・書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または
販売促進に、「CSaori Project」の名前または貢献者の名前を使用してはならない。
本ソフトウェアは、著作権者および貢献者によって「現状のまま」提供されており、
明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性に関する
暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。著作権者も
貢献者も、事由のいかんを問わず、 損害発生の原因いかんを問わず、かつ責任の根拠
が契約であるか厳格責任であるか(過失その他の)不法行為であるかを問わず、
仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの
使用によって発生した(代替品または代用サービスの調達、使用の喪失、データの喪失、
利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、間接損害、
偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を
負わないものとします。
■更新履歴
https://github.com/ponapalt/csaori/commits/master