共用方式為


FltCreateMailslotFile 函式 (fltkernel.h)

迷你篩選驅動程式會呼叫 FltCreateMailslotFile,以建立新的管道或開啟現有的 mailslot。

語法

NTSTATUS FLTAPI FltCreateMailslotFile(
  [in]            PFLT_FILTER               Filter,
  [in, optional]  PFLT_INSTANCE             Instance,
  [out]           PHANDLE                   FileHandle,
  [out, optional] PFILE_OBJECT              *FileObject,
  [in]            ULONG                     DesiredAccess,
  [in]            POBJECT_ATTRIBUTES        ObjectAttributes,
  [out]           PIO_STATUS_BLOCK          IoStatusBlock,
  [in]            ULONG                     CreateOptions,
  [in]            ULONG                     MailslotQuota,
  [in]            ULONG                     MaximumMessageSize,
  [in]            PLARGE_INTEGER            ReadTimeout,
  [in, optional]  PIO_DRIVER_CREATE_CONTEXT DriverContext
);

參數

[in] Filter

呼叫端的不透明篩選指標。

[in, optional] Instance

要傳送建立要求之迷你篩選驅動程序實例的不透明實例指標。 實例必須附加至 mailslot 文件系統的磁碟區。 這個參數是選擇性的,而且可以 NULL。 如果此參數 NULL,則要求會傳送至磁碟區檔系統驅動程式堆疊頂端的裝置物件。 如果它是非NULL,則要求只會傳送至附加在指定實例下方的小型篩選驅動程序實例。

[out] FileHandle

呼叫端配置的變數指標,如果呼叫 FltCreateMailslotFile 成功,就會接收檔句柄。

[out, optional] FileObject

呼叫端配置的變數指標,如果呼叫 FltCreateMailslotFile 成功,就會接收檔案物件指標。 這個參數是選擇性的,而且可以 NULL

[in] DesiredAccess

旗標的位掩碼,指定呼叫端對檔案或目錄所需的存取類型。 一組系統定義的 DesiredAccess 旗標會決定下列檔案物件的特定訪問許可權。

DesiredAccess 旗標 意義
FILE_READ_DATA 您可以從具名 mailslot 讀取數據。
FILE_READ_ATTRIBUTES FileAttributes 旗標可以讀取。 如需詳細資訊,請參閱 FltCreateFileEx2FileAttributes 參數中的有效旗標值數據表。
READ_CONTROL 您可以讀取與 mailslot 相關聯的存取控制清單 ACL 和擁有權資訊。
FILE_WRITE_DATA 數據可以寫入 mailslot。
FILE_WRITE_ATTRIBUTES FileAttributes 旗標可以寫入。
FILE_APPEND_DATA 數據可以附加至 mailslot。
WRITE_DAC 您可以撰寫與 mailslot 相關聯之 DACL 選擇性存取控制清單。
WRITE_OWNER 您可以撰寫與 mailslot 相關聯的擁有權資訊。
ACCESS_SYSTEM_SECURITY 呼叫端將具有 mailslot 之 SACL 的寫入許可權。
同步 呼叫端可以等候傳回的 FileHandle 設定為 Signaled 狀態,以同步處理 I/O 作業的完成。 如果設定 CreateOptions FILE_SYNCHRONOUS_IO_ALERT 或FILE_SYNCHRONOUS_IO_NONALERT旗標,則必須設定此旗標。

或者,對於任何不代表目錄的檔案物件,您可以指定下列一或多個泛型 ACCESS_MASK 旗標。 (STANDARD_RIGHTS_XXX 旗標是預先定義的系統值,用來在系統對象上強制執行安全性。您也可以將這些泛型旗標與上表的其他旗標結合。

DesiredAccess 至檔案值 對應至 DesiredAccess 旗標
GENERIC_READ STANDARD_RIGHTS_READ、FILE_READ_DATA和 SYNCHRONIZE。
GENERIC_WRITE STANDARD_RIGHTS_WRITE、FILE_WRITE_DATA、FILE_APPEND_DATA和 SYNCHRONIZE。

[in] ObjectAttributes

已使用 InitializeObjectAttributes初始化之不透明 OBJECT_ATTRIBUTES 結構的指標。 如果呼叫端正在系統進程內容中執行,這個參數可以 NULL。 否則,呼叫端必須在呼叫中將 OBJ_KERNEL_HANDLE 屬性設定為 InitializeObjectAttributes。 下表列出此檔案物件結構的成員。

成員 價值
ULONG 長度 ObjectAttributes 所指向之 結構中包含的數據位元組數目,。 這個值必須至少 sizeof(OBJECT_ATTRIBUTES)
PUNICODE_STRING ObjectName UNICODE_STRING 結構的指標,其中包含要建立或開啟之 mailslot 的名稱。 此名稱必須是完整檔案規格或裝置對象的名稱,除非它是與 RootDirectory所指定的目錄相對的檔名。 例如,“\Device\Mailslot\myslot” 或 “??\mailslot\myslot“ 可以是有效的檔案規格。 (注意:“??” 會將 “\DosDevices” 取代為 Win32 物件命名空間的名稱。 “\DosDevices” 仍可運作,但物件管理員會更快翻譯 “??” 。
HANDLE RootDirectory 選擇性的目錄句柄,由先前呼叫 FltCreateFileEx2取得。 如果此值 NULL,則 ObjectName 成員必須是包含目標 mailslot 完整路徑的完整檔案規格。 如果此值非NULL,則 ObjectName 成員會指定相對於此目錄的郵件集名稱。
PSECURITY_DESCRIPTOR SecurityDescriptor 要套用至 mailslot 的選擇性 SECURITY_DESCRIPTOR這類安全性描述元所指定的 A CL,只會在建立郵件集時套用至 mailslot。 如果建立mailslot時,此值 NULL,則放置於mailslot上的 ACL 會相依於mailslot檔案系統,並允許具有任何存取權的用戶端建立實例。
ULONG 屬性 一組旗標,可控制檔案對象屬性。 如果呼叫端正在系統進程內容中執行,這個參數可以是零。 否則,呼叫端必須設定OBJ_KERNEL_HANDLE旗標。 呼叫端也可以選擇性地設定OBJ_CASE_INSENSITIVE旗標,這表示名稱查閱程式代碼應該忽略 objectName 大小寫,而不是執行完全相符的搜尋。

[out] IoStatusBlock

IO_STATUS_BLOCK 結構的指標,該結構會接收最終完成狀態和要求之作業的相關信息。 從 FltCreateMailslotFile傳回時,變數 資訊 成員包含下列其中一個值:

  • FILE_CREATED
  • FILE_OPENED

[in] CreateOptions

建立或開啟 mailslot 時要套用的選項,做為下列旗標的相容組合。

標誌 意義
FILE_WRITE_THROUGH 將數據寫入mailslot的系統服務、檔案系統和驅動程式,在將任何要求的寫入作業視為完成之前,必須實際將數據傳輸到mailslot。 如果設定 CreateOptions 旗標FILE_NO_INTERMEDIATE_BUFFERING,則會自動設定此旗標。
FILE_SYNCHRONOUS_IO_ALERT mailslot 上的所有作業都會同步執行。 代表呼叫端的任何等候,都受限於警示的過早終止。 此旗標也會讓 I/O 系統維護 mailslot 位置內容。 如果設定此旗標,也必須設定 DesiredAccess SYNCHRONIZE 旗標,讓 I/O 管理員使用檔案物件做為同步處理物件。
FILE_SYNCHRONOUS_IO_NONALERT mailslot 上的所有作業都會同步執行。 系統等候同步處理 I/O 佇列和完成,不受警示限制。 此旗標也會讓 I/O 系統維護檔案位置內容。 如果設定此旗標,也必須設定 DesiredAccess SYNCHRONIZE 旗標,讓 I/O 管理員使用檔案物件做為同步處理物件。

[in] MailslotQuota

寫入mailslot之緩衝區的大小,以位元組為單位。

[in] MaximumMessageSize

要寫入mailslot之郵件的大小上限,以位元組為單位。 任何大小的訊息是由值 0 所指定。

[in] ReadTimeout

讀取作業等候郵件在mailslot中使用的時間。 默認逾時會以 100 奈秒的增量表示為負整數。 例如,將 250 毫秒指定為 –10*1000*250。 此外,下列值具有特殊意義。

價值 意義
0 如果沒有訊息存在,則立即傳回 。
-1 永遠等候訊息。

[in, optional] DriverContext

IoInitializeDriverCreateContext初始化之 IO_DRIVER_CREATE_CONTEXT 結構的選擇性指標。

傳回值

FltCreateMailslotFile 會傳回STATUS_SUCCESS或適當的 NTSTATUS 值,例如下列其中一項。

傳回碼 描述
STATUS_FLT_DELETING_OBJECT FilterInstance 參數中指定的篩選或實例正在中斷。 如果開啟的要求跨越磁碟區裝入點,而且 實例 參數不是非NULL,就可以接收此狀態代碼。 這是錯誤碼。
STATUS_OBJECT_PATH_SYNTAX_BAD ObjectAttributes 參數未包含 RootDirectory 成員,但 OBJECT_ATTRIBUTES 結構中的 ObjectName 成員是空字串,或不包含OBJECT_NAME_PATH_SEPARATOR字元。 此錯誤碼表示物件路徑的語法不正確。

言論

FltCreateMailslotFile 函式可讓小型篩選驅動程式建立或開啟 mailslot 實例。 這對於建立虛擬Mailslot或建立散發給其他數個mailslotslot的mailslot群組很有用。

Instance 參數是 NULL,或先前透過附加至 mailslot 磁碟區來設定。 磁碟區指標是透過傳遞 「\Device\Mailslot」 作為磁碟區名稱來取得,以 FltGetVolumeFromName

若要將額外的 create 參數 (ECP) 指定為建立作業的一部分,請使用 FltAllocateExtraCreateParameterList 例程,初始化 IO_DRIVER_CREATE_CONTEXT 結構 成員。 如果使用 ECP,則必須使用其相關聯的支援例程來配置、初始化和釋放它們。 從 FltCreateMailslotFile呼叫傳回時,ECP 清單會保持不變,而且可能會傳遞給其他建立作業 FltCreateMailslotFile 的其他呼叫。 ECP 清單結構不會自動解除分配。 FltCreateMailslotFile 的呼叫端必須呼叫 FltFreeExtraCreateParameterList 例程來解除分配此結構。

如果 實例NULL,則從 FltCreateMailslotFile 建立要求只會傳送至附加在指定迷你篩選驅動程序實例和 mailslot 文件系統下方的實例。 上面附加的指定實例和實例不會收到建立要求。 如果未指定任何實例,則要求會移至堆疊頂端,並由所有實例和 mailslot 檔系統接收。

要求

要求 價值
最低支援的用戶端 可在 Windows 8 中使用。
目標平臺 普遍
標頭 fltkernel.h (包括 FltKernel.h)
連結庫 Fltmgr.lib
IRQL PASSIVE_LEVEL

另請參閱

FltAllocateExtraCreateParameterList

FltFreeExtraCreateParameterList

IO_DRIVER_CREATE_CONTEXT

InitializeObjectAttributes

IoInitializeDriverCreateContext