Windows API 之 CreateFile
Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. The function returns a handle that can be used to access the file or device for various types of I/O depending on the file or device and the flags and attributes specified.
函数原型如下:
HANDLE WINAPI CreateFile(
_In_ LPCTSTR lpFileName,
_In_ DWORD dwDesiredAccess,
_In_ DWORD dwShareMode,
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
_In_ DWORD dwCreationDisposition,
_In_ DWORD dwFlagsAndAttributes,
_In_opt_ HANDLE hTemplateFile
);
Return value
If the function succeeds, the return value is an open handle to the specified file, device, named pipe, or mail slot.
If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call GetLastError.
Remarks
CreateFile was originally developed specifically for file interaction but has since been expanded and enhanced to include most other types of I/O devices and mechanisms available to Windows developers. This section attempts to cover the varied issues developers may experience when using CreateFile in different contexts and with different I/O types. The text attempts to use the word file only when referring specifically to data stored in an actual file on a file system. However, some uses of file may be referring more generally to an I/O object that supports file-like mechanisms. This liberal use of the term file is particularly prevalent in constant names and parameter names because of the previously mentioned historical reasons.
When an application is finished using the object handle returned by CreateFile, use the CloseHandle function to close the handle. This not only frees up system resources, but can have wider influence on things like sharing the file or device and committing data to disk. Specifics are noted within this topic as appropriate.
CreateFile是创建一个File的内核对象,而不是创建物理磁盘上的“文件”。
这里提出一个问题,为什么要使用CloseHandle关闭句柄?
句柄是一种内核对象,系统维护着每一个内核对象,当每个内核对象引用记数为0时,系统就从内存中释放该对象,CloseHandle就是将该线程对象的引 用记数减1。所有的内核对象(包括线程Handle)都是系统资源,用了要还的,也就是说用完后一定要closehandle关闭之,如果不这么做,你系 统的句柄资源很快就用光了。CreateFile创建了一个内核对象,你如果不调用CloseHandle去关闭句柄,那它是无法自己释放的,所以在调用了CreateFile函数后,一定要记得调用CloseHandle。
进一步在问,何谓内核对象?
作为一个Windows软件开发人员,你经常需要创建、打开和操作各种内核对象。系统要创建和操作若干类型的内核对象,比如存取符号对象、事件对象、文件对象、文件映射对象、I/O完成端口对象、作业对象、信箱对象、互斥对象、管道对象、进程对象、信标对象、线程对象和等待计时器对象等。这些对象都是通过调用函数来创建的。内核对象在应用程序中只能通过Windows的一组函数Create*/Open*/CloseHandle以及相应的内核对象句柄(*Handle)来访问,内核对象句柄(32位Windows进程中句柄为32位,64位进程中,句柄也变成64位)是一个不透明值,其具体意义也可能与Windows不同版本的具体实现相关。例如,CreateFileMapping函数可使系统能够创建一个文件映射对象。每个内核对象只是内核分配的一个内存块,并且只能由该内核访问。该内存块是一种数据结构,它的成员负责维护该对象的各种信息。有些数据成员(如安全性描述符、使用计数等)在所有对象类型中是相同的,但大多数数据成员属于特定的对象类型。例如,进程对象有一个进程ID、一个基本优先级和一个退出代码,而文件对象则拥有一个字节位移、一个共享模式和一个打开模式。
使用计数
内核对象的所有者是内核,而非进程,而且进程操作内核对象的唯一手段就是用句柄作为参数来调用相应的Windows API(Create*/Open*/CloseHandle)。Windows操作系统可由此来实现对内核对象的使用计数,就是说同一个内核对象,Windows操作系统知道有多少进程在引用它。只有当引用计数变为0的时候,内核对象才被销毁,因此,一个内核对象的生命周期有可能比创建它的进程生命周期要长。
进程的内核对象句柄
进程的内核对象句柄都包含了进程句柄表的索引值,而进程的句柄表是在进程初始化的时候系统为其分配的;实际上将句柄值除以4(或者右移2位,以忽略Windows内部使用的最后两位)就能得到实际的句柄表索引值。
aaarticlea/png;base64,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" alt="" />
每个句柄包含一个索引值,能够只想该表中的一条记录,而该句柄表中每一条记录都是一个数据结构,这个数据结构包含了:
aaarticlea/png;base64,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" alt="" />
参考:
MSDN:https://msdn.microsoft.com/en-us/library/aa363858%28VS.85%29.aspx
http://www.cnblogs.com/wind-net/archive/2012/11/09/2762667.html
内核对象:http://www.cnblogs.com/Code-life/archive/2012/06/10/2543872.html
http://www.cnblogs.com/dlbrant/archive/2013/05/27/3102824.html
Windows API 之 CreateFile的更多相关文章
- Windows API 之 CreateFile、CreateFileMapping 、MapViewOfFile
CreateFile Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: ...
- 用Windows API函数(CreateFile/ReadFile/WriteFile/CloseHandle)完成文件拷贝程序(初级版)
文件拷贝程序 程序类型:Console 参数:源文件名 目的文件名 要求:1.只能使用Windows API函数(CreateFile/ReadFile/WriteFile/CloseHandle ...
- Delphi Windows API判断文件共享锁定状态(OpenFile和CreateFile两种方法)
一.概述 锁是操作系统为实现数据共享而提供的一种安全机制,它使得不同的应用程序,不同的计算机之间可以安全有效地共享和交换数据.要保证安全有效地操作共享数据,必须在相应的操作前判断锁的类型,然后才能确定 ...
- Windows API 函数列表 附帮助手册
所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...
- 初识【Windows API】--文本去重
最近学习操作系统中,老师布置了一个作业,运用系统调用函数删除文件夹下两个重复文本类文件,Linux玩不动,于是就只能在Windows下进行了. 看了一下介绍Windows API的博客: 点击打开 基 ...
- 关于Windows API、CRT和STL二三事
1.本文编写目的 本文是为了帮助一些人弄清一些关于Windows API, C运行时程序库(CRT), 和标准C++库(STL)的基本概念.有很多人甚至是有经验的程序员在这些概念上是含糊不清的甚 ...
- Delphi Windows API判断文件共享锁定状态(使用OpenFile来判断)
一.概述 锁是操作系统为实现数据共享而提供的一种安全机制,它使得不同的应用程序,不同的计算机之间可以安全有效地共享和交换数据.要保证安全有效地操作共享数据,必须在相应的操作前判断锁的类型,然后才能确定 ...
- Windows API Finishing
input { font-size: 14px; height: 26px } td { border-style: none; border-color: inherit; border-width ...
- Windows API教程文件系统
本篇文章主要介绍了"Windows API教程文件系统",主要涉及到Windows API教程文件系统方面的内容,对于Windows API教程文件系统感兴趣的同学可以参考一下. ...
随机推荐
- RegOpenKey(注册表定位器) 1.5 中文免费绿色版
软件名称: RegOpenKey(注册表定位器) 1.5 中文免费绿色版 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win7 / Vista / Win2003 / WinXP / Wi ...
- 微信web开发工具
http://mp.weixin.qq.com/wiki/10/e5f772f4521da17fa0d7304f68b97d7e.html#.E4.B8.8B.E8.BD.BD.E5.9C.B0.E5 ...
- Laravel框架开发规范-修订前期版
1.追加App/Models目录,App/User.php迁移至App/Models目录中 ①配置内容属于架构信息.服务器信息.有必要隐藏无法提交git的信息,请使用.env文件配合env()方法进行 ...
- android mediaplayer
- linux查看内核版本
cat /proc/version 或者 cat /etc/issue 或者 uname -a
- Docker私有仓库Registry 搭建
1. 关于Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候,我们的使用场景需要我们拥有一个私有 ...
- PHP之音乐ID3扩展
不知道你有没有这样的经历,一些从网上下载的MP3音乐,文件名明明是01.02这样的序号,但播放时却能显示出歌曲的正确名称来,是不是有点奇妙? 这其实都是ID3在暗中相助 ID3,一般是位于一个mp3文 ...
- c++ map unordered_map
map operator<的重载一定要定义成const.因为map内部实现时调用operator<的函数好像是const. #include<string> #include& ...
- mysql 连接两列
以下划线符号,连接两列,作为查询结果: SELECT CONCAT(col_1,'_',col_2) FROM yourtable
- EL(表达式语言)
EL(Expression Language):目的是为了简化Jsp页面的语言,使页面看起来更加简洁 基本的语法特点 以“${"开头,以”}“结束 一 与低版本的环境兼容----禁用EL ( ...