Quantcast
Viewing all articles
Browse latest Browse all 872

Mount vstor2-mntapi20-shared volume to Windows folder

Hello,

 

using some examples provided by vmware, i'm able to mount a remote vmdk disk to Windows Drive Letter but i can't find a way to mount it to a Windows folder..

 

Tried with:

- SetVolumeMountPoint

     Where can i find the GUID of vstor2-mntapi20-shared symLink device?

- DefineDosDevice

     No success mounting to a folder

 

static void DoMntApi(VixDiskLibConnection connection, const char* disk, uint32 openFlags)
{   printf("\nCalling VixMntapi_OpenDisks...\n");   const char* diskNames[1];   diskNames[0] = static_cast<const char*>(disk);   VixDiskSetHandle diskSetHandle = NULL;   VixError err = VixMntapi_OpenDisks(connection,         diskNames,         1,         VIXDISKLIB_FLAG_OPEN_READ_ONLY,         &diskSetHandle);   if (VIX_FAILED(err)) {      throw VixDiskLibErrWrapper(err, __FILE__, __LINE__);   }   DiskSetHdl dsh(diskSetHandle, VixMntapi_CloseDiskSet);   printf("\nCalling VixMntapi_GetDiskSetInfo...\n");   VixDiskSetInfo *diskSetInfo = NULL;   err  = VixMntapi_GetDiskSetInfo(diskSetHandle, &diskSetInfo);   if (VIX_FAILED(err)) {      throw VixDiskLibErrWrapper(err, __FILE__, __LINE__);   }   DiskSetInfo dsi(diskSetInfo, VixMntapi_FreeDiskSetInfo);   printf("DiskSet Info - flags %u (passed - %u), mountPoint %s.\n",         diskSetInfo->openFlags, openFlags,         diskSetInfo->mountPath);   printf("\nCalling VixMntapi_GetVolumeHandles...\n");   VixVolumeHandle *volumeHandles = NULL;   size_t numVolumes = 0;   err = VixMntapi_GetVolumeHandles(diskSetHandle,         &numVolumes,         &volumeHandles);   if (VIX_FAILED(err)) {      throw VixDiskLibErrWrapper(err, __FILE__, __LINE__);   }   VolumeHdls vh(volumeHandles, VixMntapi_FreeVolumeHandles);   printf("Num Volumes %zd\n", numVolumes);   printf("\nEnter the volume number from which to start the mounting: ");   int j = 0;   scanf("%d", &j);   vector<shared_ptr<VolumeHdl> > vhset;   vector<shared_ptr<VolumeInfo> > viset;   for (int i = j-1; i < numVolumes; ++i) {      printf("\nCalling VixMntapi_MountVolume on volume %d\n", i+1);      err = VixMntapi_MountVolume(volumeHandles[i], TRUE);      if (VIX_FAILED(err)) {         VixDiskLibErrWrapper errWrap(err, __FILE__, __LINE__);         cout << endl << "Error: " << errWrap.Description() << endl;         continue;      }      VolumeHdl*a = new VolumeHdl(volumeHandles[i], VixMntapi_DismountVolume_True);      vhset.push_back(shared_ptr<VolumeHdl>(a));      printf("\nCalling VixMntapi_GetVolumeInfo on volume %d\n", i+1);      VixVolumeInfo* volInfo = NULL;      err = VixMntapi_GetVolumeInfo(volumeHandles[i], &volInfo);      if (VIX_FAILED(err)) {         VixDiskLibErrWrapper errWrap(err, __FILE__, __LINE__);         cout << endl << "Error: " << errWrap.Description() << endl;         continue;      }      viset.push_back(shared_ptr<VolumeInfo>(new VolumeInfo(volInfo, VixMntapi_FreeVolumeInfo)));      printf("\nMounted Volume %d, Type %d, isMounted %d, symLink %s, numGuestMountPoints %zd (%s)\n\n",            i+1, volInfo->type, volInfo->isMounted,            volInfo->symbolicLink == NULL ? "<null>" : volInfo->symbolicLink,            volInfo->numGuestMountPoints,            (volInfo->numGuestMountPoints == 1) ? (volInfo->inGuestMountPoints[0]) : "<null>");      /*      *----------------------------------------------------------------------      *      * Mount Device to system unit      *      *----------------------------------------------------------------------      */      std::wstringstream ansiSS;      ansiSS << volInfo->symbolicLink;      std::wstring sVolumeName = ansiSS.str();      sVolumeName = sVolumeName.substr(3);      sVolumeName.erase(sVolumeName.length() - 1);      sVolumeName = L"\\Device" + sVolumeName;      cout << endl << endl << "Defining MS-DOS device name \"U:\" for volume " << volInfo->symbolicLink << endl;      cout << "=====================================================================================" << endl;

/*
*
*
* MOUNT TO A FOLDER INSTEAD OF U: LETTER
*
*
*/

      if (DefineDosDeviceW(DDD_RAW_TARGET_PATH, L"U:", sVolumeName.c_str())) {          HANDLE hDevice;          std::wstring wsVolume = L"\\\\.\\U:";          hDevice = CreateFileW(wsVolume.c_str(),              GENERIC_READ,              0, //FILE_SHARE_READ | FILE_SHARE_WRITE              NULL,              OPEN_EXISTING,              FILE_ATTRIBUTE_NORMAL,              NULL);          if (hDevice == INVALID_HANDLE_VALUE) {              printf("Error opening volume, err = %d\n", GetLastError());          }          else {              WIN32_FIND_DATAW fdFile;              std::wstring wsPath = L"U:\\*.*";              HANDLE hFind = FindFirstFileW(wsPath.c_str(), &fdFile);              std::string MountPoint = (volInfo->numGuestMountPoints == 1) ? (volInfo->inGuestMountPoints[0]) : "<null>";              cout << "=====================================================================================" << endl;              cout << "=== Dumping contents of target VM's (" << MountPoint << ") drive (Mounted at U: drive on proxy) ===" << endl;              cout << "=====================================================================================" << endl;              while (hFind != INVALID_HANDLE_VALUE) {                  if (hFind != INVALID_HANDLE_VALUE) {                      printf("Successfully read Object = '%S'\n", fdFile.cFileName);                  }                  else {                      printf("Failed to read Object. Volume/NTFS filesystem is corrupt (%d)\n", GetLastError());                  }                  if (!FindNextFileW(hFind, &fdFile)) {                      FindClose(hFind);                      hFind = INVALID_HANDLE_VALUE;                  }              }              ::MessageBoxW(NULL, L"Volume mounted under U: drive, press OK to unmount", L"Info", NULL);              DefineDosDeviceW(DDD_RAW_TARGET_PATH |                  DDD_REMOVE_DEFINITION |                  DDD_EXACT_MATCH_ON_REMOVE, L"U:", sVolumeName.c_str());          }      }   }
}

 

Is there a way to mount the vstor2 device to a folder?

 

Thanks,

Image may be NSFW.
Clik here to view.

Viewing all articles
Browse latest Browse all 872

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>