您好我正在尝试在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然后得到名字,它也没用。知道如何让它发挥作用吗?
答案 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