学习API 设置卷的挂载点,列举指定卷中具有的挂载点和路径

#define _WIN32_WINNT 0x0501
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#define BUFSIZE MAX_PATH
#define FILESYSNAMEBUFSIZE MAX_PATH
/**************************************
* ProcessVolumeMountPoint
* 功能:列举挂载点
**************************************/
BOOL ProcessVolumeMountPoint(HANDLE hPt,
TCHAR *ptBuf,DWORD dwPtBufSize,
TCHAR *Buf)
{
BOOL bFlag; //结果
TCHAR Path[BUFSIZE]; //全路径
TCHAR Target[BUFSIZE]; //挂载点设备
printf("\tVolume mount point found is \"%s\"\n",ptBuf);
lstrcpy(Path,Buf);
lstrcat(Path,Buf);
bFlag = GetVolumeNameForVolumeMountPoint(Path,Target,BUFSIZE);
if (!bFlag)
{
printf("\tAttempt to get volume name for %s failed.\n",Path);
}else{
printf("\tTarget of the volume mount point is %s.\n",Target);
}
bFlag = FindNextVolumeMountPoint(hPt,ptBuf,dwPtBufSize);
return bFlag;
}
/*******************************************************
* ProcessVolume
* 功能:判断卷类型,列举挂载点
*******************************************************/
BOOL ProcessVolume(HANDLE hVol,TCHAR *Buf,DWORD iBufSize)
{
BOOL bFlag; //返回标志
HANDLE hPt; //卷句柄
TCHAR PtBuf[BUFSIZE]; //挂载点路径
DWORD dwSysFlags; //文件系统标记
TCHAR FileSysNameBuf[FILESYSNAMEBUFSIZE];
printf("Volume found is \"%s\".\n",Buf);
GetVolumeInformation(Buf,NULL,0,NULL,NULL,
&dwSysFlags,FileSysNameBuf,FILESYSNAMEBUFSIZE);
if (!(dwSysFlags & FILE_SUPPORTS_REPARSE_POINTS))
{
printf("\tThis file system does not support volume mount points.\n");
}
else
{
//本卷中的挂载点
hPt = FindFirstVolumeMountPoint(
Buf, //卷的路径
PtBuf, //挂载点路径
BUFSIZE);
if (hPt == INVALID_HANDLE_VALUE)
{
printf("\tNo volume mount points found!\n");
}
else
{
//处理挂载点
bFlag = ProcessVolumeMountPoint(hPt,
PtBuf,BUFSIZE,Buf);
while(bFlag)
bFlag = ProcessVolumeMountPoint(hPt,PtBuf,BUFSIZE,Buf);
FindVolumeMountPointClose(hPt);
}
}
//下一个
bFlag = FindNextVolume(hVol,Buf,iBufSize);
return bFlag;
}
/*********************
* int GetMountPoint(void)
* 功能:获取挂载点
*********************/
int GetMountPoint(void)
{
TCHAR buf[BUFSIZE]; //卷标示符
HANDLE hVol; //卷句柄
BOOL bFlag; //结束标志
printf("Volume mount points info of this computer:\n\n");
hVol = FindFirstVolume(buf,BUFSIZE);
if (hVol == INVALID_HANDLE_VALUE)
{
printf("No volumes found!\n");
return -1;
}
bFlag = ProcessVolume(hVol,buf,BUFSIZE);
while(bFlag)
{
bFlag = ProcessVolume(hVol,buf,BUFSIZE);
}
bFlag = FindVolumeClose(hVol);
return bFlag;
}
/***********************
* void Usage(PCHAR argv)
* 功能:使用方法
***********************/
void Usage(PCHAR argv)
{
printf("\n\n\t%s,mount a volume at a mount point.\n",argv);
printf("\tFor example, \"mount D:\\mnt\\drives\\E:\\\"\n");
}
/*****************************
* main
* 功能: 入口函数
*****************************/
int main(int argc,PCHAR argv[])
{
BOOL bFlag;
CHAR Buf[BUFSIZE];
if (argc != 3)
{
GetMountPoint();
Usage(argv[0]);
return -1;
}
bFlag = GetVolumeNameForVolumeMountPoint(
argv[2], //输入挂载点或目录
Buf, //输出卷名
BUFSIZE);
if (bFlag != TRUE)
{
printf("Retrieving volume name for %s failed.\n");
return -2;
}
printf("Volume name of %s is %s\n",argv[2],Buf);
bFlag = SetVolumeMountPoint(
argv[1], //挂载点
Buf //需要挂载的卷
);
if (!bFlag)
{
printf("Attempt to mount %s at %s failed.error code is\n",argv[2],argv[1],GetLastError());
}
getchar();
return bFlag;
}

时间: 2024-10-10 20:39:20

学习API 设置卷的挂载点,列举指定卷中具有的挂载点和路径的相关文章

Docker 学习笔记【3】 Docker 仓库、数据卷、数据卷容器,网络基础实操。高级网络配置学习

Docker 学习笔记[4] 高级网络配置实操,实战案例实验 =========================================================================== Docker 学习笔记[2] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,记录开始 =========================================================================== 被格式化的脚本内容: #开头代表

硬盘的挂载和磁盘逻辑卷的管理

硬盘的挂载和磁盘逻辑卷的管理   本周学习了一些逻辑卷的创建:扩展逻辑卷:压缩逻辑卷:删除逻辑卷以及快照的管理,但是首先我们要来说一下如何把一个崭新的硬盘挂载到系统上,创建物理盘. 创建物理盘   首先我们把一块硬盘挂载(mount)到系统上,例如这个硬盘叫"sda",利用fdisk /dev/sda命令进行分区:进入后第一个命令输入n 创建,然后p选择类型,起始块数enter默认即可,然后输入例如+5G,然后t选择类型8e,最后w写入即可,随即我们使用命令vgcreate vg0 /

Jqgrid学习API

JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGrid Demo 是一个在线的演示项目.在这里,可以知道jqgrid可以做什么事情. 下面是转自其他人blog的一个学习资料,与其说是学习资料,说成查询帮助文档更加合适. jqGrid学习之 ------------- 安装 jqGrid安装很简单,只需把相应的css.js文件加入到页面中即可. 按照官网文档: /myproject/css/             ui.jqgrid.css    

大数据学习之_01_Linux学习_02_组管理和权限管理+定时任务调度+linux磁盘分区、挂载+linux的网络配置+进程管理(重点)+软件包管理+大厂面试题+感悟分享+资料附录

10 组管理和权限管理10.1 Linux组的基本介绍10.2 文件/目录的所有者10.3 文件/目录的所在组10.4 权限的基本介绍10.5 rwx权限详解10.6 修改权限指令-chmod10.7 修改文件所有者-chown10.8 修改文件所在组-chgrp10.9 最佳实践-警察和土匪游戏11 定时任务调度11.1 crond任务调度12 linux磁盘分区.挂载12.1 分区的基本知识12.2 Linux分区12.3 挂载的经典案例12.4 查询系统整体磁盘使用情况12.5 查询指定目

Linux学习—centos7设置开机非图形化

centos7修改默认开机状态 在centos6中的开机默认开机状态保存在/etc/inittab文件中,那centos7中会不会发生变化呢,我们不妨同样地查看centos7中的/etc/inittab文件: 发现和centos6中的内容不一样,大致内容为centos7中不再使用runlevels的概念,而是改用targets来代表运行状态,multi-user.target对应centos6中的runlevel 3(多用户模式),graphical.target对应于centos6中的runl

GTK进阶学习:设置窗口背景图(可指定其大小)

设置窗口背景图(可指定其大小): #include <gtk/gtk.h> /* 功能: 设置背景图 * widget: 主窗口 * w, h: 图片的大小 * path: 图片路径 */ void chang_background(GtkWidget *widget, int w, int h, const gchar *path) { gtk_widget_set_app_paintable(widget, TRUE); //允许窗口可以绘图 gtk_widget_realize(widg

shell脚本重新挂载出问题的卷

#!/bin/bash#卷的全路径示例#pathexample =mount -t cetusfs 127.0.0.1:/cinderv/var/lib/cinder/volumes/0f6a20f4d81ed9db37f2a87260dd7181 volumesPath=`df -h |awk '{print$1$6}'|grep volumes` #获取卷路径pathRow=`df -h |awk '{print$1$6}'|grep volumes|wc -l` #列出卷的数量print

物理卷操作命令:pvcreate,pvscan,pvdisplay.卷组操作命令:vgcreate,vgdisplay.

新硬盘创建LVM系统过程. 物理卷操作命令:pvcreate,pvscan,pvdisplay. 卷组操作命令:vgcreate,vgdisplay. 逻辑卷操作命令:lvcreate,lvdisplay. Linx卷管理详解 VG LV PV 作者:吴伟龙 一. 前言 每个Linux使用者在安装Linux时 都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值.因为如果估计不准确,当

物理卷操作命令:pvcreate,pvscan,pvdisplay.卷组操作命令:vgcreate,vgdisplay. (转)

新硬盘创建LVM系统过程. 物理卷操作命令:pvcreate,pvscan,pvdisplay. 卷组操作命令:vgcreate,vgdisplay. 逻辑卷操作命令:lvcreate,lvdisplay. Linx卷管理详解 VG LV PV 作者:吴伟龙 一. 前言 每个Linux使用者在安装Linux时 都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值.因为如果估计不准确,当