他人の空似自作物置場

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

プログラム名:ReadApiSetSchema

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


使い方:
・単に起動するだけでその環境のapisetschema.dllを読み込んで転送一覧が表示されます
・ファイルとしてapisetschema.dllをD&Dしても動作します

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

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

ファイル解説:
ReadApiSetSchema.exe       プログラム本体です。
Readme.txt                 今読んでいるこれ。
History.txt                更新履歴です。
main.cpp                   ソースコードです。
ReadApiSetSchema.sln       VisualStudioのプロジェクトファイルです。
ReadAPiSetSchema.vcxproj   VisualStudioのプロジェクトファイルです。
7601(Windows7 SP1)         Windows7 SP1での出力例です。
9600(Windows8.1)           Windows8.1での出力例です。
7601(Windows10 1903)       Windows10 1903での出力例です。


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

	Q:BOOSTわかんない
	A:endianはstdint.hのエンディアン指定バージョンのようなもの
	boost::noncopyableは無視

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

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

	Q:転送元の名前にリンクしてるdllなんてないんだけど
	A:仮想的な.dllなので実ファイルは存在しないことが多いです。

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

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

	Q:結局何の役に立つの
	A:API Setsの仕組みを理解するのに役立ちます。
   実用上はAPI Setsの使用可否判定(OneCore.lib系含む)など。

	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のコードから切り出してきたものである。
----ここから2019年----
API Setsが実用度上がってきたのとOneCore.libの解析などで不便だったので更新
Windows8.1とWindows10 1903に対応した。
スキーマバージョン的にWindows8と古いWindows10にも別フォーマットがいそう。
だが現物が手に入らなかったので対応作業は保留、誰かapisetschema.dllだけくれ
一応実装から時間がたったため似たようなことをしている人はいっぱいいるが
別に大したことはやってなかろうとの判断により独自実装。

        

2019/10/20 ver2.00
Windows8.1とWindows10 1903搭載のフォーマットに対応

2013/02/02 ver1.00
初版リリース