zoukankan      html  css  js  c++  java
  • Windows API 第19篇 FindFirstVolumeMountPoint FindNextVolumeMountPoint

    相关函数:
    HANDLE FindFirstVolumeMountPoint(
                                                                  LPTSTR lpszRootPathName,     // volume name
                                                                  LPTSTR lpszVolumeMountPoint, // output buffer
                                                                  DWORD cchBufferLength        // size of output buffer
                                                                 );

    BOOL FindNextVolumeMountPoint(
                                                                 HANDLE hFindVolumeMountPoint,    // search handle
                                                                 LPTSTR lpszVolumeMountPoint,     // output buffer
                                                                 DWORD cchBufferLength            // size of output buffer
                                                            );

    BOOL FindVolumeMountPointClose
                                                                HANDLE hFindVolumeMountPoint    // search handle
                                                              );

    说明:
    这几个函数都是与驱动器挂载点操作相关的,关于挂载点就不多介绍了,可以在磁盘管理中,选择更改驱动器号和路径里设置,设置后自己看看效果就理解挂载点的意思了。
    这三个函数的使用和FindFirstVolume, FindNextVolume, FindVolumeClose函数的使用差不多,而这里用FindFirstVolume函数找到的卷名恰好可以做为FindFirstVolumeMountPoint的第一个参数,

    所以他们可以一起使用,不过我测试过直接拿诸如“C:\”的参数传到FindFirstVolumeMountPoint的第一个参数里也是可以成功的。

    下面写一个测试代码:

    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	CHAR szVolumeName[MAX_PATH] = { 0 };
    	CHAR szVolumeMountPoint[MAX_PATH] = { 0 };
    
    	HANDLE hVolume;
    	HANDLE hVolumeMountPoint;
    	//查找第一个驱动器名字
    	hVolume = FindFirstVolumeA(szVolumeName, MAX_PATH);
    	if (INVALID_HANDLE_VALUE == hVolume)
    		return 0;
            printf("%s 
    ", szVolumeName);
            //根据名字找挂载点
    	hVolumeMountPoint = FindFirstVolumeMountPointA(szVolumeName, szVolumeMountPoint, MAX_PATH);
    	if (INVALID_HANDLE_VALUE == hVolumeMountPoint)
    	{
    		FindVolumeClose(hVolume);
                    return 0;
    	}
    	while (FindNextVolumeMountPointA(hVolumeMountPoint, szVolumeMountPoint, MAX_PATH))
    	{
    		printf("%s 
    ", szVolumeMountPoint);
    	}
    
    	
    	while (FindNextVolumeA(hVolume, szVolumeName, MAX_PATH))
    	{
    		printf("%s 
    ", szVolumeName);
    
    		hVolumeMountPoint = FindFirstVolumeMountPointA(szVolumeName, szVolumeMountPoint, MAX_PATH);
    		do
    		{
    			if (INVALID_HANDLE_VALUE == hVolumeMountPoint)
    			{
    				break;
    			}
    
    			printf("%s 
    ", szVolumeMountPoint);
    		}
    		while (FindNextVolumeMountPointA(hVolumeMountPoint, szVolumeMountPoint, MAX_PATH));
    	}
    	FindVolumeClose(hVolume);
    	FindVolumeMountPointClose(hVolumeMountPoint);
    }
    

     分析:一般我们的机上子没有挂载点,所以上面的程序找不到挂载点,只能看到GetFirstVolume函数有返回值。不过可以手动设置挂载点,只要你设置挂载点后就会看到GetFirstVolumeMountPoint也会返回有效句柄了

  • 相关阅读:
    UVa 1151 Buy or Build【最小生成树】
    UVa 216 Getting in Line【枚举排列】
    UVa 729 The Hamming Distance Problem【枚举排列】
    HDU 5214 Movie【贪心】
    HDU 5223 GCD
    POJ 1144 Network【割顶】
    UVa 11025 The broken pedometer【枚举子集】
    HDU 2515 Yanghee 的算术【找规律】
    Java基本语法
    Java环境变量,jdk和jre的区别,面向对象语言编程
  • 原文地址:https://www.cnblogs.com/priarieNew/p/9755437.html
Copyright © 2011-2022 走看看