[CLT2012]
[reactos.git] / dll / win32 / browseui / browseuiord.cpp
1 /*
2 * ReactOS browseui
3 *
4 * Copyright 2009 Andrew Hill <ash77 at domain reactos.org>
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21 #include "precomp.h"
22
23 extern DWORD WINAPI BrowserThreadProc(LPVOID lpThreadParameter);
24
25 /*************************************************************************
26 * InitOCHostClass [BROWSEUI.101]
27 */
28 extern "C" void WINAPI InitOCHostClass(long param8)
29 {
30 // forwards to shdocvw
31 }
32
33 /*************************************************************************
34 * SHOpenFolderWindow [BROWSEUI.102]
35 */
36 extern "C" long WINAPI SHOpenFolderWindow(IEThreadParamBlock *param8)
37 {
38 return 0;
39 }
40
41 /*************************************************************************
42 * SHCreateSavedWindows [BROWSEUI.105]
43 * Called to recreate explorer windows from previous session
44 */
45 extern "C" void WINAPI SHCreateSavedWindows()
46 {
47 }
48
49 /*************************************************************************
50 * SHCreateFromDesktop [BROWSEUI.106]
51 * parameter is a FolderInfo
52 */
53 extern "C" long WINAPI SHCreateFromDesktop(long param8)
54 {
55 return -1;
56 }
57
58 /*************************************************************************
59 * SHExplorerParseCmdLine [BROWSEUI.107]
60 */
61 extern "C" long WINAPI SHExplorerParseCmdLine(LPCTSTR commandLine)
62 {
63 return -1;
64 }
65
66 /*************************************************************************
67 * UEMRegisterNotify [BROWSEUI.118]
68 */
69 extern "C" void WINAPI UEMRegisterNotify(long param8, long paramC)
70 {
71 }
72
73 /*************************************************************************
74 * SHCreateBandForPidl [BROWSEUI.120]
75 */
76 extern "C" HRESULT WINAPI SHCreateBandForPidl(LPCITEMIDLIST param8, IUnknown *paramC, BOOL param10)
77 {
78 return E_NOTIMPL;
79 }
80
81 /*************************************************************************
82 * SHPidlFromDataObject [BROWSEUI.121]
83 */
84 extern "C" HRESULT WINAPI SHPidlFromDataObject(IDataObject *param8, long *paramC, long param10, FILEDESCRIPTORW *param14)
85 {
86 return E_NOTIMPL;
87 }
88
89 /*************************************************************************
90 * IDataObject_GetDeskBandState [BROWSEUI.122]
91 */
92 extern "C" long WINAPI IDataObject_GetDeskBandState(long param8)
93 {
94 return -1;
95 }
96
97 /*************************************************************************
98 * SHCreateIETHREADPARAM [BROWSEUI.123]
99 */
100 extern "C" IEThreadParamBlock *WINAPI SHCreateIETHREADPARAM(long param8, long paramC, IUnknown *param10, IUnknown *param14)
101 {
102 IEThreadParamBlock *result;
103
104 result = (IEThreadParamBlock *)LocalAlloc(LMEM_ZEROINIT, 256);
105 if (result == NULL)
106 return NULL;
107 result->offset0 = param8;
108 result->offset8 = paramC;
109 result->offsetC = param10;
110 if (param10 != NULL)
111 param10->AddRef();
112 result->offset14 = param14;
113 if (param14 != NULL)
114 param14->AddRef();
115 return result;
116 }
117
118 /*************************************************************************
119 * SHCloneIETHREADPARAM [BROWSEUI.124]
120 */
121 extern "C" IEThreadParamBlock *WINAPI SHCloneIETHREADPARAM(IEThreadParamBlock *param)
122 {
123 IEThreadParamBlock *result;
124
125 result = (IEThreadParamBlock *)LocalAlloc(LMEM_FIXED, 256);
126 if (result == NULL)
127 return NULL;
128 memcpy(result, param, 0x40 * 4);
129 if (result->directoryPIDL != NULL)
130 result->directoryPIDL = ILClone(result->directoryPIDL);
131 if (result->offset7C != NULL)
132 result->offset7C = ILClone(result->offset7C);
133 if (result->offset80 != NULL)
134 result->offset80 = ILClone(result->offset80);
135 if (result->offset70 != NULL)
136 result->offset70->AddRef();
137 #if 0
138 if (result->offsetC != NULL)
139 result->offsetC->Method2C();
140 #endif
141 return result;
142 }
143
144 /*************************************************************************
145 * SHParseIECommandLine [BROWSEUI.125]
146 */
147 extern "C" long WINAPI SHParseIECommandLine(long param8, long paramC)
148 {
149 return -1;
150 }
151
152 /*************************************************************************
153 * SHDestroyIETHREADPARAM [BROWSEUI.126]
154 */
155 extern "C" void WINAPI SHDestroyIETHREADPARAM(IEThreadParamBlock *param)
156 {
157 if (param == NULL)
158 return;
159 if (param->directoryPIDL != NULL)
160 ILFree(param->directoryPIDL);
161 if (param->offset7C != NULL)
162 ILFree(param->offset7C);
163 if ((param->offset4 & 0x80000) == 0 && param->offset80 != NULL)
164 ILFree(param->offset80);
165 if (param->offset14 != NULL)
166 param->offset14->Release();
167 if (param->offset70 != NULL)
168 param->offset70->Release();
169 if (param->offset78 != NULL)
170 param->offset78->Release();
171 if (param->offsetC != NULL)
172 param->offsetC->Release();
173 if (param->offsetF8 != NULL)
174 param->offsetF8->Release();
175 LocalFree(param);
176 }
177
178 /*************************************************************************
179 * SHOnCWMCommandLine [BROWSEUI.127]
180 */
181 extern "C" HRESULT WINAPI SHOnCWMCommandLine(long param8)
182 {
183 return E_NOTIMPL;
184 }
185
186 /*************************************************************************
187 * Channel_GetFolderPidl [BROWSEUI.128]
188 */
189 extern "C" LPITEMIDLIST WINAPI Channel_GetFolderPidl()
190 {
191 return NULL;
192 }
193
194 /*************************************************************************
195 * ChannelBand_Create [BROWSEUI.129]
196 */
197 extern "C" IUnknown *WINAPI ChannelBand_Create(LPITEMIDLIST pidl)
198 {
199 return NULL;
200 }
201
202 /*************************************************************************
203 * Channels_SetBandInfoSFB [BROWSEUI.130]
204 */
205 extern "C" HRESULT WINAPI Channels_SetBandInfoSFB(IUnknown *param8)
206 {
207 return E_NOTIMPL;
208 }
209
210 /*************************************************************************
211 * IUnknown_SetBandInfoSFB [BROWSEUI.131]
212 */
213 extern "C" HRESULT WINAPI IUnknown_SetBandInfoSFB(IUnknown *param8, long paramC)
214 {
215 return E_NOTIMPL;
216 }
217
218 /*************************************************************************
219 * Channel_QuickLaunch [BROWSEUI.133]
220 */
221 extern "C" HRESULT WINAPI Channel_QuickLaunch()
222 {
223 return E_NOTIMPL;
224 }
225
226 /*************************************************************************
227 * SHGetNavigateTarget [BROWSEUI.134]
228 */
229 extern "C" HRESULT WINAPI SHGetNavigateTarget(long param8, long paramC, long param10, long param14)
230 {
231 return E_NOTIMPL;
232 }
233
234 /*************************************************************************
235 * GetInfoTip [BROWSEUI.135]
236 */
237 extern "C" HRESULT WINAPI GetInfoTip(IUnknown *param8, long paramC, LPTSTR *param10, long cchMax)
238 {
239 return E_NOTIMPL;
240 }
241
242 /*************************************************************************
243 * SHEnumClassesOfCategories [BROWSEUI.136]
244 */
245 extern "C" HRESULT WINAPI SHEnumClassesOfCategories(long param8, long paramC, long param10, long param14, long param18)
246 {
247 return E_NOTIMPL;
248 }
249
250 /*************************************************************************
251 * SHWriteClassesOfCategories [BROWSEUI.137]
252 */
253 extern "C" HRESULT WINAPI SHWriteClassesOfCategories(long param8, long paramC, long param10, long param14, long param18, long param1C, long param20)
254 {
255 return E_NOTIMPL;
256 }
257
258 /*************************************************************************
259 * SHIsExplorerBrowser [BROWSEUI.138]
260 */
261 extern "C" BOOL WINAPI SHIsExplorerBrowser()
262 {
263 return TRUE;
264 }
265
266 // 75FA56C1h
267 // (pidl, 0, -1, 1)
268 // this function should handle creating a new process if needed, but I'm leaving that out for now
269 // this function always opens a new window - it does NOT check for duplicates
270 /*************************************************************************
271 * SHOpenNewFrame [BROWSEUI.103]
272 */
273 extern "C" HRESULT WINAPI SHOpenNewFrame(LPITEMIDLIST pidl, IUnknown *paramC, long param10, long param14)
274 {
275 IEThreadParamBlock *parameters;
276 HANDLE threadHandle;
277 DWORD threadID;
278
279 parameters = SHCreateIETHREADPARAM(0, 1, paramC, NULL);
280 if (parameters == NULL)
281 {
282 ILFree(pidl);
283 return E_OUTOFMEMORY;
284 }
285 if (paramC != NULL)
286 parameters->offset10 = param10;
287 parameters->directoryPIDL = pidl;
288 parameters->offset4 = param14;
289 threadHandle = CreateThread(NULL, 0x10000, BrowserThreadProc, parameters, 0, &threadID);
290 if (threadHandle != NULL)
291 {
292 CloseHandle(threadHandle);
293 return S_OK;
294 }
295 SHDestroyIETHREADPARAM(parameters);
296 return E_FAIL;
297 }