Windows API 之 CreateFile

时间:2022-03-16 10:43:44

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

进一步在问,何谓内核对象

内核对象的数据结构只能被内核访问,因此应用程序无法在内存中找到这些数据结构并直接改变它们的内容当调用一个用于创建内核对象的函数时,该函数就返回一个用于标识该对象的句柄。如果将该句柄值传递给另一个进程中的一个线程,那么在另一个进程使用你的进程的句柄值所作的调用就会失败。如果想在多个进程*享内核对象,要通过一定的机制。如对象句柄的继承性,命名对象,复制对象句柄。若要确定一个对象是否属于内核对象,最容易的方法是观察创建该对象所用的函数。
所以:
aaarticlea/png;base64,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" alt="" />

作为一个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