驱动器和目录 — 逻辑驱动器操作

1.卷标操作
驱动器创建,修改,删除卷标都可以使用SetVolumeLabel函数

szPath db 'c:',0
szVolume db 'System',0
invoke SetVolumeLabel,addr szPath,szVolume

szPath:指出了要设置卷标的逻辑驱动器的根目录
szVolume:指向包含卷标字符串的缓冲区
删除卷标的二种方法

szPath db 'c:',0
szVolume db 0
invoke SetVolumeLabel,addr szPath,szVolume

szPath db 'c:',0
invoke SetVolumeLabel,addr szPath,NULL

如果函数执行成功返回值是TRUE,否则返回FALSE

2.逻辑驱动器的检测
检测系统中当前存在多少个逻辑驱动器可以使用GetLogicalDrives函数,它没有输入参数,它返回一个32位整数,用其中的每一位代表是否存在一个逻辑驱动器.由于系统中可用的盘符公有26个(A~Z),所以用第0到第25位表示A:~Z:

如果认为认为上面的函数做位测试比较麻烦也可以使用GetLogicalDriveStrings,这个函数返回字符串类型的逻辑驱动器列表:

invoke GetLogicalDriverStrings,dwBufferSize,lpBuffer

lpBuffer:指向一个缓冲区,函数在这里返回'A:',0,'B:',0 格式的字符串
dwBufferSize:指出缓存区的大小,如果缓冲区不够大,后面的数据会被截尾

检测驱动器类型的工作可以用GetDriveType函数来完成

szPath db 'c:',0
invoke GetDriveType,addr szPath

szPath指向存放在逻辑驱动器根目录的字符串的缓冲区,函数返回值是驱动器的类型,是下面7个位的一种
0:驱动器类型无法检测
1:指定的根目录不存在
DRIVE_REMOVABLE:可移动介质,如软盘
DRIVE_FIXED:固定盘,如硬盘中的逻辑驱动器
DRIVE_REMOTE:远程驱动器,如网络上映射的驱动器
DRIVE_CDROM:光盘
DRIVE_RAMDISK:内存虚拟盘

如果需要更详细的情况,可以使用GetVolumeInformation函数

invoke GetVolumeInformation,lpRootPathName,lpVolumeNameBuffer,dwVolumeNameSize,lpVolumeSerialNumber,lpMaximumComponentLength,lpFileSystemFlags,lpFileSystemNameBuffer,dwFileSystemNameSize

lpRootPathName:指向需要检测的驱动器根目录字符串,如果是网络驱动器,可以是'\服务器名共享名'
lpVolumeNameBuffer:指向一个字符串缓冲区,用来返回驱动器的卷标,缓冲区长度由dwVolumeNameSize参数指出
lpVolumeSerialNumber:指向一个双字变量,在这里返回逻辑驱动器的序列号,序列号是驱动器被格式化的时候由系统随机产生的一个32位数,它保存在位于驱动器第一个扇区的引导记录中.
lpMaximumComponentLength:指向一个双字变量,在这里返回最大允许的文件名长度,windows中为255
lpFileSystemFlags:指向一个双字变量,在这里返回一些逻辑驱动器的属性标志返回值可能是下列值的组合
FS_CASE_IS_PRESERVED:文件系统保存文件名时保持它的大小写
FS_CASE_SENSITIVE:支持区分大小写的文件名
FS_UNICODE_STORED_ON_DISK:允许存放Unicode格式的文件名
FS_PERSISTENT_ACLS:支持ACL
FS_FILE_COMPRESSION:支持文件压缩
FS_VOL_IS_COMPRESSED:支持卷压缩
lpFileSystemNameBuffer:指向一个字符串缓冲区,用来接收文件系统字符串,类似于'NTFS'或'FAT32'之类的dwFileSystemNameSize指定了这个缓冲区的长度

检测逻辑驱动器剩余空间GetDiskFreeSpace用法如下

invoke GetDiskFreeSpace,lpRootPathName,lpSectorsPerCluster,lpBytesPerSector,lpNumberOfFreeClusters,lpTotalNumberOfClusters

lpRootPathName:指向驱动器根目录字符串
lpSectorsPerCluster:返回每簇的扇区数
lpBytesPerSector:返回每扇区的字节数
lpNumberOfFreeClusters:返回驱动器中未使用的簇的数量
lpTotalNumberOfClusters:返回驱动器中簇的总数

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注