win代码
1.代码:
GetLogicalDriveStrings(1024,(LPWSTR)DStr);
解释
DWORD GetLogicalDriveStringsW(
[in] DWORD nBufferLength,
[out] LPWSTR lpBuffer
);
[in] nBufferLength
TCHAR 中由 lpBuffer 指向的缓冲区的最大大小。 此大小不包括终止 null 字符。 如果此参数为零,则不使用 lpBuffer,即缓冲区不可用
3。
[out] lpBuffer
指向一个缓冲区的指针,该缓冲区接收一系列以 null 结尾的字符串,一个用于系统中每个有效驱动器,另外还有一个 null 字符。 每个字符串都是设备名称。
例如:电脑上有C,D两个硬盘盘符,则它能得到一个字符串是:
'C',':','/',' ','D',':','/',' ',' '
即:C:/<null>D:/<null><null>
返回值:是获得的字符串长度,即硬盘盘符的个数乘以4,
即 将所有的卷存储在buffer中,格式为:C:/NULLD:/NULLE:/NULL
2.代码:
DType = GetDriveType((LPCWSTR)DStr+i*4);
解释:
对设备类型进行判断
返回值:
-
#define DRIVE_UNKNOWN 0 //The drive type cannot be determined. 未知
-
#define DRIVE_NO_ROOT_DIR 1 //The root path is invalid; for example, there is no volume is mounted at the path. 可移动磁盘
-
#define DRIVE_REMOVABLE 2 //The drive has removable media; for example, a floppy drive, thumb drive, or flash card reader. U盘,软盘
-
#define DRIVE_FIXED 3//The drive has fixed media; for example, a hard drive or flash drive. 本地硬盘,移动硬盘
-
#define DRIVE_REMOTE 4 //The drive is a remote (network) drive.网络磁盘
-
#define DRIVE_CDROM 5 //The drive is a CD-ROM drive. CD-ROM
-
#define DRIVE_RAMDISK 6 //The drive is a RAM disk. RAM磁盘
3.代码
fResult = GetDiskFreeSpaceEx ( //计算磁盘的各种容量
(LPCWSTR)DStr+i*4, // [IN]指定哪个磁盘
(PULARGE_INTEGER)&i64FreeBytesToCaller, // [OUT]磁盘空闲容量
(PULARGE_INTEGER)&i64TotalBytes, // [OUT]磁盘总容量
(PULARGE_INTEGER)&i64FreeBytes); // [OUT]可用的磁盘空闲容量
返回值:fResult是bool类型,能够判断驱动器是否在工作状态
4.代码
GetVolumeInformation(
lpRootPathName, // [IN]卷所在的根目录,如:"C:\\", 如果为NULL,表示当前目录
(LPWSTR)szVolumeName, // [OUT]输出参数,存放卷名缓冲区
255, // [IN]卷名缓冲区长度
&VolumeSerialNumber, // [OUT]卷序列号
lpMaximumComponentLength, // [OUT]最大文件文件名组件长度,随文件系而变化
lpFileSystemFlags, // [OUT]文件系统的一些属性,通常为一些宏的组合
(LPWSTR)szFileSystem, // [OUT]说明何种文件系统,例如NTFS, FAT等
255); // [IN]文件系统缓冲区长度
5.代码
//创建文件 执行成功后会返回文件句柄
hDevice = CreateFile(
driver_disknumber, // 指向文件名的指针
GENERIC_READ | GENERIC_WRITE, // // 访问模式(写 / 读)
FILE_SHARE_READ | FILE_SHARE_WRITE, //共享模式 若指明多个属性,可用“|”将几个属性做或运算
NULL, // 指向安全属性的指针 表示本文件句柄的安全属性,能影响其是否可被子进程继承等操作,
//若设置为NULL 则子进程不能继承本句柄
OPEN_EXISTING, // 如何创建:指定是否创建文件、覆盖现有文件等,此处表示打开现有文件,若文件不存在则失败
0, // 文件属性
NULL); // 用于复制文件句柄,一般情况下设置为NULL
result = DeviceIoControl( // 返回值是bool类型
hDevice, // 要操作的设备的句柄
IOCTL_STORAGE_GET_DEVICE_NUMBER, // dwIoControlCode 控制设备的指令
NULL, // lpInBuffer 设备操控请求数据的缓冲区基址,如果dwIoControlCode 指定了一个操作,该操作不需要输入数据,那么这个参数设为NULL
0, // nInBufferSize lplnBuffer的size
&number, // output buffer 存放输出数据的buffer
sizeof(number), // size of output buffer
&readed, // number of bytes returned 实际输出数据的bytes
NULL // OVERLAPPED structure
);
CloseHandle(hDevice); //关闭打开的对象句柄