NtCreateFile 函式 (ntifs.h)
NtCreateFile 例程會建立新的檔案或開啟現有的檔案。
語法
__kernel_entry NTSYSCALLAPI NTSTATUS NtCreateFile(
[out] PHANDLE FileHandle,
[in] ACCESS_MASK DesiredAccess,
[in] POBJECT_ATTRIBUTES ObjectAttributes,
[out] PIO_STATUS_BLOCK IoStatusBlock,
[in, optional] PLARGE_INTEGER AllocationSize,
[in] ULONG FileAttributes,
[in] ULONG ShareAccess,
[in] ULONG CreateDisposition,
[in] ULONG CreateOptions,
[in, optional] PVOID EaBuffer,
[in] ULONG EaLength
);
參數
[out] FileHandle
HANDLE 變數的指標,可接收檔案的句柄。
[in] DesiredAccess
指定 ACCESS_MASK 值,這個值會決定對物件的要求存取權。
除了針對所有類型的物件定義的 標準 訪問許可權之外,呼叫者還可以指定下列任何 特定 訪問許可權:也就是說,檔案特有的許可權。
ACCESS_MASK旗標 | 允許呼叫端執行此動作 |
---|---|
FILE_READ_DATA | 從檔案讀取數據。 |
FILE_READ_ATTRIBUTES | 讀取檔案的屬性。 如需詳細資訊,請參閱 FileAttributes 參數的描述。 |
FILE_READ_EA | 讀取檔案的擴充屬性 (EAS)。 此旗標與裝置和中繼驅動程序無關。 |
FILE_WRITE_DATA | 將數據寫入檔案。 |
FILE_WRITE_ATTRIBUTES | 寫入檔案的屬性。 如需詳細資訊,請參閱 FileAttributes 參數的描述。 |
FILE_WRITE_EA | 變更檔案的擴充屬性 (EAS)。 此旗標與裝置和中繼驅動程序無關。 |
FILE_APPEND_DATA | 將數據附加至檔案。 |
FILE_EXECUTE | 使用系統分頁 I/O 將資料從檔案讀取到記憶體。 此旗標與裝置和中繼驅動程序無關。 |
注意
當您建立或開啟目錄時,請勿指定FILE_READ_DATA、FILE_WRITE_DATA、FILE_APPEND_DATA或FILE_EXECUTE。
呼叫端也可以指定下列 泛型 訪問許可權(適用於所有物件類型的許可權,其中每個泛型訪問許可權的意義都專屬於物件類型)。 檔案物件的一般訪問許可權會對應至特定的訪問許可權,如下表所示。 (請注意,「對應」表示「對應至」,並不表示泛型許可權的值「等於」其特定許可權對應之位 OR 的值。 I/O 管理員會定義實際的對應。
一般存取權 | 對應至這些特定的訪問許可權 |
---|---|
GENERIC_READ | STANDARD_RIGHTS_READ、FILE_READ_DATA、FILE_READ_ATTRIBUTES、FILE_READ_EA 和SYNCHRONIZE |
GENERIC_WRITE | STANDARD_RIGHTS_WRITE、FILE_WRITE_DATA、FILE_WRITE_ATTRIBUTES、FILE_WRITE_EA、FILE_APPEND_DATA 和 SYNCHRONIZE |
GENERIC_EXECUTE | STANDARD_RIGHTS_EXECUTE、FILE_EXECUTE、FILE_READ_ATTRIBUTES 和 SYNCHRONIZE。 此值與裝置和中繼驅動程序無關。 |
GENERIC_ALL | FILE_ALL_ACCESS |
注意
一般 訪問許可權只能指定給檔案;無法為目錄指定它們。
當呼叫 NtCreateFile
例如,如果您為檔案物件指定GENERIC_READ,例程會將此值對應至特定訪問許可權的FILE_GENERIC_READ位掩碼。 在上表中,針對 GENERIC_READ 列出的特定訪問許可權會對應至FILE_GENERIC_READ位掩碼中包含的存取旗標(但不等於)。
如果檔案實際上是目錄,呼叫端也可以指定下列一般訪問許可權。
DesiredAccess 旗標 | 允許呼叫端執行此動作 |
---|---|
FILE_LIST_DIRECTORY | 列出目錄中的檔案。 |
FILE_TRAVERSE | 換句話說,周遊目錄,將目錄包含在檔案的路徑中。 |
如需存取權限的詳細資訊,請參閱 ACCESS_MASK 和 存取權限。
[in] ObjectAttributes
指定物件名稱和其他屬性之 OBJECT_ATTRIBUTES 結構的指標。 使用 InitializeObjectAttributes 來初始化這個結構。 如果呼叫端未在系統線程內容中執行,則呼叫 InitializeObjectAttributes時,它必須設定OBJ_KERNEL_HANDLE屬性。
[out] IoStatusBlock
IO_STATUS_BLOCK 結構的指標,這個結構會接收最終完成狀態,以及所要求作業的其他資訊。 特別是,Information 成員會收到下列其中一個值:
- FILE_CREATED
- FILE_OPENED
- FILE_OVERWRITTEN
- FILE_SUPERSEDED
- FILE_EXISTS
- FILE_DOES_NOT_EXIST
[in, optional] AllocationSize
LARGE_INTEGER的指標,其中包含已建立或覆寫之檔案的初始配置大小,以位元組為單位。 如果 AllocationSizeNULL,則不會指定配置大小。 如果未建立或覆寫任何檔案,則會忽略 allocationSize。
[in] FileAttributes
指定一或多個FILE_ATTRIBUTE_XXX 旗標,代表當您建立或覆寫檔案時要設定的檔案屬性。 呼叫端通常會指定FILE_ATTRIBUTE_NORMAL,以設定預設屬性。 如需有效的 FILE_ATTRIBUTE_XXX 旗標清單,請參閱 Microsoft Windows SDK 檔案中的 CreateFile 例程。 如果未建立或覆寫任何檔案 ,則會忽略 FileAttributes。
[in] ShareAccess
共用存取的類型,指定為零或下列旗標的任何組合。
ShareAccess 旗標 | 允許其他線程執行此動作 |
---|---|
FILE_SHARE_READ | 讀取檔案 |
FILE_SHARE_WRITE | 寫入檔案 |
FILE_SHARE_DELETE | 刪除檔案 |
裝置和中繼驅動程式通常會將 shareAccess
[in] CreateDisposition
指定檔案不存在或不存在時要執行的動作。 CreateDisposition 可以是下表中的其中一個值。
CreateDisposition 值 | 如果檔案存在,則採取動作 | 如果檔案不存在,則採取動作 |
---|---|---|
FILE_SUPERSEDE | 取代檔案。 | 建立檔案。 |
FILE_CREATE | 傳回錯誤。 | 建立檔案。 |
FILE_OPEN | 開啟檔案。 | 傳回錯誤。 |
FILE_OPEN_IF | 開啟檔案。 | 建立檔案。 |
FILE_OVERWRITE | 開啟檔案,並加以覆寫。 | 傳回錯誤。 |
FILE_OVERWRITE_IF | 開啟檔案,並加以覆寫。 | 建立檔案。 |
[in] CreateOptions
指定驅動程式建立或開啟檔案時要套用的選項。 使用下表中的一或多個旗標。
CreateOptions 旗標 | 意義 |
---|---|
FILE_DIRECTORY_FILE(0x00000001) | 檔案是目錄。 相容的 CreateOptions 旗標是FILE_SYNCHRONOUS_IO_ALERT、FILE_SYNCHRONOUS_IO_NONALERT、FILE_WRITE_THROUGH、FILE_OPEN_FOR_BACKUP_INTENT和FILE_OPEN_BY_FILE_ID。 CreateDisposition 參數必須設定為 FILE_CREATE、FILE_OPEN 或 FILE_OPEN_IF。 |
FILE_WRITE_THROUGH (0x00000002) | 將數據寫入檔案的系統服務、檔案系統驅動程式和驅動程式,必須實際將數據傳輸到檔案,才能將任何要求的寫入作業視為完成。 |
FILE_SEQUENTIAL_ONLY (0x00000004) | 對檔案的所有存取都是循序的。 |
FILE_NO_INTERMEDIATE_BUFFERING(0x00000008) | 無法在驅動程式的內部緩衝區中快取或緩衝處理檔案。 此旗標與 DesiredAccess 參數FILE_APPEND_DATA旗標不相容。 |
FILE_SYNCHRONOUS_IO_ALERT (0x00000010) | 檔案上的所有作業都會同步執行。 代表呼叫端的任何等候,都受限於警示的過早終止。 此旗標也會讓 I/O 系統維護檔案位置指標。 如果已設定此旗標,則 SYNCHRONIZE 旗標必須在 DesiredAccess 參數中設定。 |
FILE_SYNCHRONOUS_IO_NONALERT(0x00000020) | 檔案上的所有作業都會同步執行。 在同步處理 I/O 佇列和完成的系統中等候不會受限於警示。 此旗標也會讓 I/O 系統維護檔案位置內容。 如果已設定此旗標,則 SYNCHRONIZE 旗標必須在 DesiredAccess 參數中設定。 |
FILE_NON_DIRECTORY_FILE (0x00000040) | 檔案 未 目錄。 要開啟的檔案物件可以代表數據檔;邏輯、虛擬或實體裝置;或磁碟區。 從 Windows 11 版本 24H2 開始,NTFS 現在會在開啟 $INDEX_ALLOCATION 屬性時接受此旗標。 |
FILE_CREATE_TREE_CONNECTION (0x00000080) | 建立此檔案的樹狀結構連線,以便透過網路開啟它。 裝置和中繼驅動程式不會使用此旗標。 |
FILE_COMPLETE_IF_OPLOCKED(0x00000100) | 如果目標檔案為 oplocked,而不是封鎖呼叫端的線程,請立即以替代的成功程式代碼STATUS_OPLOCK_BREAK_IN_PROGRESS完成此作業。 如果檔案為 oplocked,另一個呼叫端就已經可以存取該檔案。 裝置和中繼驅動程式不會使用此旗標。 |
FILE_NO_EA_KNOWLEDGE (0x00000200) | 如果開啟現有檔案的擴充屬性 (EAS) 表示呼叫端必須瞭解 EA 才能正確解譯檔案,NtCreateFile 應該傳回錯誤。 此旗標與裝置和中繼驅動程序無關。 |
FILE_OPEN_REMOTE_INSTANCE(0x00000400) | 保留供系統使用;請勿使用 。 |
FILE_RANDOM_ACCESS (0x00000800) | 檔案的存取權可以是隨機的,因此檔系統驅動程式或系統不應執行任何循序的預先讀取作業。 |
FILE_DELETE_ON_CLOSE(0x00001000) | 當最後一個檔案句柄傳遞至 NtClose時,系統會刪除檔案。 如果設定此旗標,必須在 desiredAccess 參數 |
FILE_OPEN_BY_FILE_ID (0x00002000) | ObjectAttributes 所指定的檔名 參數包含檔案的二進位 8 位元組或 16 位元組檔案參考編號或物件識別符,視檔系統而定。 或者,後面接著反斜杠字元的裝置名稱可能會繼續這些二進位值。 如需其他詳細數據和範例,請參閱。 |
FILE_OPEN_FOR_BACKUP_INTENT(0x00004000) | 檔案正在開啟以供備份意圖使用。 因此,系統應該檢查特定訪問許可權,並授與呼叫端對檔案的適當存取權,然後再檢查 DesiredAccess 參數,以針對檔案的安全性描述元。 裝置和中繼驅動程式未使用這個旗標。 |
FILE_NO_COMPRESSION (0x00008000) | 隱藏父目錄中FILE_ATTRIBUTE_COMPRESSED的繼承。 這允許在標示為壓縮的目錄中建立非壓縮檔。 |
FILE_OPEN_REQUIRING_OPLOCK (0x00010000) | 檔案正在開啟,而檔案上的機會鎖定 (oplock) 會要求為單一不可部分完成的作業。 文件系統在執行建立作業之前會檢查 oplock,如果結果會中斷現有的 oplock,則會讓建立失敗,並傳回STATUS_CANNOT_BREAK_OPLOCK碼。 從 Windows 7 和 Windows Server 2008 R2 開始,即可使用此旗標。 |
FILE_DISALLOW_EXCLUSIVE (0x00020000) | 開啟現有的檔案時,如果未指定FILE_SHARE_READ,而且文件系統存取檢查不會授與呼叫端對檔案的寫入許可權,則此開啟失敗並STATUS_ACCESS_DENIED。 這是 Windows 7 之前的預設行為。 從 Windows 7 和 Windows Server 2008 R2 開始,即可使用此旗標。 |
FILE_SESSION_AWARE (0x00040000) | 開啟檔案或裝置的用戶端會感知會話,並在必要時驗證每個會話存取權。 從 Windows 8 開始,即可使用此旗標。 |
FILE_RESERVE_OPFILTER (0x00100000) | 此旗標可讓應用程式要求篩選機會鎖定 (oplock) 以防止其他應用程式取得共享違規。 如果已經有開啟的句柄,建立要求將會失敗,並STATUS_OPLOCK_NOT_GRANTED。 如需詳細資訊,請參閱下列一節。 |
FILE_OPEN_REPARSE_POINT (0x00200000) | 使用重新分析點開啟檔案,並略過檔案的一般重新分析點處理。 如需詳細資訊,請參閱下列一節。 |
FILE_OPEN_NO_RECALL (0x00400000) | 指示任何執行離線記憶體或虛擬化的篩選條件,不要因為開啟而重新叫用檔案的內容。 |
FILE_OPEN_FOR_FREE_SPACE_QUERY (0x00800000) | 此旗標會指示文件系統擷取與呼叫線程相關聯的使用者。 使用傳回句柄對 FltQueryVolumeInformation 或 ZwQueryVolumeInformationFile 的任何後續呼叫,都會假設擷取的使用者,而不是當時的呼叫使用者,以便計算呼叫端可用的可用空間。 這適用於下列 FsInformationClass 值:FileFsSizeInformation、FileFsFullSizeInformation 和 FileFsFullSizeInformationEx。 |
FILE_CONTAINS_EXTENDED_CREATE_INFORMATION (0x10000000) | 將 EaBuffer 參數解譯為 EXTENDED_CREATE_INFORMATION實例。 從 Windows 11 版本 22H2 開始,即可使用此旗標。 |
[in, optional] EaBuffer
針對裝置和中繼驅動程式,此參數必須是 NULL 指標。
[in] EaLength
針對裝置和中繼驅動程式,此參數必須是零。
傳回值
NtCreateFile 會在成功時傳回STATUS_SUCCESS,或在失敗時傳回適當的 NTSTATUS 錯誤碼。 在後者的情況下,呼叫端可以藉由檢查 IoStatusBlock 參數來判斷失敗的原因。
注意
NtCreateFile 可能會傳回STATUS_FILE_LOCK_CONFLICT做為傳回值,或是 IO_STATUS_BLOCK 結構 狀態 成員中,IoStatusBlock 參數所指向的成員。 只有當NTFS記錄檔已滿,而且 NtCreateFile 嘗試處理這種情況時,才會發生錯誤。
言論
NtCreateFile 提供呼叫端可用來操作檔案數據的句柄,或檔案物件的狀態和屬性。 如需詳細資訊,請參閱在驅動程式中使用檔案 。
FileHandle 指向的句柄不再使用後,驅動程式必須呼叫 NtClose 關閉它。
如果呼叫端未在系統線程內容中執行,則必須確保所建立的任何句柄都是私人句柄。 否則,進程可以存取其內容中的驅動程序執行句柄。 如需詳細資訊,請參閱 物件句柄。
有兩種替代方式可指定要建立或開啟的檔名,NtCreateFile:
- 作為完整路徑名稱,提供於輸入 ObjectAttributes ObjectName 成員中。
- 做為路徑名稱,相對於 RootDirectory 輸入 ObjectAttributes中句柄所表示的目錄檔案。
在 DesiredAccess 參數中設定特定旗標會導致下列效果:
- 若要讓呼叫端等候傳回 FileHandle來同步處理 I/O 完成,必須設定 SYNCHRONIZE 旗標。 否則,裝置或中繼驅動程式的呼叫端必須使用事件物件來同步處理 I/O 完成。
- 如果呼叫端只設定FILE_APPEND_DATA和 SYNCHRONIZE 旗標,它就只能寫入檔案結尾,而且忽略對檔案寫入作業的任何位移資訊。 此檔案會視需要自動擴充此類型的作業。
- 設定檔案的FILE_WRITE_DATA旗標,也可讓呼叫端寫入檔案結尾之外。 同樣地,檔案會視需要自動擴充。
- 如果呼叫端只設定FILE_EXECUTE和 SYNCHRONIZE 旗標,就無法使用傳回的 FileHandle 直接讀取或寫入檔案中的任何數據。 也就是說,檔案上的所有作業都會透過系統呼叫器來回應指示和數據存取作業。 裝置和中繼驅動程序不應該設定FILE_EXECUTE旗標。
ShareAccess 參數會決定個別線程是否可以同時存取相同的檔案。 前提是這兩個呼叫端都有適當的訪問許可權,就可以成功開啟和共用檔案。 如果 ntCreateFile
若要成功開啟共用檔案,DesiredAccess 旗標必須與尚未透過 發行之所有先前開啟作業的 DesiredAccess 和 ShareAccess 旗標兼容。 也就是說,指定給指定檔案
CreateDisposition 值FILE_SUPERSEDE要求呼叫端具有現有檔案物件的 DELETE 存取權。 如果是的話,成功呼叫 NtCreateFile,且現有檔案上的FILE_SUPERSEDE會有效刪除該檔案,然後重新建立它。 這表示,如果檔案已經由另一個線程開啟,它會指定已設定FILE_SHARE_DELETE旗標的 ShareAccess 參數來開啟檔案。 請注意,這種類型的處置與覆寫檔案的POSIX樣式一致。
CreateDisposition 值FILE_OVERWRITE_IF和FILE_SUPERSEDE類似。 如果 NtCreateFile 是以現有的檔案呼叫,而且其中一個 CreateDisposition 值,則會取代檔案。
覆寫檔案在語意上相當於取代作業,但下列除外:
- 呼叫端必須具有檔案的寫入許可權,而不是刪除存取權。 這表示,如果檔案已由另一個線程開啟,則會使用shareAccess輸入
中設定的 FILE_SHARE_WRITE 旗標開啟檔案。 - 指定的檔案屬性在邏輯上是 ORed,且檔案上已有這些屬性。 這表示,如果檔案已由另一個線程開啟,則 NtCreateFile 的後續呼叫者 無法停用現有的 FileAttributes 旗標,但可以啟用相同檔案的其他旗標。 請注意,此覆寫檔案樣式與 MS-DOS、Microsoft Windows 3.1 和 OS/2 一致。
FILE_DIRECTORY_FILE CreateOptions 值會指定要建立或開啟的檔案是目錄。 建立目錄檔案時,文件系統會在磁碟上建立適當的結構,以代表該特定文件系統磁碟結構空的目錄。 如果已指定此選項且要開啟的指定檔案不是目錄檔案,或者呼叫者指定
FILE_NO_INTERMEDIATE_BUFFERING CreateOptions 旗標可防止文件系統代表呼叫端執行任何中繼緩衝。 指定此旗標會將下列限制放在呼叫者參數的其他 ZwXxx檔案 例程。
- 傳遞至 NtReadFile 或 NtWriteFile 的任何選擇性 ByteOffset 必須是扇區大小的倍數。
- 傳遞 至 NtReadFile 或 NtWriteFile 的 長度 必須是扇區大小的整數。 請注意,將讀取作業指定給長度正好是扇區大小的緩衝區,可能會導致在傳輸期間到達檔尾時,將較少的大量位元組傳送至該緩衝區。
- 緩衝區必須符合基礎裝置的對齊需求。 若要取得這項資訊,請呼叫 NtCreateFile 以取得代表實體裝置的檔案物件的句柄,並將該句柄傳遞至 NtQueryInformationFile。 如需系統FILE_XXX_ALIGNMENT 值的清單,請參閱 DEVICE_OBJECT。
- 呼叫 NtSetInformationFile,並將 fileInformationClass 參數設定為 FilePositionInformation 必須指定扇區大小的倍數位移。
FILE_SYNCHRONOUS_IO_ALERT和FILE_SYNCHRONOUS_IO_NONALERT CreateOptions 旗標(互斥)指定檔案上的所有 I/O 作業都會同步,只要透過傳回 FileHandle所參考的檔案物件執行作業即可。 這類檔案上的所有 I/O 都會使用傳回的句柄,跨所有線程串行化。 如果設定這其中一個 CreateOptions 旗標,則 SYNCHRONIZE DesiredAccess 旗標也必須設定為強制 I/O 管理員使用檔案物件做為同步處理物件。 在這些情況下,I/O 管理員會追蹤目前的檔案位置位移,您可以傳遞至 ntReadFile ,NtWriteFile。 呼叫 NtQueryInformationFile 或 NtSetInformationFile 以取得或設定這個位置。
如果
CreateOptions FILE_OPEN_REQUIRING_OPLOCK 旗標會消除開啟檔案並要求 oplock 之間的時間,這可能會讓第三方開啟檔案並取得共享違規。 應用程式可以在 NtCreateFile 上使用 FILE_OPEN_REQUIRING_OPLOCK 旗標,然後要求任何 oplock。 這可確保 oplock 擁有者會收到導致共享違規的任何後續開啟要求通知。
在 Windows 7 中,如果應用程式使用 FILE_OPEN_REQUIRING_OPLOCK 旗標時檔案上存在其他句柄,則建立作業將會失敗併產生STATUS_OPLOCK_NOT_GRANTED。 從 Windows 8 開始,此限制已不存在。
如果此建立作業會中斷檔案上已經存在的 oplock,則設定 FILE_OPEN_REQUIRING_OPLOCK 旗標會導致建立作業失敗並出現STATUS_CANNOT_BREAK_OPLOCK。 此建立作業不會中斷現有的 oplock。
使用此FILE_OPEN_REQUIRING_OPLOCK旗標的應用程式必須在此呼叫成功之後要求 oplock,否則所有後續嘗試開啟檔案都會遭到封鎖,而不會因正常 oplock 處理而受益。 同樣地,如果此呼叫成功,但後續的 oplock 要求失敗,則使用此旗標的應用程式必須在偵測到 oplock 要求失敗之後關閉其句柄。 應用程式在要求oplock之前,不得對檔案執行任何其他文件系統作業(除了關閉檔句柄之外),否則可能會發生死結。
注意
Windows 7、Windows Server 2008 R2 和更新版本的 Windows 操作系統都提供FILE_OPEN_REQUIRING_OPLOCK旗標。 在 Windows 7 中實作此旗標的Microsoft文件系統為 NTFS、FAT 和 exFAT。
CreateOptions 旗標FILE_RESERVE_OPFILTER可讓應用程式要求層級 1、Batch 或 Filter oplock,以防止其他應用程式收到共享違規。 不過,FILE_RESERVE_OPFILTER只適用於篩選作業鎖定。 若要使用它,您必須完成下列步驟:
- 發出 CreateOptions FILE_RESERVE_OPFILTER、DesiredAccess 完全FILE_READ_ATTRIBUTES的 createOptions 和 ShareAccess FILE_SHARE_READ |FILE_SHARE_WRITE |FILE_SHARE_DELETE。
- 如果已經有開啟的句柄,則建立要求會因為STATUS_OPLOCK_NOT_GRANTED而失敗,而下一個要求的 oplock 也會失敗。
- 如果您以較多的存取權或較少共享開啟,也會導致STATUS_OPLOCK_NOT_GRANTED失敗。
- 如果建立要求成功,請要求 oplock。
- 開啟檔案的另一個句柄以執行 I/O。
步驟 3 只會針對篩選作業鎖定進行這項操作。 在步驟 3 中開啟的句柄可以有 DesiredAccess,其中包含最多FILE_READ_ATTRIBUTES |FILE_WRITE_ATTRIBUTES |FILE_READ_DATA |FILE_READ_EA |FILE_EXECUTE |SYNCHRONIZE |READ_CONTROL,仍然不會中斷篩選作業鎖定。 不過,任何 DesiredAccess 大於 FILE_READ_ATTRIBUTES |FILE_WRITE_ATTRIBUTES |SYNCHRONIZE 會中斷層級 1 或 Batch oplock,並使這些 oplock 類型的FILE_RESERVE_OPFILTER旗標無用。
NTFS 是唯一實作FILE_RESERVE_OPFILTER Microsoft文件系統。
針對 CreateOptions FILE_OPEN_BY_FILE_ID 旗標,範例裝置名稱的格式如下:
\??\C:\<FileID>
\device\HardDiskVolume1\<ObjectID>
其中 FileID 為 8 個字節,ObjectID 為 16 個字節:
- 在NTFS上,這可以是8位元組或16位元組的參考編號或對象標識碼。 16 位元組的參考編號與以零填補的8位元組數位相同。
- 在 ReFS 上,這可以是 8 位元組或 16 位元組的參考編號。 16 位元組的數位與8位元組的數字無關。 不支援物件識別碼。
- FAT、ExFAT、UDFS 和 CDFS 檔案系統不支援FILE_OPEN_BY_FILE_ID旗標。
這個數位是由特定文件系統所指派,且專屬於特定文件系統。 因為檔名字段部分會包含二進位 Blob,所以假設這是有效的 Unicode 字串,而且更重要的是可能不是 Null 終止的字串,不正確。
NtCreateFile 的呼叫者必須在 IRQL = PASSIVE_LEVEL,且 啟用特殊核心 APC。
注意
如果呼叫此函式是在使用者模式中發生,您應該使用名稱 「NtCreateFile」 而不是 「ZwCreateFile“。
對於內核模式驅動程式的呼叫,NtXxx 和 ZwXxx 版本的 Windows 原生系統服務例程,在處理和解譯輸入參數的方式上可能會有不同的行為。 如需 nt NtXxx 與 ZwXxx 例程之間關聯性的詳細資訊,請參閱 使用 Nt 和 Zw 版本的原生系統服務例程。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 2000 |
目標平臺 | 普遍 |
標頭 | ntifs.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (請參閱一節) |
DDI 合規性規則 | HwStorPortProhibitedDDIs, PowerIrpDDis |