『~.exe は有効な Win32 アプリケーションではありません』がでる仕組み
Windows で 使ってるOSより高いバージョンのサブシステム向けに作られたアプリケーションを起動しようとすると、
『~.exe は有効な Win32 アプリケーションではありません』というエラーがでてきます。
これを回避するために、fcwinでヘッダ情報を書き換えたりするわけですが、実際どこでこの処理が行われているか、今まで不明でした。
解析してみたところ、kernel32.dll の CreateProcessInternalW に該当するコードがありました。
SUB_L77E74987: mov ecx,[esp+04h] cmp ecx,00000003h // <- Windows 3未満はエラーにする jc L77E749B3 mov edx,[esp+08h] jnz L77E7499B cmp edx,0000000Ah // <- Windows 3.10未満はエラーにする jc L77E749B3 L77E7499B: mov eax,[7FFE026Ch] // <- OS バージョン上位をロード cmp ecx,eax ja L77E749B3 // 多きければエラー jnz L77E749AE // 小さければOK cmp edx,[7FFE0270h] // <- OS バージョン下位をロード ja L77E749B3 // 大きければエラー L77E749AE: push 00000001h pop eax jmp L77E749B5 L77E749B3: xor eax,eax L77E749B5: retn 0008h |
ちなみに
0x7FFE026CはOSバージョン上位
0x7FFE0270はOSバージョン下位
ですが、
0x7ffdf0a4 はエミュレーションOSバージョン上位
0x7ffdf0a8 はエミュレーションOSバージョン下位
0x7ffdf0ac はエミュレーションOSBuild バージョン
0x7ffdf0ae はエミュレーションOS SPバージョン
になります。
jnz L77E7499B を jnz L77E749AE に書き換えてみたところ、Subsystemバージョンが 6.0でも実行できる Windows 2000になりました。
Windows XPやVistaなども基本的に同じ仕組みのようです。
「jnz L77E7499B を jnz L77E749AE に書き換えてみたところ、」とありますが、何のソフトを使って書き換えたらいいのでしょうか?kdw095の中のfcwin2k.exeなのでしょうか? 書き換えるkernel32.dllはシステムドライブの「WINNT\system32」のやつでいいですよね?
「jnz L77E7499B を jnz L77E749AE に書き換えてみたところ、」とありますが、何のソフトを使って書き換えたらいいのでしょうか?kdw095の中のfcwin2k.exeなのでしょうか? 書き換えるkernel32.dllはシステムドライブの「WINNT\system32」のやつでいいですよね?
バイナリエディタで書き換えるのですが書き換えたものを EX Kernel v3として公開してるので通常は自分で書き換える必要はありません。
バイナリエディタで書き換えるのですが書き換えたものを EX Kernel v3として公開してるので通常は自分で書き換える必要はありません。
Windows2000のkernel32改造フリーがあるようなのですが
XPのものはないのでしょうか?
専門用語が行きかう中
無知なものでどうも話が分からなくて・・・
自分じゃどうも分からないので、恐れながら黒翼猫に是非見て頂きたいです>< えー。一応なので今の状況を。 WindowsXPを使っております。 先日、Skypeをダウンロードしようと思ったところ Failed to get proc address for SetDllDirectoryW(kernel32.dll) というメッセージが出てきてしまいました・・・。 各サイト様で改善方法が書かれているのですが、イマイチ上手くいきません。 お手隙でしたら、是非答えていただきたいです。 では乱文失礼致しました。
Windows2000のkernel32改造フリーがあるようなのですが
XPのものはないのでしょうか?
専門用語が行きかう中
無知なものでどうも話が分からなくて・・・
自分じゃどうも分からないので、恐れながら黒翼猫に是非見て頂きたいです>< えー。一応なので今の状況を。 WindowsXPを使っております。 先日、Skypeをダウンロードしようと思ったところ Failed to get proc address for SetDllDirectoryW(kernel32.dll) というメッセージが出てきてしまいました・・・。 各サイト様で改善方法が書かれているのですが、イマイチ上手くいきません。 お手隙でしたら、是非答えていただきたいです。 では乱文失礼致しました。
取りあえず、フォルダ %systemRoot%\system32 の中の kernel32.dll のバージョンを確認してみてください。
5.1.2600.2180(XP SP2) 以前のものだと エラーになると思います
それとも、XP SP1や無印環境で実行したいという話でしょうか?
取りあえず、フォルダ %systemRoot%\system32 の中の kernel32.dll のバージョンを確認してみてください。
5.1.2600.2180(XP SP2) 以前のものだと エラーになると思います
それとも、XP SP1や無印環境で実行したいという話でしょうか?
はじめまして。
「EX Kernel v3」を公開しているとありますが、
どこで公開してますでしょうか?
現在、改造版が「~.exe は有効な Win32 アプリケーションではありません」のエラーになってしまいます。
はじめまして。
「EX Kernel v3」を公開しているとありますが、
どこで公開してますでしょうか?
現在、改造版が「~.exe は有効な Win32 アプリケーションではありません」のエラーになってしまいます。
サイドバーからのリンクから飛べます。
今は最新版が 拡張カーネル v24c2 (v.2.4c2) になっています。
目的にあったバージョンを導入してみてください。
サイドバーからのリンクから飛べます。
今は最新版が 拡張カーネル v24c2 (v.2.4c2) になっています。
目的にあったバージョンを導入してみてください。
How rewrite CreateProcessW on NT4?
How rewrite CreateProcessW on NT4?