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,iVBORw0KGgoAAAANSUhEUgAAANgAAAA6CAIAAABdzgAzAAAF8UlEQVR4nO2dQZLiMAxFfSIWKQ7Tuyz6HmxTNVVziL4Au7kAN2Db2z5Dr5kFkBjr61txQmKCfnXNgCzLsv0sD9RAh5+fy1w/f/5cXK4yBQfRVYMcRFcVqg7EEMIUn7jJEoo4Z7snDtC/N2rOBeNuUlsG0RhN65gom4MRxCSag3iVBPH7sAshhI+vFUC87oG2o5pgBOiW7SgfQwuMAyPLVjIvbfR3UALiv4+wP5y+D7sVQLSjwHfauKMamhh2PXIQh0fGkclAI0kbQrwlwat5BRDlHhsrlubGsS6LrwW3h4JMW86Pg/h0EJMl1vY4ecCZgFsunZM0kjhQJI79DMgV0MbN9t2Mngsi2VFtobXVzxIZD2fvBemJo2k5ENBlSnAptClry7JtLteviGlCFESy65oD76VZOKn8cUIenBekk6yAg3j/+foMuZfSC4CYtccbrHXUukg3GU1G4PG1Ijq2IhL7NiRfNT+oJ+902L8QiPFTO3awV4yj5sxDZfNM4msVURq3pJd5Q7sARH6rZuuQRDCpkbK28eFIReRkv4NeGETIQQwKtMuASRz4lCTDkbJXRDLTd1B1ILreUw6iqwo5iK4q5CC6qtDMIP66XEVyEF1VyEF0VaHqQAwhWOzQTetbEKpvSmSJ7yrQy4AomziLhKHrY+kg7fbcjA5b1fSJCxBPf3e3XdgfTkuD2KPAfQoKlQSRjxgDDTvyITaqc9c03Rm3TZx+AuL3Yff59XP5uf4vh93f04Ig2rdcc8hWU1n8tL4OItIkEHnJ0K/mr88QblAuAKLc+IQAeL2SIEkXUgWzQ/NBSdOxHdJoj8geWZER2c5dczcOUEAjSqhp2yaE0HRdO4TFeYKYA4jnrpFDZQ9qCYinwz58/FvgaiaEZZs02oxswSC/j9wHIW0WbJLnrrlv8bF9pFI1nrumNx3bWzOsSaxQoWGObQhNdwbdhjzZQOeugbxnFoFKAXF8OYQgyl3Mbio7NLlCZQexhyz5U7Ya08P2uNQM1UfuITJGBSmE0JefqznxhkacT3vs/xpYA3nCmPeclJE4iOQY/0IQT4d9AYULv2ouAzE5ANqpmAnEGK++pPUPEk9hpGXuRsRjJ2hE4yQgwjxhzHPXXC91PMacIKoU2j4qQPIwKguipARiJ5nT/LWAQciSXqRhg4/tsJnmkgjv8EgFt3QOxDhPFDPqIdw4hVmfRxCH925uGvtRgWwqk3JVaIC0kbCWiqgd3zEgDjde03VRpYkuQvS6ZDDGtzO4ROMyJo1IytWM8oQxI8wFs1kQucNLvqE9I4iwOyl+mdXc/js4WNMn/kogSgdZyaB/7AZLHSmB2liueVUdiK73lIPoqkIOoqsKOYiuKuSfWXFVIQfRVYUcRFcVchBdVagiEEPui4ig0RJt7EDTh5gYB1qkeK8ChxVVBYhhzHdsXnJfxiU78qbi/eAdITowbTnZbEqWg8pplhnyEZ+tFMSv4QsSSz6zUpiE+IpViaZ8KoNYNn7GFU9gsm8qpLAPclGmn/iQsHz1ktbVEbyK/g/t8Z9ZKUwCVURtm0fFJGMRWC3Bk14aWzw3CIc8OfAgSWTjZLKTqoS/XjN/VKAwiTFXsxEgzTjXBmgFJmmCeRohk5lrByDJQaZEgsy4JlMkQbx/e/HIcviMq/ki9kz2SizZhdY2e+xmGEEkXaDdnrYkWFs6nr/WujCdM3+KD86H86EdysRO9mbchG0gZndiLhAtHeNR4nWTrdkZ8b3IpvE8kVfN11+HtkRFzGepXz3aYlnsBGsOotyqMhDlmbw80mYckYQ1Hic+1gKiFTG+nZ/86y34Ge194gfa3hgp0Rygp9aaBRHOiBwSeMYSQBM3LWF4tIhgJotJ//UWj/9GXOzXW7Bcc5wZ4eBGzaLlMyostEuwCFLa4+xTu88qquINbWuutnWH9onMacloxc/S9xIhSKZgp80IGemyotYH0X5lJI/JIvJLhwxqz1kGhK1aYpa0pVt21jAI7DJ2ys/W+iC6XBcH0VWJHERXFXIQXVXoP+eKmvo0jbUPAAAAAElFTkSuQmCC" 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教程文件系统感兴趣的同学可以参考一下. ...
随机推荐
- linux ssh连接不自动断开
修改linux服务器ssh配置文件: vim /etc/ssh/ssh_config 修改两处的值为: ClientAliveInterval ClientAliveCountMax 使修改的ssh配 ...
- JSONModel解析数据成Model
转自:http://blog.csdn.net/smking/article/details/40432287 JSONModel, Mantle 这两个开源库都是用来进行封装JSON->Mod ...
- Learning BSD.sys/queue.h
This file includes 4 data-structures.. Insteresting because they are written in 1994.. to make it ea ...
- ACE_Event_Handler:事件响应入口
1:ACE_Event_Handler类 头文件“Event_Handler.h” 在ACE Reactor框架中,ACE_Event_Handler是所有事件处理器的基类.ACE_Event_Han ...
- JPA基本注解介绍
一.@Entity •@Entity 标注用于实体类声明语句之前, 指出该Java 类为实体类,将映射到指定的数据库表. 如声明一个实体类 Customer,它将映射到数据库中的 customer 表 ...
- check2
//文件check.js //将方法句柄赋值给变量$,简化document.getElementById(); var $ = document.getElementById; //定义模拟类(定义C ...
- numpy中的matrix矩阵处理
numpy模块中的矩阵对象为numpy.matrix,包括矩阵数据的处理,矩阵的计算,以及基本的统计功能,转置,可逆性等等,包括对复数的处理,均在matrix对象中. class numpy.matr ...
- iOS之图文混排
首先从github下载 https://github.com/wezm/RegexKitLite 导入.h和.m文件后为RegexKitLite.m添加编译标记-fno-objc-arc.添加动态库l ...
- 深入浅出requireJS-1
我们都知道,虽然我们可以通过原型和继承来使javascript面向对象.但是,当js代码和逻辑过多时,代码的维护和扩展会变的很不方便.这时,nodejs做的非常好,但是在浏览器端模块化的js编程一直都 ...
- mysql 注册登陆表单并且操纵元素
<?php error_reporting(E_ALL^E_DEPRECATED^E_NOTICE); header("content-type:text/html;c ...