Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1993.
//
// File: copyhook.cxx
//
// Contents: CShareCopyHook implementation
//
// History: 21-Apr-95 BruceFo Created
//
//--------------------------------------------------------------------------
#include "headers.hxx"
#pragma hdrstop
#include "copyhook.hxx"
#include "cache.hxx"
#include "shrinfo.hxx"
#include "util.hxx"
//+-------------------------------------------------------------------------
//
// Member: CShareCopyHook::CShareCopyHook
//
// Synopsis: Constructor
//
// History: 21-Apr-95 BruceFo Created
//
//--------------------------------------------------------------------------
CShareCopyHook::CShareCopyHook( VOID ) : _uRefs(0) { INIT_SIG(CShareCopyHook);
AddRef(); // give it the correct initial reference count. add to the DLL reference count
}
//+-------------------------------------------------------------------------
//
// Member: CShareCopyHook::~CShareCopyHook
//
// Synopsis: Destructor
//
// History: 21-Apr-95 BruceFo Created
//
//--------------------------------------------------------------------------
CShareCopyHook::~CShareCopyHook() { CHECK_SIG(CShareCopyHook); }
//+-------------------------------------------------------------------------
//
// Member: CShareCopyHook::CopyCallback
//
// Derivation: ICopyHook
//
// Synopsis: Called when the shell is copying an object
//
// History: 21-Apr-95 BruceFo Created
//
// FEATURE: instead of deleting a share on a directory move, how about
// moving the share?
//
//--------------------------------------------------------------------------
STDMETHODIMP_(UINT) CShareCopyHook::CopyCallback( HWND hwnd, UINT wFunc, UINT fFlags, LPCWSTR pszSrcFile, DWORD dwSrcAttribs, LPCWSTR pszDestFile, DWORD dwDestAttribs ) { appDebugOut((DEB_TRACE, "CShareCopyHook::CopyCallback. %ws -> %ws\n", pszSrcFile, pszDestFile));
UINT idMsg;
if (!(dwSrcAttribs & FILE_ATTRIBUTE_DIRECTORY)) { return IDYES; //We're only worried about directories
}
if (!g_fSharingEnabled) { return IDYES; }
switch (wFunc) { case FO_DELETE: idMsg = MSG_RMDIRCONFIRM; break;
case FO_RENAME: case FO_MOVE: idMsg = MSG_MVDIRCONFIRM; break;
default: return IDYES; }
BOOL fChange = FALSE; UINT wnErr = IDYES; /* by default, shell should go ahead and do it */ CShareInfo* pWarnList = NULL; HRESULT hr = g_ShareCache.ConstructParentWarnList(pszSrcFile, &pWarnList); if (SUCCEEDED(hr)) { if (NULL != pWarnList) { for (CShareInfo* p = (CShareInfo*) pWarnList->Next(); p != pWarnList; p = (CShareInfo*) p->Next()) { wnErr = WarnDelShare(hwnd, idMsg, p->GetNetname(), p->GetPath()); if (wnErr != IDYES) { // IDYES: obviously, continue
break; }
fChange = TRUE; }
// get rid of the temporary list
DeleteShareInfoList(pWarnList, TRUE);
if (fChange) { g_ShareCache.Refresh(); } } } return wnErr; }
|