LdrResSearchResource を解析してみた

Windows Vista 以降の ntdll にある関数LdrResSearchResource を解析してみました

関数の仕様
NTSTATUS LdrResSearchResource(HINSANCE hDllBase, DWORD sizeTYPE, DWORD []Resource_TYPE, DWORD unknown, DWORD *resAdr, DWORD *resSize, wchar_t *resFolder, DWORD *resFolSize);

hDllBase 対象のファイルのbaseアドレス

sizeTYPE
後述のリソースタイプの配列の大きさ

Resource_TYPE
スキャンするリソースのタイプを配列で格納
大概、{RT_MANIFEST, CREATEPROCESS_MANIFEST_RESOURCE_ID, 0}が格納されてる

unknown
0だったり、0x1100だったり 0x1108が格納されてる
FILE_VER_GET_LOCALISED の場合は 0x1108だった

resAdr
ロードしたリソースの格納アドレス

resFolder
リソースの言語ローケルで格納すべき MUIフォルダ。
そこにリソースがあるとは限らない。NULLでもOK

resFolSize
リソースフォルダを格納するのに必要なwchar_t のサイズ。NULLでもOK

返り値
0 成功

0xC0000005 STATUS_ACCESS_VIOLATION 用意した返り値のアドレスが不正
0xC0000023 STATUS_BUFFER_TOO_SMALL バッファーが小さすぎ
0xC0000089 STATUS_RESOURCE_DATA_NOT_FOUND リソースが見つからない
0xC000008A STATUS_RESOURCE_TYPE_NOT_FOUND リソースタイプが見つからない
0xC000008B STATUS_RESOURCE_NAME_NOT_FOUND リソース名が見つからない

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です