标题：CreateFile
VB声明
Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String,ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As LongAs Long说明这是一个多功能的函数，可打开或创建以下对象，并返回可访问的句柄：控制台，通信资源，目录(只读打开)，磁盘驱动器，文件，邮槽，管道。
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
);返回值Long，如执行成功，则返回文件句柄。INVALID_HANDLE_VALUE表示出错，会设置GetLastError。即使函数成功，但若文件存在，且指定了CREATE_ALWAYS 或 OPEN_ALWAYS，GetLastError也会设为ERROR_ALREADY_EXISTS参数表参数类型及说明 
lpFileName String，要打开的文件的名字 
dwDesiredAccess Long，如果为 GENERIC_READ 表示允许对设备进行读访问；如果为 GENERIC_WRITE 表示允许对设备进行写访问（可组合使用）；如果为零，表示只允许获取与一个设备有关的信息 
dwShareMode Long，零表示不共享； FILE_SHARE_READ 和/或 FILE_SHARE_WRITE 表示允许对文件进行共享访问 
lpSecurityAttributes SECURITY_ATTRIBUTES，指向一个SECURITY_ATTRIBUTES结构的指针，定义了文件的安全特性（如果操作系统支持的话） 
dwCreationDisposition Long，下述常数之一： 
CREATE_NEW 创建文件；如文件存在则会出错 
CREATE_ALWAYS 创建文件，会改写前一个文件 
OPEN_EXISTING 文件必须已经存在。由设备提出要求 
OPEN_ALWAYS 如文件不存在则创建它 
TRUNCATE_EXISTING 将现有文件缩短为零长度 
dwFlagsAndAttributes Long，一个或多个下述常数 
FILE_ATTRIBUTE_ARCHIVE 标记归档属性
FILE_ATTRIBUTE_COMPRESSED 将文件标记为已压缩，或者标记为文件在目录中的默认压缩方式 
FILE_ATTRIBUTE_NORMAL 默认属性 
FILE_ATTRIBUTE_HIDDEN 隐藏文件或目录 
FILE_ATTRIBUTE_READONLY 文件为只读 
FILE_ATTRIBUTE_SYSTEM 文件为系统文件
FILE_FLAG_WRITE_THROUGH 操作系统不得推迟对文件的写操作 
FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作 
FILE_FLAG_NO_BUFFERING 禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块 
FILE_FLAG_RANDOM_ACCESS 针对随机访问对文件缓冲进行优化 
FILE_FLAG_SEQUENTIAL_SCAN 针对连续访问对文件缓冲进行优化 
FILE_FLAG_DELETE_ON_CLOSE 关闭了上一次打开的句柄后，将文件删除。特别适合临时文件
也可在Windows NT下组合使用下述常数标记： 
SECURITY_ANONYMOUS， SECURITY_IDENTIFICATION， SECURITY_IMPERSONATION， SECURITY_DELEGATION， SECURITY_CONTEXT_TRACKING， SECURITY_EFFECTIVE_ONLY 
hTemplateFile Long，如果不为零，则指定一个文件句柄。新文件将从这个文件中复制扩展属性注解打开一个通信端口时（如COM1），无论如何都要设置成 OPEN_EXISTING
这个函数代替了lOpen 和 lCreate函数，应该是我们的首选 
打开一个通信端口的例程（COM1）
HANDLE hCom;
hCom = CreateFile("COM1",
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL);
if(hCom == INVALID_HANDLE_VALUE)
{
MessageBox("端口打开失败。");
}
VC声明
函数功能：CreateFile函数创建或打开以下对象并返回一个句柄,可以用来访问对象:文件、管道、mailslots、通信资源、磁盘设备(Windows NT只有)、consoles、目录(只开放)函数声明:HANDLE CreateFile(
LPCTSTR lpFileName, //指向文件名的指针
DWORD dwDesiredAccess, //访问模式（写/读）
DWORD dwShareMode, //共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针
DWORD dwCreationDisposition, //如何创建
DWORD dwFlagsAndAttributes, //文件属性
HANDLE hTemplateFile //用于复制文件句柄
);参数说明：lpFileName String 要打开的文件的名或设备名。这个字符串的最大长度在ANSI版本中为MAX_PATH，在unicode版本中为32767。
dwDesiredAccess 指定类型的访问对象。如果为 GENERIC_READ 表示允许对设备进行读访问；如果为 GENERIC_WRITE 表示允许对设备进行写访问（可组合使用）；如果为零，表示只允许获取与一个设备有关的信息 。
另外，还可以指定下面的控制标志：
标准控制权限(16-23位掩码)：
DELETE 删除对象的权限。
READ_CONTROL 从对象的安全描述符中读取信息的权限，但不包括SACL(系统访问控制列表)中的信息。
WRITE_DAC 修改对象安全描述符中的DACL(随机访问控制列表)的权限
WRITE_OWNER 修改对象安全描述符中的属主的权限
SYNCHRONIZE 同步化使用对象的权限，即可以创建一个线程等待信号量释放(但有些对象不支持这个权限)。
STANDARD_RIGHTS_REQUIRED 等价于前面四种权限的总合(通常这四种是必须具有的权限)。
STANDARD_RIGHTS_READ 一般等价于READ_CONTROL
STANDARD_RIGHTS_WRITE 一般等价于READ_CONTROL
STANDARD_RIGHTS_EXECUTE 一般等价于READ_CONTROL
STANDARD_RIGHTS_ALL 等价于前面五种权限的总合。
特殊控制权限(0-15位掩码)：
SPECIFIC_RIGHTS_ALL
ACCESS_SYSTEM_SECURITY
MAXIMUM_ALLOWED
GENERIC_READ
GENERIC_WRITE
GENERIC_EXECUTE
GENERIC_ALL 
注：实质上是通过ACCESS_MASK结构体的一个双字值来设置标准权限、特殊权限和一般权限的。
dwShareMode Long， 若果是零表示不共享； 如果是FILE_SHARE_DELETE表示随后打开操作对象会成功只要删除访问请求；如果是FILE_SHARE_READ随后打开操作对象会成功只有请求读访问；如果是FILE_SHARE_WRITE 随后打开操作对象会成功只有请求写访问。
lpSecurityAttributes SECURITY_ATTRIBUTES， 指向一个SECURITY_ATTRIBUTES结构的指针，定义了文件的安全特性（如果操作系统支持的话）
dwCreationDisposition Long，下述常数之一： 
CREATE_NEW 创建文件；如文件存在则会出错 
CREATE_ALWAYS 创建文件，会改写前一个文件 
OPEN_EXISTING 文件必须已经存在。由设备提出要求 
OPEN_ALWAYS 如文件不存在则创建它 
TRUNCATE_EXISTING 将现有文件缩短为零长度 
dwFlagsAndAttributes Long， 一个或多个下述常数 
FILE_ATTRIBUTE_ARCHIVE 标记归档属性 
FILE_ATTRIBUTE_COMPRESSED 将文件标记为已压缩，或者标记为文件在目录中的默认压缩方式 
FILE_ATTRIBUTE_NORMAL 默认属性 
FILE_ATTRIBUTE_HIDDEN 隐藏文件或目录 
FILE_ATTRIBUTE_READONLY 文件为只读 
FILE_ATTRIBUTE_SYSTEM 文件为系统文件
FILE_FLAG_WRITE_THROUGH 操作系统不得推迟对文件的写操作 
FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作 
FILE_FLAG_NO_BUFFERING 禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块 
FILE_FLAG_RANDOM_ACCESS 针对随机访问对文件缓冲进行优化 
FILE_FLAG_SEQUENTIAL_SCAN 针对连续访问对文件缓冲进行优化 
FILE_FLAG_DELETE_ON_CLOSE 关闭了上一次打开的句柄后，将文件删除。特别适合临时文件
也可在Windows NT下组合使用下述常数标记： 
SECURITY_ANONYMOUS， SECURITY_IDENTIFICATION， SECURITY_IMPERSONATION， SECURITY_DELEGATION， SECURITY_CONTEXT_TRACKING， SECURITY_EFFECTIVE_ONLY 
hTemplateFile Long， 如果不为零，则指定一个文件句柄。新文件将从这个文件中复制扩展属性
返回值
如执行成功，则返回文件句柄。
INVALID_HANDLE_VALUE表示出错，会设置GetLastError。即使函数成功，但若文件存在，且指定了CREATE_ALWAYS 或 OPEN_ALWAYS，GetLastError也会设为ERROR_ALREADY_EXISTS
PB 声明
public function long createfile (string lpfilename,long dwdesiredaccess,long dwsharemode,long lpsecurityattributes,long dwcreationdisposition,long dwflagsandattributes,long htemplatefile) library "kernel32" alias for "CreateFileA"
误区
CreateFile的涵义是创建File这个内核对象，而不是创建物理磁盘上的“文件”。在Win32 API中有一系列操作内核对象的函数，创建内核对象的函数大多命名为CreateXxxx型。