如何用自己的方法实现修改盘符

有朋友问我怎么用软件实现修改分区盘符,让我找了老半天 。终于找到了

官方:

[http://support.microsoft.com/default.aspx/kb/280297]
如何在群集服务器上配置卷装入点

<script type="text/javascript">function loadTOCNode(){}</script>
文章编号:280297
最后修改:2004年3月11日
修订:1.0
<script type="text/javascript"> var sectionFilter = "type != 'notice' && type != 'securedata' && type != 'querywords'"; var tocArrow = "/library/images/support/kbgraphics/public/en-us/downarrow.gif"; var depthLimit = 10; var depth3Limit = 10; var depth4Limit = 5; var depth5Limit = 3; var tocEntryMinimum = 1; </script><script src="/common/script/gsfx/kbtoc.js?6" type="text/javascript"></script>

概要

<script type="text/javascript">loadTOCNode(1, 'summary');</script>
使用 NTFS 卷装入点功能,可以突破 26 个驱动器号的限制。通过使用卷装入点,可以将目标分区移植或 装入 到其他物理磁盘上的文件夹中。卷装入点对于程序而言是透明的。本文讨论如何在服务器群集上创建卷装入点,并讨论与其相关的注意事项。

将装入点添加到共享磁盘上与将装入点添加到非共享磁盘上相同。装入点由 Win32 API SetVolumeMountPoint 添加,由 DeleteVolumeMountPoint 删除。这与磁盘资源动态链接库 (DLL) 无关。资源 DLL 仅关心卷全局通用标识 (GUID),而不是实际的装入点。

有三种向系统添加装入点的方法(对于群集系统和非群集系统相同):
逻辑磁盘管理器 (Diskmgmt.msc)
从命令提示符处运行 Mountvol.exe
使用 Win32 API SetVolumeMountPoint 和 DeleteVolumeMountPoint 编写您自己的 .exe 文件

回到顶端

更多信息

<script type="text/javascript">loadTOCNode(1, 'moreinformation');</script>
在服务器群集上创建卷装入点时,需要考虑以下与卷装入点相关的主要事项:
不能在群集和非群集磁盘之间创建装入点。
不能创建“仲裁”磁盘的装入点。
如果您具有从一个共享磁盘到另一个共享磁盘的装入点,必须确保它们位于同一组内,并且装入的磁盘依赖于根磁盘。

回到顶端

在群集服务器上安装卷装入点

<script type="text/javascript">loadTOCNode(2, 'moreinformation');</script>
1.在本地使用管理权限登录到拥有根磁盘(您要将目录移植到该磁盘中)的节点。该磁盘就是将包含装入点的磁盘。
2.打开群集管理器 (CluAdmin.exe),并暂停群集中的其它节点。
3.将磁盘分区,然后创建装入点。为此,请执行以下步骤:
a. 要打开磁盘管理,请单击开始,再单击运行,键入 diskmgmt.msc,然后单击确定
b. 选择要移植到目录中的磁盘。
c. 用鼠标右键单击磁盘上的可用空间,然后单击新建磁盘分区
d. 创建主磁盘分区,然后单击下一步
e. 设置分区的大小。
f. 选择“装入以下空白 NTFS 文件夹中”,单击浏览以找到要在其中创建装入点的目录,然后单击新建文件夹(这将是卷装入到的根目录)。单击新创建的文件夹,再单击确定,然后单击下一步
g. 使用 NTFS 文件系统格式化分区。

这既是 Microsoft Cluster Server (MSCS) 的要求,也是“卷装入点”功能的要求。
4.新建磁盘资源,然后设置依赖项。为此,请执行以下步骤:
a. 打开群集管理器。
b. 对于刚在其中创建卷装入点的磁盘,用鼠标右键单击拥有该磁盘的“共享磁盘”资源的组。单击新建,然后单击资源
c. 对于资源类型,请单击物理磁盘。验证它与根磁盘位于同一组中。单击下一步
d. 确保所有节点都是可能的所有者,然后单击下一步
e. 双击根磁盘,使该卷装入点磁盘依赖于根磁盘。单击下一步
f. 在“磁盘参数”窗口中,应该看到磁盘被列出。磁盘将按磁盘编号和分区编号列出,这不同于标准 MSCS 磁盘(标准 MSCS 磁盘按驱动器号列出)。单击完成
g. 用鼠标右键单击新磁盘资源,然后单击联机
5.中止暂停所有其他节点,并测试您是否可以将组故障转移到每个节点并访问新创建的装入点。
有关如何从命令提示符处创建卷装入点的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
205524 (http://support.microsoft.com/kb/205524/EN-US/) How to Create and Manipulate NTFS Junction Points
有关操作系统如何处理驱动器的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
234048 (http://support.microsoft.com/kb/234048/EN-US/) How Windows 2000 Assigns, Reserves, and Stores Drive Letters

回到顶端


这篇文章中的信息适用于:
Microsoft Windows Server 2003 Enterprise Edition
Microsoft Windows Server 2003 Datacenter Edition

回到顶端


转自:[http://www.cnblogs.com/henryzc/articles/316806.html]

      昨天,在CSDN中看见帖子寻求解决挂载盘符的问题,今天把它搞定了。
      改变盘符主要是用SetVolumeMountPointDeleteVolumeMountPoint 两个函数。DeleteVolumeMountPoint 很简单就不多说了。SetVolumeMountPoint 的使用主要是要找到被挂载设备的VolumeName。但是设备被卸载以后用GetVolumeNameForVolumeMountPoint根本取不到VolumeName,怎么办呢?
      微软XP的系统文件夹里面有一个叫diskpart.exe的命令行工具,用它可以改变盘符。那么它是怎么做到的呢?
简单的分析(用VC6自带的工具DEPENDS.EXE)就可以看见这个程序使用了很多Setup API函数,我判断使用SetupDiEnumDeviceInfo来取得VolumeName的ClassGUID,但是结果发现取到的ClassGUID和用GetVolumeNameForVolumeMountPoint获取的没有卸载前的VolumeName中的ClassGUID不一样。怎么办呢?
      没关系,让我们祭出屠龙刀:IDA Pro。如何反汇编分析不在本文的介绍了(挺麻烦,而我这人又比较懒嘿嘿)。我一阵海扁它,发现关键是要通过DefineDosDevice 函数将设备Attach到盘符上,然后用GetVolumeNameForVolumeMountPoint取到VolumeName,之后就可以用SetVolumeMountPoint将设备挂载到盘符上了。我把它写成了函数如果要加载盘符就可以使用(前提是盘符未被占用):

ChangeMountPoint( _T( " H:// " ), _T( " ///Device//HarddiskVolume2 " ), true );

卸载的话用:

ChangeMountPoint( _T( " H:// " ),NULL,  false );

下面是ChangeMountPoint函数的实现:

bool ChangeMountPoint(LPCTSTR lpDriveLetter,LPCTSTR lpDevice,bool bAddMountPoint)
{
    bool bRet 
=   false ;
    TCHAR szDriveLetterAndSlash[
4 =  { 0 };
    TCHAR szDriveLetter[
3 =  { 0 };
    TCHAR szUniqueVolumeName[MAX_PATH] 
=  { 0 };
    
if (lpDriveLetter  &&  lpDevice)
    {
        szDriveLetter[
0 =  lpDriveLetter[ 0 ];
        szDriveLetter[
1 =  TEXT(':');
        szDriveLetter[
2 =  TEXT('/ 0 ');
        
        szDriveLetterAndSlash[
0 =  lpDriveLetter[ 0 ];
        szDriveLetterAndSlash[
1 =  TEXT(':');
        szDriveLetterAndSlash[
2 =  TEXT('//');
        szDriveLetterAndSlash[
3 =  TEXT('/ 0 ');
        
if  ( bAddMountPoint )
        {
            
// Try to Attach lpDevice to lpDriveLetter
            bRet  =  DefineDosDevice (DDD_RAW_TARGET_PATH, szDriveLetter,
                lpDevice);
            
            
if  (bRet)
            {
                
if  ( ! GetVolumeNameForVolumeMountPoint (szDriveLetterAndSlash,
                    szUniqueVolumeName,
                    MAX_PATH))
                {
                    
// Can't Find Attached lpDevice 's VolumeName
                    szUniqueVolumeName[ 0 =  '/ 0 ';
                }
                
                bRet 
=  DefineDosDevice ( 
                    DDD_RAW_TARGET_PATH
| DDD_REMOVE_DEFINITION |
                    DDD_EXACT_MATCH_ON_REMOVE, szDriveLetter,
                    lpDevice);
                
                
if  ( ! bRet)
                    
return  bRet;
                
                bRet 
=  SetVolumeMountPoint(szDriveLetterAndSlash, 
                    szUniqueVolumeName);
            }
        }
        
else
        {
            bRet 
=  DeleteVolumeMountPoint (szDriveLetterAndSlash);
        }
    }
    
    
return  bRet;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值