他人の空似自作物置場

windows7以降のApiSetSchemaという機能のサンプルコード、詳細は関連記事を検索からどうぞ

プログラム名:ReadApiSetSchema

用途:ApiSetSchemaの仕組みを理解するためのサンプルコード


使い方:
・単に起動するだけでその環境のapisetschema.dllを読み込んで転送一覧が表示されます

インストール:
zip展開するだけ

アンインストール:
レジストリもテンポラリファイルも弄っておりません。
フォルダごと削除するだけですっきりさっぱりおさらばできます。

ファイル解説:
ReadApiSetSchema.exe プログラム本体です。
Readme.txt           今読んでいるこれ。
ReadApiSetSchema.cpp ソースコードです。


Q&A:
	Q:WindowsXP(Vista)で動かないんだけど
	A:対応OSはWindows7以降です。

	Q:BOOSTわかんない
	A:endianはstdint.hのエンディアン指定バージョンのようなもの
	filesystemは気合
	filesystem::fstreamはiostreamとほぼ同じ
	BOOST_FOREACHはforeach
	boost::noncopyableは無視

	Q:いや、BOOSTのせいでコンパイルできないって意味なんだけど
	A:BOOSTは必須ではないので適当に書き直してください。
	もしくはこれを機にboost導入すればいいと思うよ!

	Q:windows.hのIMAGE_DOS_HEADERとかを使っていないのはなぜ?
	A:趣味です。
	移植性がどーたらとかそういう深い意味はありません。a

	Q:転送元の名前にリンクしてるdllなんてないんだけど
	A:api-かext-が転送元dll名の前についたものが正規のdll名のようです。
	apiとextで何がどう違うのかは知りません。

	Q:なんでこんなの調べようと思ったの
	A:LoadLibraryを自作するときに必要になったので

	Q:どうやって調べたの
	A:apisetschema.dllが怪しいってところまでは
	http://ascii.jp/elem/000/000/504/504132/index-2.html
	そこから先はバイナリエディタとにらめっこ

	Q:結局何の役に立つの
	A:知識欲が満たされるんじゃないでしょうか
	もしくはLoadLibraryを自作したい時に役に立ちます。

	Q:その他バグをみつけた or 動作しない or 要望がある
	A:公開しても問題が無いメールアドレスにて
	下部に記載されたアドレスまでメールをどうぞ。

作者:sweetie
メールアドレス:bnryxx332a(あっと)mail.goo.ne.jp


ライセンス:
・本ライセンスにおいて、全ての条項は「変更の有無を問わず、明示暗示を問わず、商業慈善を問わず、個人法人を問わず、保持使用を問わず、有料無料を問わず」と装飾されている物として扱う。
・著作権者は本ソフトウェアに関する一切の保障義務をもたない。
・上記条項唯一の例外として、本ライセンスに違反した場合を除いて著作権者から本ソフトウェアに関する一切の法的措置を受ける事が無い事のみ保証される。
・著作権者やその他保持者がこのライセンスの範囲で行う活動に支障が無い範囲であれば何を行っても構わない。
・上記条項の”何を行っても構わない”には本ソフトウェアの製作者を偽っての再配布も含まれる。
・全ての権利の行使において、著作権者への連絡、著作権者やライセンス条項の記載、適用ライセンスなどの制限は一切存在しない。
著作権者名:sweetie


面倒な人向けライセンス解説:
自由に再配布出来ます、記載義務すらありません。
自分で作ったもののように自由に扱うことができます。


技術情報(と、どうでもいい話):
typeが2の時は既知の別dllへさらに転送という意味なのだが
通常の転送先も普通に指定されていて、最初はそこではまった。
しかも既知だからと文字数情報をもっていないので更にはまった。
最終的には既知のdll名リストを作って、最後にoffsetからdll名に変換する作業をすることに。
たぶんどっかのdllあされば読み込み処理出てきたんだろうけど
調べるのが面倒だったのと、それほど難しい構造じゃなかったので
バイナリエディタとにらめっこするだけで書いた。
なので間違っている可能性はある。
ReadApiSetSchemaってメソッド名はどうかと思う、クラス名とかぶってるじゃん。
最初はoffsetではなくRelativeAddressだった、英語力がないというレベルではない。
utf-16ってstirlingで検索し辛くてたまらない、文字コードを指定して文字列検索機能搭載まだー?
本来ならboostなし、エラー処理なしがサンプルコードとしてあるべき姿だけど
最初の動機がLoadLibrary自作用というバリバリ実用目的だったためこうなった。
実際このコードは自作LoadLibraryのコードから切り出してきたものである。
コンパイル環境はVC++2010コマンドライン版16.00.40219.01。