神奇的小白竟然开始触摸读取硬盘读取了,可喜可贺,可喜可贺
PS:写的时候记得头文件: Fileapi.h
一、 简介
二、 参数
三、 返回值
创建或打开文件或I / O设备,返回值句柄
HANDLE CreateFileA(
LPCSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
1.lpFileName
要创建或打开的文件或设备的名称。
举个小栗子:\.\PhysicalDrive0(本地的硬盘)
2.dwDesiredAccess
所请求的对文件或设备的访问,可以分为读、写或者合在一起。
读:GENERIC_READ
写:GENERIC_WRITE
合在一起:GENERIC_READ | GENERIC_WRITE
3.dwShareMode
请求共享模式。对其属性或扩展属性的访问请求进行约束。
(必须与第二参数匹配,且参数也可以像第二参数一样合并的写入)
名称 | 值 | 定义 |
---|---|---|
0 | 0 | 阻止其他进程在请求删除,读取或写入访问时打开文件或设备。 |
1 | FILE_SHARE_READ | 在文件或设备上启用后续打开操作,以请求读取访问权限。 |
2 | FILE_SHARE_WRITE | 在文件或设备上启用后续打开操作以请求写访问权限。 |
4 | FILE_SHARE_DELETE | 在文件或设备上启用后续打开操作以请求删除访问。 |
PS:这如果出现和参数不匹配的操作,则会无法打开文件或者设备
4.lpSecurityAttributes
指向SECURITY_ATTRIBUTES 结构的指针,该结构包含两个单独但相关的数据成员:一个可选的安全描述符,以及一个布尔值,该值确定子进程是否可以继承返回的句柄。
PS:反正也不知道这个指针的具体用处,习惯使用NULL,此时CreateFile返回的句柄 不能被应用程序可能创建的任何子进程继承,并且与返回的句柄关联的文件或设备将获得默认的安全描述符。
5.dwCreationDisposition
对存在或不存在的文件或设备执行的操作。对于文件以外的设备,此参数通常设置为OPEN_EXISTING。
名称 | 值 | 定义 |
---|---|---|
1 | CREATE_NEW | 仅在尚不存在时创建一个新文件。 |
2 | CREATE_ALWAYS | 始终创建一个新文件。 |
3 | OPEN_EXISTING | 仅打开文件或设备(如果存在)。 |
4 | OPEN_ALWAYS | 始终打开文件。 |
5 | TRUNCATE_EXISTING | 打开文件并将其截断,以使其大小为零字节(仅存在时)。 |
6.dwFlagsAndAttributes
文件或设备属性和标志,FILE_ATTRIBUTE_NORMAL是文件的最常见默认值。
PS:通常都是被忽略的参数,可设置为0
7.hTemplateFile
具有GENERIC_READ访问权限的模板文件的有效句柄。模板文件为正在创建的文件提供文件属性和扩展属性。
PS:打开现有文件时,CreateFile会忽略此参数,亦可以设置为0。
如果函数成功,则返回值是指定文件,设备的打开句柄。
如果函数失败,则返回值为INVALID_HANDLE_VALUE
PS:可以通过句柄内容判断句柄是否有效
if (句柄!=INVALID_HANDLE_VALUE)
{// 成功
}
else
{
// 失败
}
鸣谢单位:
https://docs.microsoft.com/zh-cn/windows/win32/api/fileapi/nf-fileapi-createfilea