【CreateFileA】创建或打开文件或I / O设备
神奇的小白竟然开始触摸读取硬盘读取了,可喜可贺,可喜可贺
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
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
