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.
|
|
#include "mtpt.h"
class CShare;
class CMtPtRemote : public CMountPoint { ///////////////////////////////////////////////////////////////////////////////
// Public methods
///////////////////////////////////////////////////////////////////////////////
public: CMtPtRemote(); ~CMtPtRemote();
// virtual override
BOOL IsUnavailableNetDrive(); BOOL IsDisconnectedNetDrive();
BOOL IsFormatted();
HRESULT GetLabel(LPTSTR pszLabel, DWORD cchLabel); HRESULT GetLabelNoFancy(LPTSTR pszLabel, DWORD cchLabel); HRESULT SetLabel(HWND hwnd, LPCTSTR pszLabel); HRESULT ChangeNotifyRegisterAlias(void);
HRESULT GetRemotePath(LPWSTR pszPath, DWORD cchPath);
UINT GetIcon(LPTSTR pszModule, DWORD cchModule); HRESULT GetAssocSystemElement(IAssociationElement **ppae); DWORD GetShellDescriptionID();
int GetDriveFlags(); void GetTypeString(LPTSTR pszType, DWORD cchType);
HKEY GetRegKey();
static void _NotifyReconnectedNetDrive(LPCWSTR pszMountPoint);
///////////////////////////////////////////////////////////////////////////////
// Miscellaneous helpers
///////////////////////////////////////////////////////////////////////////////
private: HRESULT _Init(LPCWSTR pszName, LPCWSTR pszShareName, BOOL fUnavailable); HRESULT _InitWithoutShareName(LPCWSTR pszName);
HRESULT _GetDefaultUNCDisplayName(LPTSTR pszLabel, DWORD cchLabel); BOOL _GetComputerDisplayNameFromReg(LPTSTR pszLabel, DWORD cchLabel);
LPCTSTR _GetUNCName(); BOOL _IsConnected(); BOOL _IsUnavailableNetDrive(); BOOL _IsUnavailableNetDriveFromStateVar();
BOOL _IsRemote();
BOOL _IsSlow(); BOOL _IsAutorun();
// returns DT_* defined above
DWORD _GetMTPTDriveType(); // returns CT_* defined above
DWORD _GetMTPTContentType();
DWORD _GetPathSpeed(); void _CalcPathSpeed();
BOOL _GetFileAttributes(DWORD* pdwAttrib); BOOL _GetFileSystemName(LPTSTR pszFileSysName, DWORD cchFileSysName); BOOL _GetGVILabelOrMixedCaseFromReg(LPTSTR pszLabel, DWORD cchLabel); BOOL _GetGVILabel(LPTSTR pszLabel, DWORD cchLabel); BOOL _GetSerialNumber(DWORD* pdwSerialNumber); BOOL _GetFileSystemFlags(DWORD* pdwFlags); int _GetGVIDriveFlags(); int _GetDriveType(); DWORD _GetAutorunContentType(); UINT _GetAutorunIcon(LPTSTR pszModule, DWORD cchModule);
struct GFAGVICALL* _PrepareThreadParam(HANDLE* phEventBegun, HANDLE* phEventFinish); BOOL _HaveGFAAndGVIExpired(DWORD dwNow); BOOL _UpdateGFAAndGVIInfo(); void _UpdateWNetGCStatus();
BOOL _IsMountedOnDriveLetter();
void _InitOnlyOnceStuff(); void _UpdateLabelFromDesktopINI(); void _UpdateAutorunInfo();
public: static HRESULT _CreateMtPtRemote(LPCWSTR pszMountPoint, LPCWSTR pszShareName, BOOL fUnavailable); static HRESULT _CreateMtPtRemoteWithoutShareName(LPCWSTR pszMountPoint);
static CShare* _GetOrCreateShareFromID(LPCWSTR pszShareName);
static HRESULT _DeleteAllMtPtsAndShares();
static HRESULT _RemoveShareFromHDPA(CShare* pshare);
///////////////////////////////////////////////////////////////////////////////
// Data
///////////////////////////////////////////////////////////////////////////////
private: class CShare* _pshare;
DWORD _dwWNetGCStatus; DWORD _dwWNetGC3Status; WNGC_CONNECTION_STATE _wngcs;
DWORD _dwSpeed;
#ifdef DEBUG
private: static DWORD _cMtPtRemote; #endif
};
class CShare { public: DWORD dwGetFileAttributes; WCHAR szLabel[MAX_LABEL]; DWORD dwSerialNumber; DWORD dwMaxFileNameLen; DWORD dwFileSystemFlags; WCHAR szFileSysName[MAX_FILESYSNAME];
BOOL fGVIRetValue; DWORD dwGFAGVILastCall;
BOOL fConnected;
LPWSTR pszRemoteName; LPWSTR pszKeyName;
BOOL fAutorun;
BOOL fFake;
public: ULONG AddRef() { return InterlockedIncrement(&_cRef); }
ULONG Release() { if (InterlockedDecrement(&_cRef) > 0) return _cRef; delete this; return 0; }
private: LONG _cRef;
public: CShare() : _cRef(1) { #ifdef DEBUG
++_cShare; #endif
} ~CShare() { CMtPtRemote::_RemoveShareFromHDPA(this);
if (pszRemoteName) { LocalFree(pszRemoteName); } if (pszKeyName) { LocalFree(pszKeyName); } #ifdef DEBUG
--_cShare; #endif
} #ifdef DEBUG
private: static DWORD _cShare; #endif
};
|