fork
Configure Feed
Select the types of activity you want to include in your feed.
Reactos
fork
Configure Feed
Select the types of activity you want to include in your feed.
1/*
2 * Internet Explorer wrapper
3 *
4 * Copyright 2006 Mike McCormack
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#include <windows.h>
22#include <advpub.h>
23#include <ole2.h>
24#include <rpcproxy.h>
25
26#include "wine/unicode.h"
27#include "wine/debug.h"
28
29extern DWORD WINAPI IEWinMain(const WCHAR*, int);
30
31static BOOL check_native_ie(void)
32{
33 DWORD handle, size;
34 LPWSTR file_desc;
35 UINT bytes;
36 void* buf;
37 BOOL ret = TRUE;
38 LPWORD translation;
39
40 static const WCHAR browseui_dllW[] = {'b','r','o','w','s','e','u','i','.','d','l','l',0};
41 static const WCHAR wineW[] = {'W','i','n','e',0};
42 static const WCHAR translationW[] =
43 {'\\','V','a','r','F','i','l','e','I','n','f','o',
44 '\\','T','r','a','n','s','l','a','t','i','o','n',0};
45 static const WCHAR file_desc_fmtW[] =
46 {'\\','S','t','r','i','n','g','F','i','l','e','I','n','f','o',
47 '\\','%','0','4','x','%','0','4','x',
48 '\\','F','i','l','e','D','e','s','c','r','i','p','t','i','o','n',0};
49 WCHAR file_desc_strW[48];
50
51 size = GetFileVersionInfoSizeW(browseui_dllW, &handle);
52 if(!size)
53 return TRUE;
54
55 buf = HeapAlloc(GetProcessHeap(), 0, size);
56 GetFileVersionInfoW(browseui_dllW, 0, size,buf);
57 if (VerQueryValueW(buf, translationW, (void **)&translation, &bytes))
58 {
59 wsprintfW(file_desc_strW, file_desc_fmtW, translation[0], translation[1]);
60 ret = !VerQueryValueW(buf, file_desc_strW, (void**)&file_desc, &bytes) || !strstrW(file_desc, wineW);
61 }
62
63 HeapFree(GetProcessHeap(), 0, buf);
64 return ret;
65}
66
67static DWORD register_iexplore(BOOL doregister)
68{
69 HRESULT hres;
70
71 if (check_native_ie()) {
72 WINE_MESSAGE("Native IE detected, not doing registration\n");
73 return 0;
74 }
75
76 hres = RegInstallA(NULL, doregister ? "RegisterIE" : "UnregisterIE", NULL);
77 return FAILED(hres);
78}
79
80int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE prev, WCHAR *cmdline, int show)
81{
82 static const WCHAR regserverW[] = {'r','e','g','s','e','r','v','e','r',0};
83 static const WCHAR unregserverW[] = {'u','n','r','e','g','s','e','r','v','e','r',0};
84
85 if(*cmdline == '-' || *cmdline == '/') {
86 if(!strcmpiW(cmdline+1, regserverW))
87 return register_iexplore(TRUE);
88 if(!strcmpiW(cmdline+1, unregserverW))
89 return register_iexplore(FALSE);
90 }
91
92 return IEWinMain(cmdline, show);
93}