Bagikan melalui


Fungsi FltCreateNamedPipeFile (fltkernel.h)

Driver minifilter memanggil FltCreateNamedPipeFile untuk membuat pipa baru atau membuka pipa yang ada.

Sintaks

NTSTATUS FLTAPI FltCreateNamedPipeFile(
  [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                     ShareAccess,
  [in]            ULONG                     CreateDisposition,
  [in]            ULONG                     CreateOptions,
  [in]            ULONG                     NamedPipeType,
  [in]            ULONG                     ReadMode,
  [in]            ULONG                     CompletionMode,
  [in]            ULONG                     MaximumInstances,
                  ULONG                     InboundQuota,
                  ULONG                     OutboundQuota,
  [in, optional]  PLARGE_INTEGER            DefaultTimeout,
  [in, optional]  PIO_DRIVER_CREATE_CONTEXT DriverContext
);

Parameter

[in] Filter

Penunjuk filter buram untuk pemanggil.

[in, optional] Instance

Penunjuk instans buram untuk instans driver minifilter tempat permintaan pembuatan akan dikirim. Instans harus dilampirkan ke volume untuk sistem file pipa bernama. Parameter ini bersifat opsional dan dapat berupa NULL. Jika parameter ini NULL, permintaan dikirim ke objek perangkat di bagian atas tumpukan driver sistem file untuk volume. Jika bukan NULL, permintaan hanya dikirim ke instans driver minifilter yang dilampirkan di bawah instans yang ditentukan.

[out] FileHandle

Penunjuk ke variabel yang dialokasikan penelepon yang menerima handel file jika panggilan ke FltCreateNamedPipeFile berhasil.

[out, optional] FileObject

Penunjuk ke variabel yang dialokasikan penelepon yang menerima penunjuk objek file jika panggilan ke FltCreateNamedPipeFile berhasil. Parameter ini bersifat opsional dan dapat berupa NULL.

[in] DesiredAccess

Bitmask bendera yang menentukan jenis akses yang diperlukan pemanggil ke file atau direktori. Kumpulan bendera DesiredAccess yang ditentukan sistem menentukan hak akses khusus berikut untuk objek file.

Bendera DesiredAccess Makna
FILE_READ_DATA Data dapat dibaca dari pipa bernama.
FILE_READ_ATTRIBUTES Bendera FileAttributes dapat dibaca. Untuk informasi tambahan, lihat tabel nilai bendera yang valid di parameter FileAttributesdari FltCreateFileEx2.
READ_CONTROL Daftar kontrol akses (ACL) dan informasi kepemilikan yang terkait dengan pipa bernama dapat dibaca.
FILE_WRITE_DATA Data dapat ditulis ke pipa bernama.
FILE_WRITE_ATTRIBUTES Bendera FileAttributes dapat ditulis.
FILE_APPEND_DATA Data dapat ditambahkan ke file.
WRITE_DAC Daftar kontrol akses diskresi (DACL) yang terkait dengan pipa bernama dapat ditulis.
WRITE_OWNER Informasi kepemilikan yang terkait dengan pipa bernama dapat ditulis.
ACCESS_SYSTEM_SECURITY Pemanggil akan memiliki akses tulis ke SACL pipa bernama
MENSINKRONISASI Pemanggil dapat menyinkronkan penyelesaian operasi I/O dengan menunggu FileHandle yang dikembalikan diatur ke status Sinyal. Bendera ini harus diatur jika bendera CreateOptions FILE_SYNCHRONOUS_IO_ALERT atau FILE_SYNCHRONOUS_IO_NONALERT diatur.
 

Atau, untuk objek file apa pun yang tidak mewakili direktori, Anda dapat menentukan satu atau beberapa bendera ACCESS_MASK generik berikut. (Bendera STANDARD_RIGHTS_XXX adalah nilai sistem yang telah ditentukan sebelumnya yang digunakan untuk menegakkan keamanan pada objek sistem.) Anda juga dapat menggabungkan bendera generik ini dengan bendera tambahan dari tabel sebelumnya.

DesiredAccess ke Nilai File Peta ke Bendera DesiredAccess
GENERIC_READ STANDARD_RIGHTS_READ, FILE_READ_DATA, dan SINKRONKAN.
GENERIC_WRITE STANDARD_RIGHTS_WRITE, FILE_WRITE_DATA, FILE_APPEND_DATA, dan SINKRONKAN.

[in] ObjectAttributes

Penunjuk ke struktur OBJECT_ATTRIBUTES buram yang sudah diinisialisasi dengan InitializeObjectAttributes. Jika pemanggil berjalan dalam konteks proses sistem, parameter ini bisa null. Jika tidak, penelepon harus mengatur atribut OBJ_KERNEL_HANDLE dalam panggilan ke InitializeObjectAttributes. Anggota struktur ini untuk objek file tercantum dalam tabel berikut.

Anggota Nilai
PanjangULONG Jumlah byte data yang terkandung dalam struktur yang ditujukkan oleh ObjectAttributes. Nilai ini harus setidaknya ukuranof(OBJECT_ATTRIBUTES).
PUNICODE_STRING ObjectName Penunjuk ke struktur UNICODE_STRING yang berisi nama pipa yang akan dibuat atau dibuka. Nama ini harus merupakan spesifikasi file yang sepenuhnya memenuhi syarat atau nama objek perangkat kecuali itu adalah nama file yang relatif terhadap direktori yang ditentukan oleh RootDirectory. Misalnya, "\Device\NamedPipe\mypipe" atau "\?? \pipe\mypipe" bisa berupa spesifikasi file yang valid. (Catatan: "\??" menggantikan "\DosDevices" sebagai nama namespace objek Win32. "\DosDevices" masih berfungsi, tetapi "\??" diterjemahkan lebih cepat oleh manajer objek.)
HANDLE RootDirectory Handel opsional ke direktori, diperoleh oleh panggilan sebelumnya ke FltCreateFileEx2. Jika nilai ini NULL, anggota ObjectNameharus menjadi spesifikasi file yang sepenuhnya memenuhi syarat yang menyertakan jalur lengkap ke pipa target. Jika nilai ini bukan NULL, anggota ObjectName menentukan nama pipa yang relatif terhadap direktori ini.
PSECURITY_DESCRIPTOR SecurityDescriptor Pendeskripsi keamanan opsional (SECURITY_DESCRIPTOR) yang akan diterapkan ke pipa. ACL yang ditentukan oleh deskriptor keamanan seperti itu hanya diterapkan ke pipa saat dibuat. Jika nilainya ADALAH NULL saat pipa dibuat, ACL yang ditempatkan pada pipa bergantung pada sistem file pipa bernama dan dapat memungkinkan klien dengan akses apa pun untuk membuat instans.
AtributULONG Sekumpulan bendera yang mengontrol atribut objek file. Jika pemanggil berjalan dalam konteks proses sistem, parameter ini bisa nol. Jika tidak, penelepon harus mengatur bendera OBJ_KERNEL_HANDLE. Pemanggil juga dapat secara opsional mengatur bendera OBJ_CASE_INSENSITIVE, yang menunjukkan bahwa kode pencarian nama harus mengabaikan kasus ObjectName daripada melakukan pencarian yang sama persis.

[out] IoStatusBlock

Penunjuk ke struktur IO_STATUS_BLOCK yang menerima status penyelesaian akhir dan informasi tentang operasi yang diminta. Saat kembali dari FltCreateNamedPipeFile, anggota Informasi variabel berisi salah satu nilai berikut:

FILE_CREATED

FILE_OPENED

[in] ShareAccess

Jenis akses berbagi ke file yang diperlukan pemanggil sebagai salah satu atau kombinasi bendera berikut. Untuk peluang terbesar menghindari kesalahan pelanggaran berbagi, tentukan semua bendera akses berbagi berikut.

Bendera ShareAccess Makna
FILE_SHARE_READ File dapat dibuka untuk akses baca oleh panggilan utas lain ke FltCreateNamedPipeFile.
FILE_SHARE_WRITE File dapat dibuka untuk akses tulis oleh panggilan utas lain ke FltCreateNamedPipeFile.

[in] CreateDisposition

Nilai yang menentukan tindakan yang akan diambil, tergantung pada apakah file sudah ada. Nilainya bisa salah satu dari yang dijelaskan dalam tabel berikut.

Nilai CreateDisposition Makna
FILE_CREATE Jika file sudah ada, gagalkan permintaan dan jangan membuat atau membuka file yang ditentukan. Jika tidak, buat file.
FILE_OPEN Jika file sudah ada, buka alih-alih membuat file baru. Jika tidak, gagalkan permintaan dan jangan buat file baru.
FILE_OPEN_IF Jika file sudah ada, buka file tersebut. Jika tidak, buat file.

[in] CreateOptions

Opsi yang akan diterapkan saat membuat atau membuka pipa, sebagai kombinasi bendera berikut yang kompatibel.

Bendera CreateOptions Makna
FILE_WRITE_THROUGH Layanan sistem, sistem pipa, dan driver yang menulis data ke pipa harus benar-benar mentransfer data ke dalam pipa sebelum operasi tulis yang diminta dianggap selesai. Bendera ini secara otomatis diatur jika bendera CreateOptions FILE_NO_INTERMEDIATE_BUFFERING diatur.
FILE_SYNCHRONOUS_IO_ALERT Semua operasi pada pipa dilakukan secara sinkron. Setiap penantian atas nama penelepon tunduk pada penghentian dini dari pemberitahuan. Bendera ini juga menyebabkan sistem I/O mempertahankan konteks posisi pipa. Jika bendera ini diatur, bendera DesiredAccess SYNCHRONIZE juga harus diatur sehingga Manajer I/O menggunakan objek file sebagai objek sinkronisasi.
FILE_SYNCHRONOUS_IO_NONALERT Semua operasi pada pipa dilakukan secara sinkron. Menunggu di sistem untuk menyinkronkan antrean I/O dan penyelesaian tidak tunduk pada pemberitahuan. Bendera ini juga menyebabkan sistem I/O mempertahankan konteks posisi file. Jika bendera ini diatur, bendera DesiredAccess SYNCHRONIZE juga harus diatur sehingga Manajer I/O menggunakan objek file sebagai objek sinkronisasi.

[in] NamedPipeType

Jenis pipa bernama untuk dibuat. Dapat berupa salah satu dari nilai berikut:

Nilai Makna
FILE_PIPE_BYTE_STREAM_TYPE
Data ditulis ke pipa sebagai aliran byte. Untuk menggunakan tipe ini, ReadMode tidak boleh FILE_PIPE_MESSAGE_MODE.
FILE_PIPE_MESSAGE_TYPE
Data ditulis ke pipa sebagai pesan.

[in] ReadMode

Mode untuk membaca dari pipa.

Nilai Makna
FILE_PIPE_BYTE_STREAM_MODE
Data pipa dibaca sebagai aliran byte.
FILE_PIPE_MESSAGE_MODE
Data pipa dibaca sebagai pesan. Untuk menggunakan mode ini, NamedPipeType harus FILE_PIPE_MESSAGE_TYPE.

[in] CompletionMode

Mode penyelesaian untuk pembacaan dan penulisan pipa.

Nilai Makna
FILE_PIPE_QUEUE_OPERATION
Permintaan baca dan tulis pipa diantrekan dan dapat diblokir hingga selesai.
FILE_PIPE_COMPLETE_OPERATION
Permintaan baca dan tulis pipa segera diselesaikan.

[in] MaximumInstances

Jumlah maksimum instans yang diizinkan untuk pipa bernama ini.

InboundQuota

Jumlah byte yang akan dicadangkan untuk buffer input.

OutboundQuota

Jumlah byte yang akan dicadangkan untuk buffer output.

[in, optional] DefaultTimeout

Batas waktu default dalam kenaikan 100 nanodetik. Nilai ini dinyatakan sebagai bilangan bulat negatif. Misalnya, 250 milidetik ditentukan sebagai –10 * 1000 * 250.

[in, optional] DriverContext

Penunjuk opsional ke struktur IO_DRIVER_CREATE_CONTEXT yang sudah diinisialisasi oleh IoInitializeDriverCreateContext.

Nilai kembali

FltCreateNamedPipeFile mengembalikan STATUS_SUCCESS atau nilai NTSTATUS yang sesuai seperti salah satu hal berikut ini.

Menampilkan kode Deskripsi
STATUS_FLT_DELETING_OBJECT
Filter atau instans yang ditentukan dalam parameter Filter atau Instans sedang ditumbangkan. Kode status ini dapat diterima jika permintaan terbuka melewati titik pemasangan volume dan parameter Instans bukan NULL. Ini adalah kode kesalahan.
STATUS_OBJECT_PATH_SYNTAX_BAD
Parameter ObjectAttributes tidak berisi anggota RootDirectory , tetapi anggota ObjectName dalam struktur OBJECT_ATTRIBUTES adalah string kosong atau tidak berisi karakter OBJECT_NAME_PATH_SEPARATOR. Kode kesalahan ini menunjukkan sintaks yang salah untuk jalur objek.

Keterangan

Fungsi FltCreateNamedPipeFile memungkinkan driver minifilter untuk membuat atau membuka instans pipa. Ini berguna untuk membuat pipa virtual atau untuk membuat serikat pipa untuk multipleks I/O.

Parameter instans adalah NULL atau sebelumnya diatur dengan melampirkan ke volume pipa bernama. Penunjuk volume diperoleh dengan meneruskan "\Device\NamedPipe" sebagai nama volume ke FltGetVolumeFromName.

Untuk menentukan parameter pembuatan ekstra (ECP) sebagai bagian dari operasi pembuatan, inisialisasi anggota ExtraCreateParameter dari struktur IO_DRIVER_CREATE_CONTEXT dengan rutinitas FltAllocateExtraCreateParameterList . Jika ECP digunakan, EKP harus dialokasikan, diinisialisasi, dan dibebaskan menggunakan rutinitas dukungan terkait. Setelah kembali dari panggilan FltCreateNamedPipeFile, daftar ECP tidak berubah dan dapat diteruskan ke panggilan tambahan FltCreateNamedPipeFile untuk operasi pembuatan lainnya. Struktur daftar ECP tidak secara otomatis dibatalkan alokasinya. Pemanggil FltCreateNamedPipeFile harus membatalkan alokasi struktur ini dengan memanggil rutinitas FltFreeExtraCreateParameterList .

Jika Instans bukan NULL, permintaan buat dari FltCreateNamedPipeFile hanya dikirim ke instans yang terpasang di bawah instans driver minifilter yang ditentukan dan ke sistem file pipa bernama. Instans yang ditentukan dan instans yang terpasang di atasnya tidak menerima permintaan buat. Jika tidak ada instans yang ditentukan, permintaan masuk ke bagian atas tumpukan dan diterima oleh semua instans dan sistem file pipa bernama.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia di Windows 8.
Target Platform Universal
Header fltkernel.h (termasuk FltKernel.h)
Pustaka Fltmgr.lib
IRQL PASSIVE_LEVEL

Lihat juga

FltAllocateExtraCreateParameterList

FltFreeExtraCreateParameterList

IO_DRIVER_CREATE_CONTEXT

InitializeObjectAttributes

IoInitializeDriverCreateContext