【CreateFileA】创建或打开文件或I / O设备

1 篇文章 0 订阅

神奇的小白竟然开始触摸读取硬盘读取了,可喜可贺,可喜可贺
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
请求共享模式。对其属性或扩展属性的访问请求进行约束。

(必须与第二参数匹配,且参数也可以像第二参数一样合并的写入)

名称定义
00阻止其他进程在请求删除,读取或写入访问时打开文件或设备。
1FILE_SHARE_READ在文件或设备上启用后续打开操作,以请求读取访问权限。
2FILE_SHARE_WRITE在文件或设备上启用后续打开操作以请求写访问权限。
4FILE_SHARE_DELETE在文件或设备上启用后续打开操作以请求删除访问。

PS:这如果出现和参数不匹配的操作,则会无法打开文件或者设备

4.lpSecurityAttributes
指向SECURITY_ATTRIBUTES 结构的指针,该结构包含两个单独但相关的数据成员:一个可选的安全描述符,以及一个布尔值,该值确定子进程是否可以继承返回的句柄。
PS:反正也不知道这个指针的具体用处,习惯使用NULL,此时CreateFile返回的句柄 不能被应用程序可能创建的任何子进程继承,并且与返回的句柄关联的文件或设备将获得默认的安全描述符。

5.dwCreationDisposition
对存在或不存在的文件或设备执行的操作。对于文件以外的设备,此参数通常设置为OPEN_EXISTING。

名称定义
1CREATE_NEW仅在尚不存在时创建一个新文件。
2CREATE_ALWAYS始终创建一个新文件。
3OPEN_EXISTING仅打开文件或设备(如果存在)。
4OPEN_ALWAYS始终打开文件。
5TRUNCATE_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

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值