I am mounting a network drive to windows using WNetAddConnection2 which is working fine but while mounting the drive by default it assigns the name as Server IP and FolderName ,
NDSTestFolder on 'NAS server (172.24.17.116)'(R:)
I need to rename the drive label using SetVolumeLabel but this fails for the network drive saying invalid parameter while SetVolumeLabel works fine for the local drives.
Is there a way I can rename or relabel a network drive? So that I can change
NDSTestFolder on 'NAS server (172.24.17.116)'(R:)
to
NDS@MyFolder (R:)
Translated your script into C++:
#include <shldisp.h>
void RenameDrive(BSTR strNewName, BSTR strDriveLetter)
{
IShellDispatch* pShellDispatch = NULL;
HRESULT hr = CoCreateInstance(CLSID_Shell,
NULL,
CLSCTX_INPROC_SERVER,
IID_IShellDispatch,
(void**)&pShellDispatch);
if (SUCCEEDED(hr) && pShellDispatch)
{
Folder* pFolder = NULL;
VARIANT vt = {};
VariantInit(&vt);
vt.vt = VT_BSTR;
vt.bstrVal = strDriveLetter;
hr = pShellDispatch->NameSpace(vt, &pFolder);
VariantClear(&vt);
if (SUCCEEDED(hr) && pFolder)
{
Folder2* pFolder2 = NULL;
hr = pFolder->QueryInterface(IID_Folder2, (void**)&pFolder2);
if (SUCCEEDED(hr) && pFolder2)
{
FolderItem* pFolderItem = NULL;
hr = pFolder2->get_Self(&pFolderItem);
if (SUCCEEDED(hr) && pFolderItem)
{
pFolderItem->put_Name(strNewName);
pFolderItem->Release();
}
pFolder2->Release();
}
pFolder->Release();
}
pShellDispatch->Release();
}
}
Not sure if there's an API for this but the strings are stored in the registry under:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2
Find the correct subkey by parsing the keys there (it will probably look like "##172.24.17.116#NDSTestFolder" ) and change the _LabelFromReg value to whatever you like...
I tried using vb script for renaming thr drive:
LPCTSTR szCode = "Function RenameDrive(strNewName,strDriveLetter) \r\n\
Dim objShell \r\n\
Set objShell = CreateObject(\"Shell.Application\") \r\n\
'if objShell is Not Nothing Then \r\n\
objShell.NameSpace(strDriveLetter).Self.Name = strNewName \r\n\
'End if \r\n\
End Function";