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.
 
 
 
 
 
 

274 lines
7.5 KiB

// sfm.h: SFM shares, sessions and open resources
#ifndef __SFM_H_INCLUDED__
#define __SFM_H_INCLUDED__
#include "FileSvc.h" // FileServiceProvider
class DynamicDLL;
class CSFMPropertySheet;
typedef enum _SfmApiIndex
{
AFP_VOLUME_ENUM = 0,
AFP_SESSION_ENUM,
AFP_FILE_ENUM,
AFP_BUFFER_FREE,
AFP_VOLUME_DEL,
AFP_CONNECTION_ENUM,
AFP_CONNECTION_CLOSE,
AFP_SESSION_CLOSE,
AFP_FILE_CLOSE,
AFP_CONNECT,
AFP_DISCONNECT,
AFP_VOLUME_GET_INFO,
AFP_VOLUME_SET_INFO,
AFP_DIRECTORY_GET_INFO,
AFP_DIRECTORY_SET_INFO,
AFP_SERVER_GET_INFO,
AFP_SERVER_SET_INFO,
AFP_ETC_MAP_ASSOCIATE,
AFP_ETC_MAP_ADD,
AFP_ETC_MAP_DELETE,
AFP_ETC_MAP_GET_INFO,
AFP_ETC_MAP_SET_INFO,
AFP_MESSAGE_SEND,
AFP_STATISTICS_GET
};
// not subject to localization
static LPCSTR g_apchFunctionNames[] = {
"AfpAdminVolumeEnum",
"AfpAdminSessionEnum",
"AfpAdminFileEnum",
"AfpAdminBufferFree",
"AfpAdminVolumeDelete",
"AfpAdminConnectionEnum",
"AfpAdminConnectionClose",
"AfpAdminSessionClose",
"AfpAdminFileClose",
"AfpAdminConnect",
"AfpAdminDisconnect",
"AfpAdminVolumeGetInfo",
"AfpAdminVolumeSetInfo",
"AfpAdminDirectoryGetInfo",
"AfpAdminDirectorySetInfo",
"AfpAdminServerGetInfo",
"AfpAdminServerSetInfo",
"AfpAdminETCMapAssociate",
"AfpAdminETCMapAdd",
"AfpAdminETCMapDelete",
"AfpAdminETCMapGetInfo",
"AfpAdminETCMapSetInfo",
"AfpAdminMessageSend",
"AfpAdminStatisticsGet",
NULL
};
// not subject to localization
extern DynamicDLL g_SfmDLL;
// forward declarations
class CSfmCookieBlock;
class SfmFileServiceProvider : public FileServiceProvider
{
public:
SfmFileServiceProvider( CFileMgmtComponentData* pFileMgmtData );
~SfmFileServiceProvider();
virtual DWORD DeleteShare(LPCTSTR ptchServerName, LPCTSTR ptchShareName);
virtual DWORD CloseSession(CFileMgmtResultCookie* pcookie);
virtual DWORD CloseResource(CFileMgmtResultCookie* pcookie);
virtual VOID DisplayShareProperties(
LPPROPERTYSHEETCALLBACK pCallBack,
LPDATAOBJECT pDataObject,
LONG_PTR handle);
virtual DWORD ReadShareProperties(
LPCTSTR ptchServerName,
LPCTSTR ptchShareName,
OUT PVOID* ppvPropertyBlock,
OUT CString& strDescription,
OUT CString& strPath,
OUT BOOL* pfEditDescription,
OUT BOOL* pfEditPath,
OUT DWORD* pdwShareType);
virtual DWORD WriteShareProperties(LPCTSTR ptchServerName, LPCTSTR ptchShareName,
PVOID pvPropertyBlock, LPCTSTR ptchDescription, LPCTSTR ptchPath);
virtual VOID FreeShareProperties(PVOID pvPropertyBlock);
virtual DWORD QueryMaxUsers(PVOID pvPropertyBlock);
virtual VOID SetMaxUsers( PVOID pvPropertyBlock, DWORD dwMaxUsers);
virtual VOID FreeData(PVOID pv);
virtual HRESULT PopulateShares(
IResultData* pResultData,
CFileMgmtCookie* pcookie);
// if pResultData is not NULL, add sessions/resources to the listbox
// if pResultData is NULL, delete all sessions/resources
// if pResultData is NULL, return SUCCEEDED(hr) to continue or
// FAILED(hr) to abort
virtual HRESULT EnumerateSessions(
IResultData* pResultData,
CFileMgmtCookie* pcookie,
bool bAddToResultPane);
virtual HRESULT EnumerateResources(
IResultData* pResultData,
CFileMgmtCookie* pcookie);
virtual LPCTSTR QueryTransportString();
HRESULT AddSFMShareItems(
IResultData* pResultData,
CFileMgmtCookie* pParentCookie,
PVOID pinfo,
DWORD nItems);
HRESULT HandleSFMSessionItems(
IResultData* pResultData,
CFileMgmtCookie* pParentCookie,
PVOID pinfo,
DWORD nItems,
BOOL bAddToResultPane);
HRESULT HandleSFMResourceItems(
IResultData* pResultData,
CFileMgmtCookie* pParentCookie,
PVOID pinfo,
DWORD nItems);
DWORD GetDirectoryInfo(
LPCTSTR ptchServerName,
LPCWSTR pszPath,
DWORD* pdwPerms,
CString& strOwner,
CString& strGroup );
DWORD SetDirectoryInfo(
LPCTSTR ptchServerName,
LPCWSTR pszPath,
DWORD dwPerms,
LPCWSTR pszOwner,
LPCWSTR pszGroup );
// functions added for SFM configuration - EricDav
BOOL DisplaySfmProperties(
LPDATAOBJECT pDataObject,
CFileMgmtCookie* pCookie);
void CleanupSfmProperties();
void SetSfmPropSheet(CSFMPropertySheet * pSfmPropSheet);
DWORD UserHasAccess(LPCWSTR pwchServerName);
BOOL FSFMInstalled(LPCWSTR pwchServerName);
BOOL StartSFM(HWND hwndParent, SC_HANDLE hScManager, LPCWSTR pwchServerName);
// This is public, but be careful to use it promptly after SFMConnect().
AFP_SERVER_HANDLE m_ulSFMServerConnection;
BOOL SFMConnect(LPCWSTR pwchServer, BOOL fDisplayError = FALSE);
void SFMDisconnect();
private:
CString m_ulSFMServerConnectionMachine;
CString m_strTransportSFM;
CSFMPropertySheet * m_pSfmPropSheet;
};
class CSfmCookie : public CFileMgmtResultCookie
{
public:
CSfmCookie( FileMgmtObjectType objecttype )
: CFileMgmtResultCookie( objecttype )
{}
virtual HRESULT GetTransport( OUT FILEMGMT_TRANSPORT* pTransport );
virtual void AddRefCookie();
virtual void ReleaseCookie();
// CHasMachineName
CSfmCookieBlock* m_pCookieBlock;
DECLARE_FORWARDS_MACHINE_NAME(m_pCookieBlock)
};
class CSfmCookieBlock : public CCookieBlock<CSfmCookie>, public CStoresMachineName
{
public:
inline CSfmCookieBlock(
CSfmCookie* aCookies, // use vector ctor, we use vector dtor
INT cCookies,
LPCTSTR lpcszMachineName,
PVOID pvCookieData)
: CCookieBlock<CSfmCookie>( aCookies, cCookies ),
CStoresMachineName( lpcszMachineName ),
m_pvCookieData( pvCookieData )
{
for (int i = 0; i < cCookies; i++)
// {
// aCookies[i].ReadMachineNameFrom( (CHasMachineName*)this );
aCookies[i].m_pCookieBlock = this;
// }
}
virtual ~CSfmCookieBlock();
private:
PVOID m_pvCookieData;
};
class CSfmShareCookie : public CSfmCookie
{
public:
CSfmShareCookie() : CSfmCookie( FILEMGMT_SHARE ) {}
virtual HRESULT GetShareName( OUT CString& strShareName );
inline virtual DWORD GetNumOfCurrentUses() { return GetShareInfo()->afpvol_curr_uses; }
virtual BSTR GetColumnText(int nCol);
virtual BSTR QueryResultColumnText( int nCol, CFileMgmtComponentData& refcdata );
inline AFP_VOLUME_INFO* GetShareInfo()
{
ASSERT( NULL != m_pobject );
return (AFP_VOLUME_INFO*)m_pobject;
}
virtual HRESULT GetSharePIDList( OUT LPITEMIDLIST *ppidl );
};
class CSfmSessionCookie : public CSfmCookie
{
public:
inline CSfmSessionCookie() : CSfmCookie( FILEMGMT_SESSION )
{
}
virtual HRESULT GetSessionID( DWORD* pdwSessionID );
inline virtual DWORD GetNumOfOpenFiles() { return GetSessionInfo()->afpsess_num_opens; }
inline virtual DWORD GetConnectedTime() { return GetSessionInfo()->afpsess_time; }
inline virtual DWORD GetIdleTime() { return 0; }
virtual BSTR GetColumnText(int nCol);
virtual BSTR QueryResultColumnText( int nCol, CFileMgmtComponentData& refcdata );
inline AFP_SESSION_INFO* GetSessionInfo()
{
ASSERT( NULL != m_pobject );
return (AFP_SESSION_INFO*)m_pobject;
}
};
class CSfmResourceCookie : public CSfmCookie
{
public:
CSfmResourceCookie() : CSfmCookie( FILEMGMT_RESOURCE ) {}
virtual HRESULT GetFileID( DWORD* pdwFileID );
inline virtual DWORD GetNumOfLocks() { return GetFileInfo()->afpfile_num_locks; }
virtual BSTR GetColumnText(int nCol);
virtual BSTR QueryResultColumnText( int nCol, CFileMgmtComponentData& refcdata );
inline AFP_FILE_INFO* GetFileInfo()
{
ASSERT( NULL != m_pobject );
return (AFP_FILE_INFO*)m_pobject;
}
};
#endif // ~__SFM_H_INCLUDED__