CreateFile

CreateFile

這是一個多功能的函式,可打開或創建檔案或者I/O設備,並返回可訪問的句柄:控制台,通信資源,目錄(唯讀打開),磁碟驅動器,檔案,郵槽,管道。

基本介紹

  • 中文名:CreateFile
  • 釋義:多功能的函式
  • 對象:控制台,通信資源,目錄
  • 包括:返回值
函式原型,返回值,函式聲明,參數說明,誤區,

函式原型

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

函式聲明

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結構體的一個雙字值來設定標準許可權、特殊許可權和一般許可權的。
dwShareModeLong, 如果是零表示不共享; 如果是FILE_SHARE_DELETE表示隨後打開操作對象會成功,但只有刪除訪問請求的許可權;如果是FILE_SHARE_READ隨後打開操作對象會成功只有請求讀訪問的許可權;如果是FILE_SHARE_WRITE 隨後打開操作對象會成功,但只有請求寫訪問的許可權。
lpSecurityAttributesSECURITY_ATTRIBUTES, 指向一個SECURITY_ATTRIBUTES結構的指針,定義了檔案的安全特性(如果作業系統支持的話)
dwCreationDispositionLong,下述常數之一:
CREATE_NEW 創建檔案;如檔案存在則會出錯
CREATE_ALWAYS 創建檔案,會改寫前一個檔案
OPEN_EXISTING 檔案必須已經存在。由設備提出要求
OPEN_ALWAYS 如檔案不存在則創建它
TRUNCATE_EXISTING 將現有檔案縮短為零長度
dwFlagsAndAttributesLong, 一個或多個下述常數
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,hTemplateFile為一個檔案或設備句柄,表示按這個參數給出的句柄為模板創建檔案(就是將該句柄檔案拷貝到lpFileName指定的路徑,然後再打開)。它將指定該檔案的屬性擴展到新創建的檔案上面,這個參數可用於將某個新檔案的屬性設定成與現有檔案一樣,並且這樣會忽略dwAttrsAndFlags。通常這個參數設定為NULL,為空表示不使用模板,一般為空。
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型。

相關詞條

熱門詞條

聯絡我們