[WinAPI] API 5 [遍历驱动器并获取驱动器属性]

简介:


 

 

(1) GetLogicalDrives。
获取主机中所有的逻辑驱动器,以BitMap的形式返回.
◇返回值
GetLogicalDrive函数返回一个DWORD类型的值,第一位表示所对应的驱动器是否存在。一般情况下DWORD的数据长度是32位,在这个DWORD中,每一位对应了一个逻辑驱动器是否存在。第二位如果是“1”则表示驱动器“B:”存在,第4位如果是“1”则表示驱动器“D:”是存在的,以此类推。


(2) GetLogicalDriverStrings。
获取主机中所有驱动器,以驱动器根路径字符串返回.
◇参数
nBufferLength:参数lpBuffer所指向的内存空间的大小,以字节为单位。
lpBuffer:指向存储返回结果字符串的内存空间。

◇返回值
函数的返回值指明了函数调用是否成功,如果成功则返回缓冲区中返回结果的总长度。如果返回值大于nBufferLength,说明给定的缓冲区大小不够,返回值是实际需要的大小。如果返回0,则说明函数运行出错。
◇使用说明
这个API实现了与GetLogicalDrives同样的功能,却以一种更直观的方式返回执行结果。函数执行结果放在lpBuffer所指向的内存区域中,此内存区域大小由nBufferLength参数指定,使函数返回结果不至于溢出。在调用此函数前需保证内存分配。

 

(3)FindFirstVolume。
查找主机中的第一个驱动器,返回驱动器设备名.

◇参数
lpszVolumeName:指向驱动器名的内存缓冲区。
cchBufferLength:参数lpszVolumeName所指向的缓冲区大小,以字节为单位。
◇返回值
驱动器查找句柄,F猫NextVolume和FindVolumeColse的参数,如果执行失败,返回NULL。


(4)FindNextVolume
查找主机中后继的逻辑驱动器◇参数
hFindVolume: FindFirstVolume所返回的驱动器查找句柄。
lpszVolumeName:指向保存驱动器名的内存缓冲区。
cchBufferLength:参数lpszVolumeName所指向的缓冲区大小,以字节为单位。
◇返回值
返回BOOL表示是否成功,如果失败说明已经查找完成所有逻辑驱动器。


(5)FindVo1umeClose。
关闭FindFirstVolume打开的卷遍历句柄◇参数
hFindVolume:要关闭的驱动器查找句柄。
◇返回值
返回BOOL值表示是否成功关闭句柄。


(6) GetDriveType。
获取驱动器类型◇参数
lpRootPathIName:驱动器根路径,如“C:\”。
◇返回值
驱动器的类型,如DRIVE' FIXED表示硬盘,DRIVE_CDROM表示光盘等。详见实例4-2的GetDirverInfo函数。


(7) GetVolumeInformation。
获取逻辑驱动器信息,◇参数
lpRootPathName:输入参数,指向所要获取属性的驱动器的根路径字符串。
lpVolumeNameBuffer:输出参数,返回驱动器名。
nVolumeNameSize:输入参数,lpVolumeNameBuffer的内存缓冲区大小。
lpVolumeSerialNumber:输出参数,存储驱动器序列号。
lpMaximumComponentLength:输出参数,返回文件系统所支持的文件组成部分的最大值。
lpFileSystemFlags:输出参数,属性可以用来判断多种驱动器属性值,如FILE_VOLUME_
QUOTAS表示支持磁盘配额,FILE_SUPPORTS_ENCRYPTION表示文件系统是否支持EFS加密等。
lpFileSystemNameBuffer:输出参数,表示文件系统类型,如“NTFS”、“CDFS”等。
nFileSystemNameSize: lpFileSystemNameBuffer的缓冲区大小。
◇返回值
返回BOOL值,表示信息获取是否成功。

 

复制代码
  1 /*
  2 遍历驱动器并获取驱动器属性
  3 */
  4 #include<windows.h>
  5 #include<stdlib.h>
  6 #include<stdio.h>
  7 
  8 #define BUFSIZE 1024
  9 
 10 BOOL GetDirverInfo(LPSTR szDrive);
 11 
 12 void main()
 13 {
 14     CHAR szLogicalDriveStrings[BUFSIZE];
 15     PCHAR szDrive;
 16 
 17     ZeroMemory(szLogicalDriveStrings,BUFSIZE);
 18     //获取逻辑驱动器卷名
 19     GetLogicalDriveStringsA(BUFSIZE-1,szLogicalDriveStrings);
 20     szDrive=(PCHAR)szLogicalDriveStrings;
 21     //循环处理每个卷
 22     do
 23     {
 24         if(!GetDirverInfo(szDrive))
 25         {
 26             printf("\nGet Volume Information Error: %d",GetLastError());
 27         }
 28         szDrive+=(lstrlenA(szDrive)+1);
 29     }
 30     while(*szDrive!='\x00');
 31 }
 32 /*
 33 *功能:获取驱动器的属性
 34 *参数:指明获取驱动器的根路径,如C:\
 35 *返回:BOOL是否成功
 36 */
 37 BOOL GetDirverInfo(LPSTR szDrive)
 38 {
 39     UINT uDriveType;
 40     DWORD dwVolumeSerialNumber;
 41     DWORD dwMaximumComponentLength;
 42     DWORD dwFileSystemFlags;
 43     CHAR szFileSystemNameBuffer[BUFSIZE];
 44     CHAR szDirveName[MAX_PATH];
 45     printf("\n%s\n",szDrive);
 46     uDriveType=GetDriveTypeA(szDrive);
 47     switch(uDriveType){
 48     case DRIVE_UNKNOWN:
 49         printf("The drive type cannot be determind.");
 50         break;
 51     case DRIVE_NO_ROOT_DIR:
 52         printf("The root path is invalid,for example,no volume is mounted at the path.");
 53         break;
 54     case DRIVE_REMOVABLE:
 55         printf("The drive is a type that has removable media,for example,a floppy drive or removable hard disk.");
 56         break;
 57     case DRIVE_FIXED:
 58         printf("The drive is a type that cannot be removed,for example,a fixed hard drive.");
 59         break;
 60     case DRIVE_REMOTE:
 61         printf("The drive is a remote (network) drive.");
 62         break;
 63     case DRIVE_CDROM:
 64         printf("The drive is a CD-ROM drive.");
 65         break;
 66     case DRIVE_RAMDISK:
 67         printf("The drive is a RAM disk.");
 68         break;
 69     default:
 70         break;
 71     }
 72     if(!GetVolumeInformationA(
 73         szDrive,
 74         szDirveName,
 75         MAX_PATH,
 76         &dwVolumeSerialNumber,
 77         &dwMaximumComponentLength,
 78         &dwFileSystemFlags,
 79         szFileSystemNameBuffer,
 80         BUFSIZE
 81         ))
 82     {
 83         return false;
 84     }
 85     printf("\nVolume Serial Number is %u",dwVolumeSerialNumber);
 86     printf("\nMaximum Component Length is %u",dwMaximumComponentLength);
 87     printf("\nSystem Type is %s\n",szFileSystemNameBuffer);
 88     if(dwFileSystemFlags & FILE_VOLUME_QUOTAS)
 89     {
 90         printf("The file system supports disk quotas.\n");
 91     }
 92     if(dwFileSystemFlags & FILE_CASE_SENSITIVE_SEARCH)
 93     {
 94         printf("The file system supports case-sensitive file names.\n");
 95     }
 96     //you can use these value to get more information
 97     //FILE_CASE_PRESERVED_NAMES
 98     //FILE_CASE_SENSITIVE_SEARCH
 99     //FILE_FILE_COMPRESSION
100     //FILE_NAMED_STREAMS
101     //...
102     return TRUE;
103 }
复制代码
相关文章
|
13天前
|
数据采集 监控 搜索推荐
深度解析淘宝商品详情API接口:解锁电商数据新维度,驱动业务增长
淘宝商品详情API接口,是淘宝开放平台为第三方开发者提供的一套用于获取淘宝、天猫等电商平台商品详细信息的应用程序接口。该接口涵盖了商品的基本信息(如标题、价格、图片)、属性参数、库存状况、销量评价、物流信息等,是电商企业实现商品管理、市场分析、营销策略制定等功能的得力助手。
|
1月前
|
自然语言处理 安全 API
API First:模型驱动的阿里云API保障体系
本文介绍了阿里云在API设计和管理方面的最佳实践。首先,通过API First和模型驱动的方式确保API的安全、稳定和效率。其次,分享了阿里云内部如何使用CloudSpec IDL语言及配套工具保障API质量,并实现自动化生成多语言SDK等工具。接着,描述了API从设计到上线的完整生命周期,包括规范校验、企业级能力接入、测试和发布等环节。最后,展望了未来,强调了持续提升API质量和开源CloudSpec IDL的重要性,以促进社区共建更好的API生态。
|
1月前
|
人工智能 IDE API
AI驱动的开发者工具:打造沉浸式API集成体验
本文介绍了阿里云在过去十年中为开发者提供的API服务演变。内容分为两大部分:一是从零开始使用API的用户旅程,涵盖API的发现、调试与集成;二是回顾阿里云过去十年为开发者提供的服务及发展历程。文中详细描述了API从最初的手写SDK到自动化生成SDK的变化,以及通过API Explorer、IDE插件和AI助手等工具提升开发者体验的过程。这些工具和服务旨在帮助开发者更高效地使用API,减少配置和调试的复杂性,提供一站式的解决方案。
|
1月前
|
机器学习/深度学习 供应链 API
淘宝API接口:驱动电商运营的新引擎
淘宝API接口是一组允许开发者与淘宝平台进行数据交互的接口,覆盖了商品信息、订单信息、物流信息、用户信息等多个方面。这些接口使得开发者能够轻松实现商品查询、订单管理、用户认证等功能,从而实现与淘宝平台的无缝对接。
|
2月前
|
安全 测试技术 API
探秘驱动软件系统高效协同的高效协同之API接口
在数字化时代,API(应用程序编程接口)作为现代软件开发的核心组件,犹如无形的桥梁,连接不同应用、平台和服务,促进数据和功能自由流动。本文深入探讨API的基本概念、工作原理、核心组成部分及其在现代软件开发中的应用与最佳实践。通过统一数据格式、确保安全性和实施版本控制,API助力高效协同,并在社交媒体、物联网及企业系统中展现出巨大价值。未来,API将朝着智能化方向发展,同时面临并解决安全挑战,推动各行业的数字化转型。
114 6
|
6月前
|
数据采集 API 开发工具
淘系商品详情数据解析(属性youhui券sku详情图等)API接口开发系列
在电商领域,特别是像淘宝(淘系)这样的平台,商品详情数据对于商家、开发者以及数据分析师来说至关重要。这些数据包括但不限于商品属性、优惠券信息、SKU(Stock Keeping Unit)详情、商品图片、售后保障等。然而,直接访问淘宝的内部API接口通常需要特定的权限和认证,这通常只对淘宝的合作伙伴或内部开发者开放。 不过,对于需要这些数据的第三方开发者或商家,有几种方式可以间接获取或解析淘系商品详情数据: ——在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
6月前
|
Web App开发 缓存 小程序
【Azure API 管理】从微信小程序访问APIM出现200空响应的问题中发现CORS的属性[terminate-unmatched-request]功能
【Azure API 管理】从微信小程序访问APIM出现200空响应的问题中发现CORS的属性[terminate-unmatched-request]功能
|
6月前
|
JSON API 数据格式
【Azure Developer】使用Microsoft Graph API 如何批量创建用户,用户属性中需要包含自定义字段(如:Store_code,Store_name等)
【Azure Developer】使用Microsoft Graph API 如何批量创建用户,用户属性中需要包含自定义字段(如:Store_code,Store_name等)
|
6月前
|
JSON 前端开发 API
【淘系】商品详情属性解析(属性规格详情图sku等json数据示例返回参考),淘系API接口系列
在淘宝(或天猫)平台上,商品详情属性(如属性规格、详情图、SKU等)是商家在发布商品时设置的,用于描述商品的详细信息和不同规格选项。这些信息对于消费者了解商品特性、进行购买决策至关重要。然而,直接通过前端页面获取这些信息的结构化数据(如JSON格式)并非直接暴露给普通用户或开发者,因为这涉及到平台的商业机密和数据安全。 不过,淘宝平台提供了丰富的API接口(如淘宝开放平台API),允许有资质的开发者或合作伙伴通过编程方式获取商品信息。这些API接口通常需要注册开发者账号、申请应用密钥(App Key)和秘钥(App Secret),并遵守淘宝的API使用协议。
|
2天前
|
JSON API 数据格式
eBay商品详情接口(ebay API系列)
eBay 商品详情接口是电商从业者、开发者和数据分析师获取商品详细信息的重要工具,涵盖标题、价格、库存、卖家信息等。使用前需在 eBay 开发者平台注册并获取 API 凭证,通过 HTTP GET 请求调用接口,返回 JSON 格式数据。Python 示例代码展示了如何发送请求并解析响应,确保合法合规使用数据。
31 12

热门文章

最新文章