Windows XP の SHELL32.DLL の 744と 745 について

744

__interface  INTERFACE_UUID("{EC6FE84F-DC14-4FBB-889F-EA50FE27FE0F}") IUIElement  : public System::IInterface
{
    virtual HRESULT __stdcall get_Name(_di_IShellItemArray pItemArray, System::WideChar * &bstrName) = 0 ;
    virtual HRESULT __stdcall get_Icon(_di_IShellItemArray pItemArray, System::WideChar * &bstrName) = 0 ;
    virtual HRESULT __stdcall get_Tooltip(_di_IShellItemArray pItemArray, System::WideChar * &bstrName) = 0 ;
};

あたりの処理を行ってる模様
システムトレイのアイコンやツールチップ周りの処理かな ・ω・

745
SHELL32.DLLのベースアドレスになってる。謎い
Windows 7 をみたら、SHUNIMPL.DLL と言う謎の関数にリンクしてた。
恐らく、 SHELL UNIMPLEMENTED の略で未実装関数なんだと思う。

わざわざここを参照するプログラムがあるのは何なんだろう・ω・

同様に未実装の奴が
681
685
686
691-698
704
705
709
716
717
727
728
733
734
735
736
737
738
740
741
745

なんだけど、先日リリースされた、XP向けの zipfldr.dll の中身にこんな記述がある

 SUB_L732DE59D:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          mov    ecx,[ebp+0Ch]
          push    edi
          xor    eax,eax
          mov    edi,ecx
          stosd
          stosd
          stosd
          add    ecx,00000008h
          stosd
          push    ecx
          push    L732D1F94
          stosd
          call    jmp_SHELL32.dll!SHELL32.745
          xor    eax,eax
          pop    edi
          pop    ebp
          retn    0008h

これ、特定処理実行するとクラッシュすると思うんだけどどうしてこうなった?・ω・

なお、lzhfldr.dll (5.0.2600.7) ではこの問題はない

追記:調査に誤りがあったので修正
Windows XP の SHELL32.DLL の 744と 745 について その2

おすすめ

コメントを残す

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