2015年10月30日金曜日

HKCU\Software\Microsoft\Internet Explorer\LowRegistry\IEShims\NormalizedPaths

Internet Explorer に関する整合性レベル低についての情報を探していました。


どうもこのレジストリが当たりのようです。

どのような整合性レベルが設定されているのか、検証:

C:\Users\ku_000\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low>icacls .
. NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
  BUILTIN\Administrators:(I)(OI)(CI)(F)
  DD36\ku_000:(I)(OI)(CI)(F)
  Mandatory Label\Low Mandatory Level:(OI)(CI)(NW)

C:\Users\ku_000\AppData\Local\Microsoft\Windows\Temporary Internet Files\Virtualized>icacls .
. NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
  BUILTIN\Administrators:(I)(OI)(CI)(F)
  DD36\ku_000:(I)(OI)(CI)(F)
  Mandatory Label\Low Mandatory Level:(OI)(CI)(NW)

C:\Users\ku_000\AppData\Local\Microsoft\Windows\Temporary Internet Files → [C:\Users\ku_000\AppData\Local\Microsoft\Windows\INetCache]

C:\Users\ku_000\AppData\Local\Temp\Low>icacls .
. NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
  BUILTIN\Administrators:(I)(OI)(CI)(F)
  DD36\ku_000:(I)(OI)(CI)(F)
  Mandatory Label\Low Mandatory Level:(OI)(CI)(NW)

C:\Users\ku_000\AppData\LocalLow>icacls .
. NT AUTHORITY\SYSTEM:(OI)(CI)(F)
  BUILTIN\Administrators:(OI)(CI)(F)
  DD36\ku_000:(OI)(CI)(F)
  Mandatory Label\Low Mandatory Level:(OI)(CI)(NW)


今日この件が、ダウンロードアンダーバー問題と関係が有るのではないかと、ふと思い、調査に着手しました。

2015年10月16日金曜日

IDownloadManager の実装意義

Internet Explorer や WebBrowser コントロールには、ファイルのダウンロードをカスタマイズする機構が備わっているようです。

IDownloadManager interface
https://msdn.microsoft.com/en-us/library/aa753613(v=vs.85).aspx

インターフェイスの定義の方は、次のようになっています。

    MIDL_INTERFACE("988934A4-064B-11D3-BB80-00104B35E7F9")
    IDownloadManager : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Download( 
            /* [in] */ IMoniker *pmk,
            /* [in] */ IBindCtx *pbc,
            /* [in] */ DWORD dwBindVerb,
            /* [in] */ LONG grfBINDF,
            /* [in] */ BINDINFO *pBindInfo,
            /* [in] */ LPCOLESTR pszHeaders,
            /* [in] */ LPCOLESTR pszRedir,
            /* [in] */ UINT uiCP) = 0;
        
    };

要は GET や POST でダウンロードが必要な場合に



確認を求めてくる、あの画面です。

通常 Download が呼び出されますが。横取りされて、Download が履行されないケースも確認しています:

  • PDFファイルが、Adobe Acrobat Reader 等でインライン表示される場合。
  • テキスト形式に見えるファイルが、インライン表示される場合。

Download に渡ってくる引数につきまして:

  • pmk 以外は、ほとんど NULL。当てにできません。
  • POST の場合は、GET と同じ要領で来ます。判別する明確な方法は見つかっていません。


こういう物を見つけました。

IE custom download manager (CSIEDownloadManager)
https://code.msdn.microsoft.com/windowsdesktop/CSIEDownloadManager-8ab5d910

ビルドしたサンプルを参考までにお配りしています。

Setup_CSIEDownloadManager.exe
https://drive.google.com/file/d/0Bygl-em20CSKcEhKZFYxdVZUemM/view?usp=sharing

Windows 8.1 の IE11 でも動きましたので、IDownloadManager は未だ有効のようです。



2015年9月28日月曜日

mingw-g++ でスタティックリンクしたいんです

gcc ではなく、g++ でないといけなかったんです。

$ g++ b.cpp

$ od a.exe
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll
        DLL Name: libgcc_s_dw2-1.dll
        DLL Name: libstdc++-6.dll

od は、bash で  function od() { objdump -p $1 | grep "DLL Name"; }

いくつか mingw 由来と思われる DLL への参照が有ります。

$ g++ b.cpp -static

ビルドは通りました。

$ od a.exe
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll

おお。結果は満足するものになりました。

mingw-gcc (C言語) でスタティックリンクをしたい

例えば、libpng をスタティックリンクしたいんで。

$ gcc a.c
C:\msys32\tmp\ccUYzSGl.o:a.c:(.text+0x2a): undefined reference to `png_init_io'
collect2.exe: error: ld returned 1 exit status

-lpng が必要。

$ gcc a.c -lpng

ビルドは通りました。

$ od a.exe
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll
        DLL Name: libpng16-16.dll


od は、bash で  function od() { objdump -p $1 | grep "DLL Name"; }

libpng16-16.dll への参照が発生しました。これではダイナミックリンクになり、多数のファイルの配布が必要になってしまいます。

$ gcc -lpng a.c
C:\msys32\tmp\ccoKX062.o:a.c:(.text+0x2a): undefined reference to `png_init_io'
collect2.exe: error: ld returned 1 exit status

a.c の前につけたらダメですか。

$ gcc a.c -lpng -static
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x139b): undefined reference to `crc32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x13ee): undefined reference to `crc32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x2725): undefined reference to `adler32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x2739): undefined reference to `adler32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x2766): undefined reference to `crc32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x277a): undefined reference to `crc32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x1c62): undefined reference to `inflateReset'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngread.o):(.text+0x4b78): undefined reference to `inflateEnd'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x2fd): undefined reference to `inflateReset2'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x332): undefined reference to `inflateInit2_'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x4e8): undefined reference to `inflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x68a): undefined reference to `inflateReset'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0xab7): undefined reference to `inflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x49f8): undefined reference to `inflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x4ab6): undefined reference to `inflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x5486): undefined reference to `inflateReset'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwrite.o):(.text+0x1aba): undefined reference to `deflateEnd'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0x61a): undefined reference to `deflateInit2_'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0x662): undefined reference to `deflateEnd'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0x6f2): undefined reference to `deflateReset'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0xba5): undefined reference to `deflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0x2d7b): undefined reference to `deflate'
collect2.exe: error: ld returned 1 exit status

zlib が必要だそうです。

$ gcc a.c -lpng -lz -static

ビルドは通りました。

$ od a.exe
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll


スタティックリンクになりました。

$ gcc a.c -lpng -static -lz
$ gcc a.c -static -lpng -lz
$ gcc -static a.c -lpng -lz

-static の順序に関係なく、スタティックリンクになりました。

しかしこれで満足していません。追加で調査が必要です。。。

2015年9月19日土曜日

2015年9月9日水曜日

Cygwinでpopplerをビルド

autoreconf を実施する度にエラーが発生致します。先に必要なパッケージを準備致します。

pkgconfig
gettext
libtool
libfontconfig-devel
libjpeg-devel
libtiff-devel
libopenjpeg-devel
libcurl-devel

libtoolize 実行

./configure --enable-zlib --enable-libcurl --prefix=$HOME/poppler

export LANG=C

make