ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

admintools.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.