Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenadmintools.cpp
Go to the documentation of this file.
00001 /* 00002 * Virtual Admin Tools Folder 00003 * 00004 * Copyright 2008 Johannes Anderwald 00005 * Copyright 2009 Andrew Hill 00006 * 00007 * This library is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2.1 of the License, or (at your option) any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with this library; if not, write to the Free Software 00019 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00020 */ 00021 00022 #include <precomp.h> 00023 00024 WINE_DEFAULT_DEBUG_CHANNEL (shell); 00025 00026 00027 /* 00028 This folder should not exist. It is just a file system folder... 00029 */ 00030 00031 /* List shortcuts of 00032 * CSIDL_COMMON_ADMINTOOLS 00033 * Note: CSIDL_ADMINTOOLS is ignored, tested with Window XP SP3+ 00034 */ 00035 00036 /*********************************************************************** 00037 * AdminTools folder implementation 00038 */ 00039 00040 class CDesktopFolderEnumY : 00041 public IEnumIDListImpl 00042 { 00043 private: 00044 public: 00045 CDesktopFolderEnumY(); 00046 ~CDesktopFolderEnumY(); 00047 HRESULT WINAPI Initialize(LPWSTR szTarget, DWORD dwFlags); 00048 00049 BEGIN_COM_MAP(CDesktopFolderEnumY) 00050 COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) 00051 END_COM_MAP() 00052 }; 00053 00054 static const shvheader AdminToolsSFHeader[] = { 00055 {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, 00056 {IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, 00057 {IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, 00058 {IDS_SHV_COLUMN4, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 12} 00059 }; 00060 00061 #define COLUMN_NAME 0 00062 #define COLUMN_SIZE 1 00063 #define COLUMN_TYPE 2 00064 #define COLUMN_DATE 3 00065 00066 #define AdminToolsHELLVIEWCOLUMNS (4) 00067 00068 CDesktopFolderEnumY::CDesktopFolderEnumY() 00069 { 00070 } 00071 00072 CDesktopFolderEnumY::~CDesktopFolderEnumY() 00073 { 00074 } 00075 00076 HRESULT WINAPI CDesktopFolderEnumY::Initialize(LPWSTR szTarget, DWORD dwFlags) 00077 { 00078 TRACE("(%p)->(flags=0x%08x)\n", this, dwFlags); 00079 /* enumerate the elements in %windir%\desktop */ 00080 return CreateFolderEnumList(szTarget, dwFlags); 00081 } 00082 00083 CAdminToolsFolder::CAdminToolsFolder() 00084 { 00085 pclsid = NULL; 00086 00087 pidlRoot = NULL; /* absolute pidl */ 00088 szTarget = NULL; 00089 00090 dwAttributes = 0; /* attributes returned by GetAttributesOf FIXME: use it */ 00091 } 00092 00093 CAdminToolsFolder::~CAdminToolsFolder() 00094 { 00095 TRACE ("-- destroying IShellFolder(%p)\n", this); 00096 if (pidlRoot) 00097 SHFree(pidlRoot); 00098 HeapFree(GetProcessHeap(), 0, szTarget); 00099 } 00100 00101 HRESULT WINAPI CAdminToolsFolder::FinalConstruct() 00102 { 00103 szTarget = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR)); 00104 if (szTarget == NULL) 00105 return E_OUTOFMEMORY; 00106 if (!SHGetSpecialFolderPathW(NULL, szTarget, CSIDL_COMMON_ADMINTOOLS, FALSE)) 00107 return E_FAIL; 00108 00109 pidlRoot = _ILCreateAdminTools(); /* my qualified pidl */ 00110 if (pidlRoot == NULL) 00111 return E_OUTOFMEMORY; 00112 return S_OK; 00113 } 00114 00115 /************************************************************************** 00116 * CAdminToolsFolder::ParseDisplayName 00117 * 00118 */ 00119 HRESULT WINAPI CAdminToolsFolder::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, 00120 DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes) 00121 { 00122 TRACE("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", 00123 this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName), 00124 pchEaten, ppidl, pdwAttributes); 00125 00126 *ppidl = 0; 00127 if (pchEaten) 00128 *pchEaten = 0; 00129 00130 MessageBoxW(NULL, lpszDisplayName, L"ParseDisplayName", MB_OK); 00131 00132 return E_NOTIMPL; 00133 } 00134 00135 /************************************************************************** 00136 * CAdminToolsFolder::EnumObjects 00137 */ 00138 HRESULT WINAPI CAdminToolsFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) 00139 { 00140 CComObject<CDesktopFolderEnumY> *theEnumerator; 00141 CComPtr<IEnumIDList> result; 00142 HRESULT hResult; 00143 00144 TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this, hwndOwner, dwFlags, ppEnumIDList); 00145 00146 if (ppEnumIDList == NULL) 00147 return E_POINTER; 00148 *ppEnumIDList = NULL; 00149 ATLTRY (theEnumerator = new CComObject<CDesktopFolderEnumY>); 00150 if (theEnumerator == NULL) 00151 return E_OUTOFMEMORY; 00152 hResult = theEnumerator->QueryInterface (IID_IEnumIDList, (void **)&result); 00153 if (FAILED (hResult)) 00154 { 00155 delete theEnumerator; 00156 return hResult; 00157 } 00158 hResult = theEnumerator->Initialize (szTarget, dwFlags); 00159 if (FAILED (hResult)) 00160 return hResult; 00161 *ppEnumIDList = result.Detach (); 00162 00163 TRACE ("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList); 00164 00165 return S_OK; 00166 } 00167 00168 /************************************************************************** 00169 * CAdminToolsFolder::BindToObject 00170 */ 00171 HRESULT WINAPI CAdminToolsFolder::BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) 00172 { 00173 TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", this, 00174 pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); 00175 00176 return SHELL32_BindToChild(pidlRoot, NULL, pidl, riid, ppvOut); 00177 } 00178 00179 /************************************************************************** 00180 * CAdminToolsFolder::BindToStorage 00181 */ 00182 HRESULT WINAPI CAdminToolsFolder::BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) 00183 { 00184 FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", 00185 this, pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut); 00186 00187 *ppvOut = NULL; 00188 return E_NOTIMPL; 00189 } 00190 00191 /************************************************************************** 00192 * CAdminToolsFolder::CompareIDs 00193 */ 00194 HRESULT WINAPI CAdminToolsFolder::CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) 00195 { 00196 int nReturn; 00197 00198 TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", this, lParam, pidl1, pidl2); 00199 nReturn = SHELL32_CompareIDs (this, lParam, pidl1, pidl2); 00200 TRACE ("-- %i\n", nReturn); 00201 return nReturn; 00202 } 00203 00204 /************************************************************************** 00205 * CAdminToolsFolder::CreateViewObject 00206 */ 00207 HRESULT WINAPI CAdminToolsFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) 00208 { 00209 CComPtr<IShellView> pShellView; 00210 HRESULT hr = E_INVALIDARG; 00211 00212 TRACE ("(%p)->(hwnd=%p,%s,%p)\n", this, 00213 hwndOwner, shdebugstr_guid (&riid), ppvOut); 00214 00215 if (!ppvOut) 00216 return hr; 00217 00218 *ppvOut = NULL; 00219 00220 if (IsEqualIID (riid, IID_IDropTarget)) 00221 { 00222 WARN ("IDropTarget not implemented\n"); 00223 hr = E_NOTIMPL; 00224 } 00225 else if (IsEqualIID (riid, IID_IShellView)) 00226 { 00227 hr = IShellView_Constructor ((IShellFolder *)this, &pShellView); 00228 if (pShellView) 00229 hr = pShellView->QueryInterface(riid, ppvOut); 00230 } 00231 TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut); 00232 return hr; 00233 } 00234 00235 /************************************************************************** 00236 * ISF_AdminTools_fnGetAttributesOf 00237 */ 00238 HRESULT WINAPI CAdminToolsFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut) 00239 { 00240 HRESULT hr = S_OK; 00241 static const DWORD dwAdminToolsAttributes = 00242 SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | 00243 SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM; 00244 00245 TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", 00246 this, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0); 00247 00248 if (!rgfInOut) 00249 return E_INVALIDARG; 00250 if (cidl && !apidl) 00251 return E_INVALIDARG; 00252 00253 if (*rgfInOut == 0) 00254 *rgfInOut = ~0; 00255 00256 if(cidl == 0) { 00257 *rgfInOut &= dwAdminToolsAttributes; 00258 } else { 00259 while (cidl > 0 && *apidl) { 00260 pdump (*apidl); 00261 if (_ILIsAdminTools(*apidl)) { 00262 *rgfInOut &= dwAdminToolsAttributes; 00263 } else { 00264 SHELL32_GetItemAttributes (this, *apidl, rgfInOut); 00265 } 00266 apidl++; 00267 cidl--; 00268 } 00269 } 00270 /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */ 00271 *rgfInOut &= ~SFGAO_VALIDATE; 00272 00273 TRACE ("-- result=0x%08x\n", *rgfInOut); 00274 00275 return hr; 00276 } 00277 00278 /************************************************************************** 00279 * CAdminToolsFolder::GetUIObjectOf 00280 * 00281 * PARAMETERS 00282 * HWND hwndOwner, //[in ] Parent window for any output 00283 * UINT cidl, //[in ] array size 00284 * LPCITEMIDLIST* apidl, //[in ] simple pidl array 00285 * REFIID riid, //[in ] Requested Interface 00286 * UINT* prgfInOut, //[ ] reserved 00287 * LPVOID* ppvObject) //[out] Resulting Interface 00288 * 00289 */ 00290 HRESULT WINAPI CAdminToolsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, 00291 REFIID riid, UINT * prgfInOut, LPVOID * ppvOut) 00292 { 00293 LPITEMIDLIST pidl; 00294 CComPtr<IUnknown> pObj; 00295 HRESULT hr = E_INVALIDARG; 00296 00297 TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", 00298 this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut); 00299 00300 if (!ppvOut) 00301 return hr; 00302 00303 *ppvOut = NULL; 00304 00305 if (IsEqualIID (riid, IID_IContextMenu)) 00306 { 00307 hr = CDefFolderMenu_Create2(pidlRoot, hwndOwner, cidl, apidl, (IShellFolder *)this, NULL, 0, NULL, (IContextMenu **)&pObj); 00308 } 00309 else if (IsEqualIID (riid, IID_IDataObject) && (cidl >= 1)) 00310 { 00311 hr = IDataObject_Constructor(hwndOwner, pidlRoot, apidl, cidl, (IDataObject **)&pObj); 00312 } 00313 else if (IsEqualIID (riid, IID_IExtractIconA) && (cidl == 1)) 00314 { 00315 pidl = ILCombine (pidlRoot, apidl[0]); 00316 pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); 00317 SHFree (pidl); 00318 hr = S_OK; 00319 } 00320 else if (IsEqualIID (riid, IID_IExtractIconW) && (cidl == 1)) 00321 { 00322 pidl = ILCombine (pidlRoot, apidl[0]); 00323 pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); 00324 SHFree (pidl); 00325 hr = S_OK; 00326 } 00327 else if (IsEqualIID (riid, IID_IDropTarget) && (cidl >= 1)) 00328 { 00329 hr = this->QueryInterface(IID_IDropTarget, (LPVOID *)&pObj); 00330 } 00331 else if ((IsEqualIID(riid, IID_IShellLinkW) || 00332 IsEqualIID(riid, IID_IShellLinkA)) && (cidl == 1)) 00333 { 00334 pidl = ILCombine (pidlRoot, apidl[0]); 00335 hr = IShellLink_ConstructFromFile(NULL, riid, pidl, (LPVOID*)&pObj); 00336 SHFree (pidl); 00337 } 00338 else 00339 hr = E_NOINTERFACE; 00340 00341 if (SUCCEEDED(hr) && !pObj) 00342 hr = E_OUTOFMEMORY; 00343 00344 *ppvOut = pObj.Detach(); 00345 TRACE ("(%p)->hr=0x%08x\n", this, hr); 00346 return hr; 00347 } 00348 00349 /************************************************************************** 00350 * CAdminToolsFolder::GetDisplayNameOf 00351 * 00352 */ 00353 HRESULT WINAPI CAdminToolsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) 00354 { 00355 HRESULT hr = S_OK; 00356 LPWSTR pszPath, pOffset; 00357 00358 TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet); 00359 pdump (pidl); 00360 00361 if (!strRet) 00362 return E_INVALIDARG; 00363 00364 pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH + 1) * sizeof(WCHAR)); 00365 if (!pszPath) 00366 return E_OUTOFMEMORY; 00367 00368 ZeroMemory(pszPath, (MAX_PATH + 1) * sizeof(WCHAR)); 00369 00370 if (!pidl->mkid.cb) 00371 { 00372 if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) && 00373 (GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING)) 00374 wcscpy(pszPath, szTarget); 00375 else if (!HCR_GetClassNameW(CLSID_AdminFolderShortcut, pszPath, MAX_PATH)) 00376 hr = E_FAIL; 00377 } 00378 else if (_ILIsPidlSimple(pidl)) 00379 { 00380 if ((GET_SHGDN_FOR(dwFlags) & SHGDN_FORPARSING) && 00381 (GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER) && 00382 szTarget) 00383 { 00384 wcscpy(pszPath, szTarget); 00385 pOffset = PathAddBackslashW(pszPath); 00386 if (pOffset) 00387 { 00388 if (!_ILSimpleGetTextW(pidl, pOffset, MAX_PATH + 1 - (pOffset - pszPath))) 00389 hr = E_FAIL; 00390 } 00391 else 00392 hr = E_FAIL; 00393 } 00394 else 00395 { 00396 if (_ILSimpleGetTextW(pidl, pszPath, MAX_PATH + 1)) 00397 { 00398 if (SHELL_FS_HideExtension(pszPath)) 00399 PathRemoveExtensionW(pszPath); 00400 } 00401 else 00402 hr = E_FAIL; 00403 } 00404 } 00405 else if (_ILIsSpecialFolder(pidl)) 00406 { 00407 BOOL bSimplePidl = _ILIsPidlSimple(pidl); 00408 00409 if (bSimplePidl) 00410 { 00411 if (!_ILSimpleGetTextW(pidl, pszPath, MAX_PATH)) 00412 hr = E_FAIL; 00413 } 00414 else if ((dwFlags & SHGDN_FORPARSING) && !bSimplePidl) 00415 { 00416 int len = 0; 00417 00418 wcscpy(pszPath, szTarget); 00419 PathAddBackslashW(pszPath); 00420 len = wcslen(pszPath); 00421 00422 if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild(this, pidl, dwFlags | SHGDN_INFOLDER, pszPath + len, MAX_PATH + 1 - len))) 00423 { 00424 CoTaskMemFree(pszPath); 00425 return E_OUTOFMEMORY; 00426 } 00427 00428 } 00429 } 00430 00431 if (SUCCEEDED(hr)) 00432 { 00433 strRet->uType = STRRET_WSTR; 00434 strRet->pOleStr = pszPath; 00435 TRACE ("-- (%p)->(%s,0x%08x)\n", this, debugstr_w(strRet->pOleStr), hr); 00436 } 00437 else 00438 CoTaskMemFree(pszPath); 00439 00440 return hr; 00441 } 00442 00443 /************************************************************************** 00444 * CAdminToolsFolder::SetNameOf 00445 * Changes the name of a file object or subfolder, possibly changing its item 00446 * identifier in the process. 00447 * 00448 * PARAMETERS 00449 * HWND hwndOwner, //[in ] Owner window for output 00450 * LPCITEMIDLIST pidl, //[in ] simple pidl of item to change 00451 * LPCOLESTR lpszName, //[in ] the items new display name 00452 * DWORD dwFlags, //[in ] SHGNO formatting flags 00453 * LPITEMIDLIST* ppidlOut) //[out] simple pidl returned 00454 */ 00455 HRESULT WINAPI CAdminToolsFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, /* simple pidl */ 00456 LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut) 00457 { 00458 FIXME ("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", this, hwndOwner, pidl, 00459 debugstr_w (lpName), dwFlags, pPidlOut); 00460 00461 return E_FAIL; 00462 } 00463 00464 HRESULT WINAPI CAdminToolsFolder::GetDefaultSearchGUID(GUID *pguid) 00465 { 00466 FIXME ("(%p)\n", this); 00467 return E_NOTIMPL; 00468 } 00469 00470 HRESULT WINAPI CAdminToolsFolder::EnumSearches(IEnumExtraSearch ** ppenum) 00471 { 00472 FIXME ("(%p)\n", this); 00473 return E_NOTIMPL; 00474 } 00475 00476 HRESULT WINAPI CAdminToolsFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay) 00477 { 00478 if (pSort) 00479 *pSort = 0; 00480 if (pDisplay) 00481 *pDisplay = 0; 00482 00483 return S_OK; 00484 } 00485 HRESULT WINAPI CAdminToolsFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) 00486 { 00487 if (!pcsFlags || iColumn >= AdminToolsHELLVIEWCOLUMNS) 00488 return E_INVALIDARG; 00489 *pcsFlags = AdminToolsSFHeader[iColumn].pcsFlags; 00490 return S_OK; 00491 00492 } 00493 00494 HRESULT WINAPI CAdminToolsFolder::GetDetailsEx (LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv) 00495 { 00496 FIXME ("(%p): stub\n", this); 00497 00498 return E_NOTIMPL; 00499 } 00500 00501 HRESULT WINAPI CAdminToolsFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd) 00502 { 00503 WCHAR buffer[MAX_PATH] = {0}; 00504 HRESULT hr = E_FAIL; 00505 00506 TRACE("(%p)->(%p %i %p): stub\n", this, pidl, iColumn, psd); 00507 00508 if (iColumn >= AdminToolsHELLVIEWCOLUMNS) 00509 return E_FAIL; 00510 00511 psd->fmt = AdminToolsSFHeader[iColumn].fmt; 00512 psd->cxChar = AdminToolsSFHeader[iColumn].cxChar; 00513 if (pidl == NULL) 00514 { 00515 psd->str.uType = STRRET_WSTR; 00516 if (LoadStringW(shell32_hInstance, AdminToolsSFHeader[iColumn].colnameid, buffer, MAX_PATH)) 00517 hr = SHStrDupW(buffer, &psd->str.pOleStr); 00518 00519 return hr; 00520 } 00521 00522 psd->str.uType = STRRET_CSTR; 00523 switch (iColumn) 00524 { 00525 case COLUMN_NAME: 00526 psd->str.uType = STRRET_WSTR; 00527 hr = GetDisplayNameOf(pidl, 00528 SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); 00529 break; 00530 case COLUMN_SIZE: 00531 _ILGetFileSize (pidl, psd->str.cStr, MAX_PATH); 00532 break; 00533 case COLUMN_TYPE: 00534 _ILGetFileType (pidl, psd->str.cStr, MAX_PATH); 00535 break; 00536 case COLUMN_DATE: 00537 _ILGetFileDate (pidl, psd->str.cStr, MAX_PATH); 00538 break; 00539 } 00540 00541 return hr; 00542 } 00543 00544 HRESULT WINAPI CAdminToolsFolder::MapColumnToSCID(UINT column, SHCOLUMNID *pscid) 00545 { 00546 FIXME ("(%p): stub\n", this); 00547 return E_NOTIMPL; 00548 } 00549 00550 /************************************************************************ 00551 * CAdminToolsFolder::GetClassID 00552 */ 00553 HRESULT WINAPI CAdminToolsFolder::GetClassID(CLSID *lpClassId) 00554 { 00555 TRACE ("(%p)\n", this); 00556 00557 memcpy(lpClassId, &CLSID_AdminFolderShortcut, sizeof(CLSID)); 00558 00559 return S_OK; 00560 } 00561 00562 /************************************************************************ 00563 * CAdminToolsFolder::Initialize 00564 * 00565 */ 00566 HRESULT WINAPI CAdminToolsFolder::Initialize(LPCITEMIDLIST pidl) 00567 { 00568 if (pidlRoot) 00569 SHFree((LPVOID)pidlRoot); 00570 00571 pidlRoot = ILClone(pidl); 00572 return S_OK; 00573 } 00574 00575 /************************************************************************** 00576 * CAdminToolsFolder::GetCurFolder 00577 */ 00578 HRESULT WINAPI CAdminToolsFolder::GetCurFolder(LPITEMIDLIST *pidl) 00579 { 00580 TRACE ("(%p)->(%p)\n", this, pidl); 00581 00582 *pidl = ILClone (pidlRoot); 00583 return S_OK; 00584 } Generated on Sat May 26 2012 04:24:55 for ReactOS by
1.7.6.1
|