Fungsi RxStartMinirdr (mrx.h)

RxStartMinirdr dipanggil untuk memulai pengalihan mini jaringan yang sebelumnya telah dipanggil untuk mendaftar dengan RDBSS. Sebagai bagian dari RxStartMinirdr, RDBSS juga akan mendaftarkan driver pengalih mini jaringan sebagai penyedia konvensi penamaan universal (UNC) dengan Beberapa Penyedia UNC (MUP) jika driver menunjukkan dukungan untuk nama UNC.

Sintaks

NTSTATUS RxStartMinirdr(
  [in]  IN PRX_CONTEXT RxContext,
  [out] OUT PBOOLEAN   PostToFsp
);

Parameter

[in] RxContext

Penunjuk ke struktur RX_CONTEXT untuk digunakan untuk mendapatkan objek perangkat dan menentukan apakah ini adalah proses sistem file.

[out] PostToFsp

Penunjuk ke nilai logis yang diatur ke TRUE saat dikembalikan jika permintaan harus diposting untuk diproses nanti oleh proses sistem file.

Menampilkan nilai

RxStartMinirdr mengembalikan STATUS_SUCCESS jika urutan startup berhasil atau salah satu nilai kesalahan berikut:

Menampilkan kode Deskripsi
STATUS_ACCESS_DENIED Permintaan untuk mendaftar sebagai penyedia UNC gagal karena akses ditolak.
STATUS_ACCESS_VIOLATION Permintaan untuk mendaftar sebagai penyedia UNC gagal dengan pelanggaran akses.
STATUS_INSUFFICIENT_RESOURCES Tidak ada cukup sumber daya untuk menyelesaikan rutinitas ini.
STATUS_PENDING Urutan startup untuk RDBSS dan pengalih mini jaringan harus diselesaikan dalam konteks proses sistem, bukan proses aplikasi mode pengguna. Jika panggilan ke RxStartMinirdr berasal dari proses mode pengguna (permintaan layanan mode pengguna, misalnya), maka permintaan diposting untuk diproses nanti dalam RDBSS dan STATUS_PENDING akan dikembalikan. Kesalahan ini juga dapat dikembalikan jika kunci RDBSS internal tertentu tidak dapat diperoleh tanpa menunggu. Panggilan akan diselesaikan nanti dari utas sistem.
STATUS_REDIRECTOR_STARTED Pengalih-mini jaringan sudah dimulai.

Keterangan

Pengalih mini jaringan mendaftar dengan RDBSS setiap kali driver dimuat oleh kernel dan kemudian membatalkan pendaftaran dengan RDBSS ketika driver dibongkar. Pengalih mini jaringan menginformasikan RDBSS bahwa telah dimuat dengan memanggil RxRegisterMinirdr, rutinitas pendaftaran yang diekspor dari RDBSS. Sebagai bagian dari proses pendaftaran ini, pengalih mini jaringan meneruskan parameter ke RxRegisterMinirdr yang merupakan penunjuk ke struktur besar, MINIRDR_DISPATCH, yang berisi informasi konfigurasi untuk pengalihan mini jaringan dan tabel penunjuk ke rutinitas panggilan balik yang diterapkan oleh driver pengalih mini jaringan. RDBSS menggunakan rutinitas panggilan balik yang diteruskan dalam struktur ini untuk berkomunikasi dengan pengalih mini jaringan.

Pengalih mini jaringan sebenarnya tidak memulai operasi sampai menerima panggilan ke rutinitas MRxStart-nya , salah satu rutinitas panggilan balik yang diteruskan dalam struktur MINIRDR_DISPATCH. Rutinitas panggilan balik MrxStart harus diimplementasikan oleh driver pengalih mini jaringan jika ingin menerima rutinitas panggilan balik untuk operasi kecuali jika pengalih mini jaringan mempertahankan titik masuk pengiriman drivernya sendiri. Jika tidak, RDBSS hanya akan mengizinkan paket permintaan I/O berikut melalui ke driver sampai MrxStart berhasil dikembalikan:

  • Permintaan IRP untuk operasi pembuatan perangkat dan operasi perangkat di mana parameter FileObject-FileName.Length> pada IRPSP adalah nol dan parameter FileObject-RelatedFileObject> adalah NULL.

Untuk permintaan IRP lainnya, pengiriman RDBSS rutin RxFsdDispatch akan mengembalikan status STATUS_REDIRECTOR_NOT_STARTED.

Rutinitas pengiriman RDBSS juga akan gagal setiap permintaan untuk paket permintaan I/O berikut:

  • IRP_MJ_CREATE_MAILSLOT
  • IRP_MJ_CREATE_NAMED_PIPE

Rutinitas MrxStart pengarah mini jaringan dipanggil oleh RDBSS ketika rutinitas RxStartMinirdr dipanggil. Rutinitas RDBSS RxStartMinirdr biasanya dipanggil sebagai hasil dari permintaan FSCTL atau IOCTL dari aplikasi atau layanan mode pengguna untuk memulai pengalihan mini jaringan. Panggilan ke RxStartMinirdr tidak dapat dilakukan dari rutinitas DriverEntry dari pengalihan mini jaringan setelah panggilan yang berhasil ke RxRegisterMinirdr karena beberapa pemrosesan mulai mengharuskan inisialisasi driver selesai.

Ketika RDBSS menerima permintaan FSCTL atau IOCTL yang dikirim ke driver mini-redirector jaringan dari mode pengguna, RDBSS membuat struktur RX_CONTEXT dan meneruskan panggilan ini ke MRxLowIOSubmit[LOWIO_OP_FSCTL] atau MRxLowIOSubmit[LOWIO_OP_IOCTL] memanggil kembali rutinitas yang ditentukan dalam struktur MINIRDR_DISPATCH. Implementasi pengalih mini jaringan dari rutinitas panggilan balik ini akan mengenali permintaan untuk memulai dan memanggil RxStartMinirdr. Proses normal peristiwa ini tercantum di bawah ini secara lebih rinci:

  1. Aplikasi mode pengguna mengeluarkan permintaan FSCTL atau IOCTL privat untuk memulai pengalihan mini jaringan.

  2. Driver kernel RDBSS menerima permintaan FSCTL atau IOCTL atas nama pengalih mini jaringan karena RDBSS telah menggantikan titik masuk pengiriman driver driver pengalihan mini untuk menunjuk ke rutinitas internal RDBSS. Perhatikan bahwa ini mengasumsikan bahwa pengalih mini jaringan tidak mengatur RX_REGISTERMINI_FLAG_DONT_INIT_DRIVER_DISPATCH dalam parameter Kontrol saat memanggil RxRegisterMinirdr. Opsi yang diteruskan ke RxRegisterMinirdr ini tidak biasa dan menunjukkan bahwa pengalih mini jaringan tidak ingin RDBSS menggantikan titik masuk pengiriman drivernya.

  3. RDBSS menerima permintaan FSCTL atau IOCTL secara internal atas nama pengalih jaringan. Dispatcher RDBSS mengalokasikan dan menginisialisasi struktur RX_CONTEXT. RDBSS kemudian memanggil redirector mini jaringan MRxLowIOSubmit[LOW_OP_FSCTL] atau MRxLowIOSubmit[LOW_OP_IOCTL] rutin yang didefinisikan dalam struktur MINIRDR_DISPATCH untuk pengalih mini jaringan ini, meneruskan struktur RX_CONTEXT yang diinisialisasi sebagai parameter.

  4. Implementasi mini-redirector jaringan dari rutinitas panggilan balik ini akan mengenali permintaan FSCTL atau IOCTL privat untuk memulai dan memanggil RxStartMinirdr, meneruskan penunjuk struktur RX_CONTEXT yang diterimanya dari RDBSS sebagai parameter RxContext dan alamat anggota PostToFSPRxContext sebagai parameter PostToFsp .

  5. Karena panggilan ini dimulai dari mode pengguna, RxStartMinirdr akan mengembalikan STATUS_PENDING dan mengatur PostToFsp ke TRUE.

  6. Rutinitas MRxLowIOSubmit[LOW_OP_FSCTL] atau MRxLowIOSubmit[LOW_OP_IOCTL] jaringan akan menerima nilai pengembalian ini dan meneruskannya kembali ke dispatcher RDBSS.

  7. Dispatcher RDBSS akan menerima nilai pengembalian STATUS_PENDING dan akan mengatur PostToFsp ke TRUE dan kemudian akan memposting permintaan ke utas pekerja untuk menjalankan kembali panggilan ke pengalih mini jaringan.

Setelah titik ini, ada dua kemungkinan hasil berdasarkan apakah FSCTL atau IOCTL diminta sebagai operasi asinkron atau sinkron.

Jika ini adalah permintaan asinkron, hal berikut akan terjadi:

  • Pemanggil mode pengguna akan menerima respons STATUS_PENDING dari panggilan. Utas pekerja yang diposting akhirnya akan memanggil RxStartMinirdr dari utas sistem file dan panggilan akan diproses. Rutinitas RxStartMinirdr akan mencoba mendaftarkan pengalih mini jaringan sebagai penyedia UNC, jika diminta. Pada versi Windows sebelum Windows Vista, RDBSS kemudian akan mencoba mendaftarkan pengalihan mini jaringan sebagai sistem file dengan manajer I/O. Jika panggilan ini berhasil, RxStartMinirdr memanggil rutinitas panggilan balik MrxStart yang diterapkan oleh pengalih mini jaringan. Nilai yang dikembalikan dari MrxStart pada akhirnya akan dikembalikan ke aplikasi mode pengguna yang memulai proses urutan panggilan sebagai operasi asinkron.

Jika ini adalah permintaan sinkron, hal berikut akan terjadi:

  • Pemanggil mode pengguna tidak akan menerima respons STATUS_PENDING tetapi akan dipaksa untuk menunggu sampai panggilan kembali dari utas pekerja yang diposting. Utas pekerja yang diposting akhirnya akan memanggil RxStartMinirdr dari utas sistem file dan panggilan akan diproses. Rutinitas RxStartMinirdr akan mencoba mendaftarkan pengalih mini jaringan sebagai penyedia UNC, jika diminta. Pada versi Windows sebelum Windows Vista, RDBSS kemudian akan mencoba mendaftarkan pengalihan mini jaringan sebagai sistem file dengan manajer I/O. Jika panggilan ini berhasil, RxStartMinirdr memanggil rutinitas panggilan balik MrxStart yang diterapkan oleh pengalih mini jaringan. Nilai yang dikembalikan dari MrxStart akan dikembalikan ke aplikasi mode pengguna yang memulai proses urutan panggilan.

Jika pengalih mini jaringan menunjukkan dukungan untuk UNC saat mendaftar dengan RDBSS (parameter Kontrol ke RxRegisterMinirdr), RxStartMinirdr akan mencoba mendaftarkan parameter DeviceName dari pengalih mini jaringan sebagai penyedia UNC dengan MUP (RDBSS memanggil FsRtlRegisterUncProvider atas nama pengalih mini jaringan).

Pada versi Windows sebelum Windows Vista, RxStartMinirdr mendaftarkan sistem file dengan manajer I/O (RDBSS memanggil IoRegisterFileSystem atas nama pengalih mini jaringan).

Jika panggilan berhasil, RxStartMinirdr memanggil rutinitas MrxStart pengarah mini jaringan. Jika MrxStart mengembalikan keberhasilan, status internal pengalih mini di RDBSS diatur ke RDBSS_STARTED. Anggota StartStopContext.Version dari objek perangkat pengalih mini juga akan dinaikkan.

Urutan startup untuk RDBSS dan pengalih mini jaringan harus diselesaikan dalam konteks proses sistem jika operasi asinkron diminta. Jika panggilan ke RxStartMinirdr berasal dari proses mode pengguna (permintaan layanan mode pengguna, misalnya), permintaan akan diposting secara internal oleh RDBSS ke antrean kerja untuk diproses nanti dan STATUS_PENDING akan dikembalikan dan parameter PostToFsp akan diatur ke TRUE. Selain itu, Jika kunci RDBSS internal tertentu tidak dapat diperoleh tanpa menunggu, STATUS_PENDING dikembalikan dan PostToFsp diatur ke TRUE. Ketika STATUS_PENDING dikembalikan, RxStartMinirdr akan dipanggil lagi dari dalam proses sistem. Jika permintaan FSCTL atau IOCTL yang memulai panggilan ke RxStartMinirdr diatur untuk operasi asinkron, maka RDBSS akan mengembalikan STATUS_PENDING mencadangkan rantai panggilan ke permintaan FSCTL atau IOCTL asli dari mode pengguna. Sebaliknya, jika permintaan FSCTL atau IOCTL untuk operasi sinkron, maka panggilan juga akan diposting ke utas kerja untuk eksekusi nanti, tetapi panggilan FSCTL atau IOCTL tidak akan kembali ke mode pengguna sampai RxStartMinirdr telah dijalankan dalam konteks proses sistem file. Dalam hal ini, pemanggil FSCTL atau IOCTL tidak akan pernah melihat pengembalian kesalahan STATUS_PENDING. Perilaku yang lebih khas adalah memulai permintaan sinkron untuk operasi mulai/hentikan ini untuk menyederhanakan kode aplikasi mode pengguna.

Pada penghentian abnormal atau kegagalan lainnya, RxStartMinirdr akan mencoba membatalkan operasi ini, termasuk membatalkan pendaftaran penyedia UNC dengan MUP, membatalkan pendaftaran sistem file, membebaskan memori yang dialokasikan untuk menyimpan nama domain yang akan digunakan oleh siaran mailslot, dan memperbarui tabel RDBSS internal.

Persyaratan

Persyaratan Nilai
Target Platform Desktop
Header mrx.h (termasuk Mrx.h)
IRQL <= APC_LEVEL

Lihat juga

, RxpUnregisterMinirdr

DriverEntry

FsRtlRegisterUncProvider

IoRegisterFileSystem

MRxLowIOSubmit[LOWIO_OP_FSCTL]

MRxLowIOSubmit[LOWIO_OP_IOCTL]

MRxStart

RxFsdDispatch

RxRegisterMinirdr

RxSetDomainForMailslotBroadcast

RxStopMinirdr

RxUnregisterMinirdr

__RxFillAndInstallFastIoDispatch