在vista中将文件夹挂载为驱动器

时间:2009-01-25 10:29:27

标签: c++ api

您好我正在尝试在Vista中安装驱动器我使用msdn示例中的以下代码,

     BOOL bFlag;
   TCHAR Buf[BUFSIZE];     // temporary buffer for volume name

   if( argc != 3 ) 
   {
      _tprintf( TEXT("Usage: %s <mount_point> <volume>\n"), argv[0] );
      _tprintf( TEXT("For example, \"%s c:\\mnt\\fdrive\\ f:\\\"\n"), argv[0]);
      return( -1 );
   }

  // We should do some error checking on the inputs. Make sure
  // there are colons and backslashes in the right places, etc. 

   bFlag = GetVolumeNameForVolumeMountPoint(
              argv[2], // input volume mount point or directory
                  Buf, // output volume name buffer
              BUFSIZE  // size of volume name buffer
           );

   if (bFlag != TRUE) 
   {
      _tprintf( TEXT("Retrieving volume name for %s failed.\n"), argv[2] );
      return (-2);
   }

   _tprintf( TEXT("Volume name of %s is %s\n"), argv[2], Buf );
   bFlag = SetVolumeMountPoint(
              argv[1], // mount point
                  Buf  // volume to be mounted
           );

   if (!bFlag)
     _tprintf (TEXT("Attempt to mount %s at %s failed.\n"), argv[2], argv[1]);

   return (bFlag);

它总是给出参数错误的错误,我也先尝试过defineosdevice然后得到名字,它也没用。知道如何让它发挥作用吗?

3 个答案:

答案 0 :(得分:1)

你需要更具体!你在代码中究竟出现了什么错误?

您可以尝试通过system()执行以下命令,看看它是否以这种方式工作:

subst K: “c:\blabla"

答案 1 :(得分:0)

SetVolumeMountPoint用于在驱动器盘符或文件夹中安装卷。它不允许您在驱动器号上安装文件夹。这与你想要的相反。

要使文件夹可用作驱动器号,您需要执行与SUBST实用程序等效的操作。这使用DefineDosDevice,如下所示:

if (!DefineDosDevice(0, _T("Q:"), _T("C:\\Temp")))
    _ftprintf(stderr, _T("DefineDosDevice failed: %d\n"), GetLastError());

如果你想让这个持久化,我认为你需要编写一个在启动时执行此操作的Windows服务。我大约10年前写过一篇。

答案 2 :(得分:0)

而不是试图使DefineDosDevice持久化,你可能最终会做的就是使用regedit。

REGEDIT4 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] 
"T:"="\\??\\C:\\Temp"

https://en.wikipedia.org/wiki/SUBST#Persisting_across_reboots