首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 软件相关 > 如何用自己的方法实现修改盘符
【标  题】:如何用自己的方法实现修改盘符
【关键字】:
【来  源】:http://blog.csdn.net/Sevk/archive/2007/04/13/1563559.aspx

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

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

官方:

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

文章编号 : 280297
最后修改 : 2004年3月11日
修订 : 1.0

概要

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

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

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

回到顶端

更多信息

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

回到顶端

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

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;
}
Solid Converter PDF,PDF转Word的利器:【上一篇】
配置Windows 2003环境中的域基础结构:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • Frame Relay Switch
  • C语言破解CMOS密码的魅力
  • 我对AS一点都不会 ? 好吧,来做个最简单的使用DATA对象做得电子表的例子
  • C++多线程编程--hellow_thread
  • 从SWT控件中托拽对象到GEF编辑器中
  • System.Threading.Timer与System.Timers.Timer的区别
  • BSTR类型解析
  • 购买笔记本硬盘应当注意的几个问题
  • MATLAB 高维数组
  • 汇编学习笔记1-DEBUG的用法和第一个汇编程序(1)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.