Introduction
Working with the Net*()
NT APIs can be a pain. Having experienced this pain a while back, I decided to take some code I had and make it into an article. This is just a simple class to perform just the basics: enumerating, adding, deleting and updating shares on a local or remote computer. It can be expanded further to get and set security configuration. Enterprise level development would likely use active directory to manipulate shares, this class works with NT4 style domains and workgroups as well as Win2000 networks not using active directory.
Using the code
Here's part of the class. The public fields are where we retrieve share configuration after a First()
/ Next()
call. All but one are documented in the SDK. The m_fIsAdmin
is not there. It just means that the share was created by the system, such as the hidden shares created for fixed drives.
class CNTShares : public CObject
{
...Privates omitted
public:
CString m_sName;
CString m_sRemark;
CString m_sPath;
DWORD m_dwShareType;
DWORD m_dwCurrentConnections;
int m_nMaxConnections;
BOOL m_fIsAdmin;
void First(LPCTSTR pszServer);
BOOL Next();
void Add(LPCTSTR pszServer,LPCTSTR pszName,LPCTSTR pszRemark,
LPCTSTR pszPath,int nMaxConnections);
void Delete(LPCTSTR pszServer,LPCTSTR pszName);
void Update(LPCTSTR pszServer,LPCTSTR pszName,LPCTSTR pszRemark,
LPCTSTR pszPath,int nMaxConnections);
};
Note that all the classes' methods can throw a CWin32Exception
, a CException
derived class included in the zip file. Makes it easier to catch
API style errors.
Use is simple, first instantiate an instance...
CNTShares m_Shares;
Then use the First()
/ Next()
methods to enumerate shares. The machine name gets passed into the First()
method. Note that the Next()
method needs to be called after the First()
method to actually know if there are any shares to enumerate or left for enumeration. Internally, the index is set to -1 in First()
, and incremented in Next()
.
TRY
{
m_Shares.First(sServer);
while (m_Shares.Next())
{
};
}
CATCH(CWin32Exception,e)
{
e->ReportError();
return;
}
END_CATCH
To add a share...
m_Share.Add(_T("ComputerName"),_T("ShareName"),_T("c:\Path"),_T("Remark"),-1);
To delete a share...
m_Share.Delete(_T("ComputerName"),_T("ShareName"));
Finally, to update a share
m_Share.Update(_T("ComputerName"),_T("ShareName"),_T("c:\Path"),_T("Remark"),-1);
History
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.