Bagikan melalui


PMRX_CALLDOWN fungsi panggilan balik (mrx.h)

Panggilan balik ini dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan melakukan tindakan berdasarkan IRP yang disediakan.

Sintaks

PMRX_CALLDOWN PmrxCalldown;

NTSTATUS PmrxCalldown(
  [in, out] IN OUT PRX_CONTEXT RxContext
)
{...}

Parameter

[in, out] RxContext

Penunjuk ke struktur RX_CONTEXT. Parameter ini berisi IRP yang meminta operasi.

Nilai kembali

Panggilan balik ini mengembalikan STATUS_SUCCESS pada keberhasilan atau nilai NTSTATUS yang sesuai, seperti berikut ini:

Menampilkan kode Deskripsi
STATUS_ACCESS_DENIED Permintaan dibuat untuk menghentikan atau memulai pengalihan mini jaringan, tetapi pemanggil tidak memiliki keamanan yang tepat untuk operasi ini.
STATUS_BUFFER_OVERFLOW Buffer untuk menerima informasi atribut yang diperluas terlalu kecil. Nilai pengembalian ini harus dianggap berhasil dan sebanyak mungkin data yang valid harus dikembalikan dalam anggota Info.Buffer dari struktur RX_CONTEXT yang ditunjukkan oleh parameter RxContext .
STATUS_BUFFER_TOO_SMALL Buffer terlalu kecil untuk menerima data yang diminta. Jika nilai ini dikembalikan, anggota InformationToReturn dari struktur RX_CONTEXT yang diacu oleh parameter RxContext harus diatur ke ukuran minimum buffer yang diharapkan agar panggilan berhasil.
STATUS_CONNECTION_DISCONNECTED Sambungan terputus.
STATUS_EA_CORRUPT_ERROR Informasi atribut yang diperluas tidak valid diterima dari server jarak jauh.
STATUS_EA_TOO_LARGE Informasi atribut yang diperluas yang diteruskan lebih besar dari ukuran yang didukung oleh berbagi jarak jauh.
STATUS_FILE_CLOSED Struktur FCB diperoleh, tetapi struktur SRV_OPEN terkait telah ditutup.
STATUS_INSUFFICIENT_RESOURCES Tidak ada cukup sumber daya untuk menyelesaikan operasi.
STATUS_INTERNAL_ERROR Terjadi kesalahan internal pada pengalihan mini jaringan.
STATUS_INVALID_BUFFER_SIZE Ukuran buffer yang diminta terlalu besar.
STATUS_INVALID_DEVICE_REQUEST Permintaan perangkat yang tidak valid dikirim ke pengarah mini jaringan.
STATUS_INVALID_NETWORK_RESPONSE Respons yang tidak valid diterima dari server jarak jauh.
STATUS_INVALID_PARAMETER Parameter yang tidak valid ditentukan dalam RxContext.
STATUS_LINK_FAILED Upaya untuk menyambungkan kembali ke server jarak jauh untuk menyelesaikan permintaan gagal.
STATUS_MORE_PROCESSING_REQUIRED Pengalih mini jaringan mengembalikan nilai ini untuk menonaktifkan penciutkan permintaan terbuka ini.
STATUS_NETWORK_ACCESS_DENIED Akses jaringan ditolak. Kesalahan ini dapat dikembalikan jika pengalihan mini jaringan diminta untuk membuka file baru pada berbagi baca-saja.
STATUS_NETWORK_NAME_DELETED Nama jaringan telah dihapus.
STATUS_NONEXISTENT_EA_ENTRY Tidak ada atribut yang diperluas pada objek file dan pengguna menyediakan indeks atribut yang diperluas.
STATUS_NOT_IMPLEMENTED Fitur yang diminta, seperti boot jarak jauh atau file halaman jarak jauh, tidak diimplementasikan.
STATUS_NOT_SUPPORTED Fitur yang diminta, seperti atribut yang diperluas, tidak didukung.
STATUS_OBJECT_NAME_COLLISION Pengalih mini jaringan diminta untuk membuat file yang sudah ada.
STATUS_OBJECT_NAME_NOT_FOUND Nama objek tidak ditemukan. Kesalahan ini dapat dikembalikan jika pengalih mini jaringan diminta untuk membuka file yang tidak ada.
STATUS_OBJECT_PATH_NOT_FOUND Jalur objek tidak ditemukan. Kesalahan ini dapat dikembalikan jika objek aliran NTFS diminta dan sistem file jarak jauh tidak mendukung aliran.
STATUS_ONLY_IF_CONNECTED Struktur SRV_OPEN tidak tersambung.
STATUS_REDIRECTOR_HAS_OPEN_HANDLES Ini adalah permintaan untuk menghentikan pengalihan mini jaringan, tetapi pengalih memiliki handel terbuka yang mencegahnya berhenti saat ini.
STATUS_REDIRECTOR_NOT_STARTED Ini adalah permintaan untuk menghentikan pengalihan mini jaringan, tetapi pengalih tidak dimulai.
STATUS_REDIRECTOR_STARTED Ini adalah permintaan untuk memulai pengalihan mini jaringan, tetapi pengalih sudah dimulai.
STATUS_REPARSE Pemisahan ulang diperlukan untuk menangani tautan simbolis.
STATUS_REQUEST_ABORTED Permintaan jaringan dibatalkan.
STATUS_RETRY Operasi harus dicoba kembali. Kesalahan ini dapat dikembalikan jika pengalih mini jaringan mengalami pelanggaran berbagi atau kesalahan akses ditolak.
STATUS_SHARING_VIOLATION Terjadi pelanggaran berbagi.
STATUS_UNSUCCESSFUL Panggilan tidak berhasil.

Keterangan

Rutinitas MRxCloseSrvOpen dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan menutup struktur SRV_OPEN.

MRxCloseSrvOpen dipanggil oleh RDBSS sebagai bagian dari operasi pembersihan dan penutupan pada objek file. Diasumsikan bahwa pengalih mini jaringan akan menutup file di seluruh jaringan.

Sebelum memanggil MRxCloseSrvOpen, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT, yang ditunjukkan oleh parameter RxContext :

MajorFunction diatur ke IRP_MJ_CLOSE

pFcb diatur ke struktur FCB yang pemrosesan tutupnya akan dimulai

pFobx diatur ke struktur FOBX tempat pemrosesan penutupan akan dimulai

RDBSS dan pengalih mini jaringan tidak selalu menutup struktur SRV_OPEN saat pengguna menutup file. Untuk meningkatkan performa dalam beberapa kasus, pengalih mini jaringan dapat mencoba menggunakan kembali SRV_OPEN dan data yang di-cache tanpa kontak dengan server. Beberapa aplikasi Microsoft Windows menunjukkan perilaku yang membuka, membaca, dan menutup file lalu dengan cepat membuka kembali file yang sama. Dalam kasus ini, menggunakan kembali struktur SRV_OPEN dapat meningkatkan performa.

RDBSS memanggil MRxCloseSrvOpen untuk pemrosesan tutup yang tertunda saat memulung struktur FOBX. Ini terjadi ketika pemrosesan penutupan tertunda untuk mengantisipasi permintaan terbuka dan tidak ada permintaan terbuka yang akan datang.

MRxCloseSrvOpen tidak dapat mengembalikan nilai STATUS_RETRY yang menunjukkan bahwa panggilan harus dicoba kembali. Jika perulangan coba lagi diperlukan, perulangan harus ditangani secara internal dalam rutinitas MRxCloseSrvOpen oleh pengalih mini jaringan.

Rutinitas MRxCollapseOpen dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan menciutkan permintaan sistem file terbuka ke struktur SRV_OPEN yang ada.

MRxCollapseOpen dipanggil oleh RDBSS untuk menciutkan struktur SRV_OPEN secara lokal. Pengalih mini jaringan dikonsultasikan untuk menentukan apakah penciutkan dimungkinkan sehingga tidak ada alasan untuk memanggil pengalih mini jaringan dua kali. Jika pengalih mini jaringan memutuskan untuk menciutkan struktur SRV_OPEN, maka itu akan melakukannya dan meneruskan kembali status yang dapat dikembalikan. Nilai pengembalian STATUS_SUCCESS adalah nilai pengembalian yang mengakhiri. Nilai pengembalian yang berbeda, misalnya, STATUS_MORE_PROCESSING_REQUIRED, dianggap sebagai nilai pengembalian yang tidak mengakhiri.

Sebelum memanggil MRxCollapseOpen, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditunjukkan oleh parameter RxContext :

pRelevantSrvOpen diatur ke struktur SRV_OPEN untuk diciutkan.

Create.pSrvCall diatur ke struktur SRV_CALL yang terkait dengan SRV_OPEN.

Jika pengalih mini jaringan memutuskan untuk menciutkan struktur SRV_OPEN, maka anggota SrvOpen dari struktur RX_CONTEXT harus diatur ke struktur SRV_OPEN yang diciutkan.

RutinitasMRxCreate dipanggil oleh RDBSS untuk meminta agar mini-redirector jaringan membuat objek sistem file.

MRxCreate dipanggil oleh RDBSS untuk meminta agar redirector mini jaringan membuka objek sistem file di seluruh jaringan. Panggilan ini dikeluarkan oleh RDBSS sebagai respons terhadap penerimaan permintaan IRP_MJ_CREATE .

Sebelum memanggil MRxCreate, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditunjukkan oleh parameter RxContext :

pRelevantSrvOpen diatur ke struktur SRV_OPEN.

Create.pSrvCall diatur ke struktur SRV_CALL.

Create.NtCreateParameters diatur ke NT_CREATE_PARAMETERS yang diminta.

Dalam konteks pengalihan mini jaringan, objek file mengacu pada struktur blok kontrol file (FCB) dan ekstensi objek file (FOBX) terkait. Ada korespondensi satu ke satu antara objek file dan FOBX. Banyak objek file akan merujuk ke FCB yang sama, yang mewakili satu file di server jarak jauh. Klien dapat memiliki beberapa permintaan terbuka yang berbeda (permintaan NtCreateFile) pada FCB yang sama dan masing-masing dari ini akan membuat objek file baru. RDBSS dan pengalih mini jaringan dapat memilih untuk mengirim lebih sedikit permintaan MRxCreate daripada permintaan NtCreateFile yang diterima, yang berlaku untuk berbagi struktur SRV_OPEN di antara beberapa FOBX.

Jika permintaan MRxCreate adalah untuk penimpaan file dan MRxCreate dikembalikan STATUS_SUCCESS, maka RDBSS akan memperoleh sumber daya I/O halaman dan memotong file. Jika file sedang di-cache oleh manajer cache, RDBSS akan memperbarui ukuran yang dimiliki manajer cache dengan yang baru saja diterima dari server.

Sebelum kembali, MRxCreate harus mengatur anggota CurrentIrp-IoStatus.Information> dari struktur RX_CONTEXT yang ditunjukkan oleh parameter RxContext.

Rutinitas MRxDevFcbXXXControlFile dipanggil oleh RDBSS untuk meneruskan permintaan kontrol FCB perangkat (permintaan IOCTL atau FSCTL) ke pengalihan mini jaringan.

MRxDevFcbXXXControlFile menangani permintaan IOCTL dan FSCTL yang terkait dengan perangkat FCB yang dikirim ke pengalihan mini jaringan.

Sebelum memanggil MRxDevFcbXXXControlFile, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditunjukkan oleh parameter RxContext :

MajorFunction diatur ke fungsi utama IRP

Jika ini adalah permintaan IRP_MJ_FILE_SYSTEM_CONTROL, maka RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang diacu oleh parameter RxContext :

LowIoContext.ParamsFor.FsCtl.MinorFunction diatur ke kode fungsi minor untuk kode FSCTL

LowIoContext.ParamsFor.FsCtl.FsControlCode diatur ke kode FSCTL untuk IRP

Jika ini adalah permintaan IRP_MJ_DEVICE_CONTROL atau IRP_MJ_INTERNAL_DEVICE_CONTROL, maka RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditunjukkan oleh parameter RxContext :

LowIoContext.ParamsFor.FsCtl.FsControlCode diatur ke kode kontrol untuk IRP.

Jika MRxDevFcbXXXControlFile mengembalikan STATUS_SUCCESS, maka rutinitas berhasil. Nilai pengembalian lainnya menunjukkan bahwa terjadi kesalahan.

Rutinitas MRxFlush dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan menulis konten objek sistem file ke penyimpanan. RDBSS mengeluarkan panggilan ini sebagai respons terhadap penerimaan permintaan IRP_MJ_FLUSH_BUFFERS .

MRxFlush menangani permintaan jaringan untuk flush file.

Rutinitas MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan membuka kunci eksklusif pada objek file.

RDBSS memanggil MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] sebagai tanggapan untuk menerima permintaan IRP_MJ_LOCK_CONTROL dengan kode kecil IRP_MN_LOCK jika IrpSp-Flags> memiliki set bit SL_EXCLUSIVE_LOCK.

Sebelum memanggil MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK], RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota LowIoContext.Operation diatur ke LOWIO_OP_EXCLUSIVELOCK.

Anggota LowIoContext.ResourceThreadId diatur ke utas proses yang memulai operasi di RDBSS.

Anggota LowIoContext.ParamsFor.Locks.ByteOffset diatur ke nilai IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.

Anggota LowIoContext.ParamsFor.Locks.Key diatur ke nilai IrpSp-Parameters.LockControl.Key>.

Anggota LowIoContext.ParamsFor.Locks.Flags diatur ke nilai IrpSp-Flags>.

Anggota LowIoContext.ParamsFor.Locks.Length diatur ke nilai IrpSp-Parameters.LockControl.Length.QuadPart>.

Anggota LowIoContext.Operation dari struktur RX_CONTEXT menentukan operasi I/O rendah untuk dilakukan. Dimungkinkan bagi beberapa rutinitas I/O rendah untuk menunjuk ke rutinitas yang sama dalam pengalihan mini jaringan karena anggota LowIoContext.Operation ini dapat digunakan untuk membedakan operasi I/O rendah yang diminta. Misalnya, semua panggilan I/O yang terkait dengan kunci file dapat memanggil rutinitas I/O rendah yang sama di mini-redirector jaringan dan rutinitas tersebut dapat menggunakan anggota LowIoContext.Operation untuk membedakan antara operasi kunci dan buka kunci yang diminta.

Jika rutinitas MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] dapat memakan waktu lama untuk diselesaikan, driver pengalih mini jaringan harus merilis struktur FCB sebelum memulai komunikasi jaringan. Struktur FCB dapat dirilis dengan memanggil RxReleaseFcbResourceForThreadInMRx. Sementara rutinitas MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] sedang diproses, anggota LowIoContext.ResourceThreadId dari RX_CONTEXT dijamin menunjukkan utas proses yang memulai operasi di RDBSS.

Anggota LowIoContext.ResourceThreadId dari RX_CONTEXT dapat digunakan untuk merilis struktur FCB atas nama utas lain. Ketika rutinitas asinkron selesai, struktur FCB yang diperoleh dari utas awal dapat dirilis.

Rutinitas MRxLowIOSubmit[LOWIO_OP_FSCTL] dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan mengeluarkan permintaan kontrol sistem file pada file jarak jauh.

RDBSS memanggil MRxLowIOSubmit[LOWIO_OP_FSCTL] sebagai respons terhadap penerimaan permintaan IRP_MJ_FILE_SYSTEM_CONTROL .

Sebelum memanggil MRxLowIOSubmit[LOWIO_OP_FSCTL], RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota LowIoContext.Operation diatur ke LOWIO_OP_FSCTL.

Anggota LowIoContext.ResourceThreadId diatur ke utas proses yang memulai operasi di RDBSS.

Anggota LowIoContext.ParamsFor.FsCtl.FsControlCode diatur ke kode kontrol utama FSCTL.

Anggota LowIoContext.ParamsFor.FsCtl.MinorFunction diatur ke kode kontrol minor FSCTL.

Anggota LowIoContext.ParamsFor.FsCtl.pInputBuffer diatur ke buffer input.

Anggota LowIoContext.ParamsFor.FsCtl.InputBufferLength diatur ke panjang buffer input.

Anggota LowIoContext.ParamsFor.FsCtl.pOutputBuffer diatur ke buffer output.

Anggota LowIoContext.ParamsFor.FsCtl.OutputBufferLength diatur ke panjang buffer output.

Permintaan kode kontrol sistem file (FSCTL) yang ditangani oleh pengalih mini jaringan dapat diklasifikasikan ke dalam salah satu dari beberapa kategori:

  • FSCTL yang diimplementasikan dan digunakan oleh RDBSS dan pengalih mini jaringan

  • FSCTL yang diimplementasikan dan hanya digunakan oleh pengalih mini jaringan

  • FSCTL yang tidak boleh dilihat oleh pengalih mini jaringan. FSCTL ini hanya dimaksudkan sebagai bantuan penelusuran kesalahan.

Sementara rutinitas MRxLowIOSubmit[LOWIO_OP_FSCTL] sedang diproses, anggota LowIoContext.ResourceThreadId RX_CONTEXT dijamin menunjukkan utas proses yang memulai operasi di RDBSS. Anggota LowIoContext.ResourceThreadId dari RX_CONTEXT dapat digunakan untuk merilis sumber daya input atas nama utas lain. Ketika rutinitas asinkron selesai, sumber daya input yang diperoleh dari utas awal dapat dirilis.

Rutinitas MRxLowIOSubmit[LOWIO_OP_IOCTL] dipanggil oleh RDBSS untuk mengeluarkan permintaan kontrol sistem I/O ke pengalihan mini jaringan.

RDBSS memanggil MRxLowIOSubmit[LOWIO_OP_IOCTL] sebagai tanggapan untuk menerima permintaan IRP_MJ_DEVICE_CONTROL atau IRP_MJ_INTERNAL_DEVICE_CONTROL .

Sebelum memanggil MRxLowIOSubmit[LOWIO_OP_IOCTL], RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditunjukkan oleh parameter RxContext :

Anggota LowIoContext.Operation diatur ke LOWIO_OP_IOCTL.

Anggota LowIoContext.ResourceThreadId diatur ke utas proses yang memulai operasi di RDBSS.

Anggota LowIoContext.ParamsFor.IoCtl.IoControlCode diatur ke kode kontrol IOCTL.

Anggota LowIoContext.ParamsFor.IoCtl.pInputBuffer diatur ke buffer input.

Anggota LowIoContext.ParamsFor.IoCtl.InputBufferLength diatur ke panjang buffer input.

Anggota LowIoContext.ParamsFor.IoCtl.pOutputBuffer diatur ke buffer output.

Anggota LowIoContext.ParamsFor.IoCtl.OutputBufferLength diatur ke panjang buffer output.

Sementara rutinitas MRxLowIOSubmit[LOWIO_OP_IOCTL] sedang diproses, anggota LowIoContext.ResourceThreadId dari RX_CONTEXT dijamin menunjukkan utas proses yang memulai operasi di RDBSS. Anggota LowIoContext.ResourceThreadId dari RX_CONTEXT dapat digunakan untuk merilis sumber daya input atas nama utas lain. Ketika rutinitas asinkron selesai, sumber daya input yang diperoleh dari utas awal dapat dirilis.

Rutinitas MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] dipanggil oleh RDBSS untuk mengeluarkan permintaan ke pengalihan mini jaringan untuk operasi pemberitahuan perubahan direktori.

RDBSS memanggil MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] sebagai respons terhadap penerimaan permintaan IRP_MJ_DIRECTORY_CONTROL .

Sebelum memanggil MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY], RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota LowIoContext.Operation diatur ke LOWIO_OP_NOTIFY_CHANGE_DIRECTORY.

Anggota LowIoContext.ResourceThreadId diatur ke utas proses yang memulai operasi di RDBSS.

Anggota LowIoContext.ParamsFor.NotifyChangeDirectory.WatchTree diatur ke TRUE jika IrpSp-Flags> memiliki set bit SL_WATCH_TREE.

Anggota LowIoContext.ParamsFor.NotifyChangeDirectory.CompletionFilter diatur ke nilai IrpSp-Parameters.NotifyDirectory.CompletionFilter>.

Anggota LowIoContext.ParamsFor.NotifyChangeDirectory.NotificationBufferLength diatur ke nilai IrpSp-Parameters.NotifyDirectory.Length>.

Anggota LowIoContext.ParamsFor.NotifyChangeDirectory.pNotificationBuffer diatur ke nilai yang dikembalikan dengan memanggil MmGetSystemAddressForMdlSafe yang melewati Irp-MdlAddress> dan NormalPagePriority. Buffer pengguna juga diselimuti dan dikunci untuk akses tulis.

Operasi pemberitahuan perubahan direktori biasanya diimplementasikan oleh pengalih mini jaringan sebagai operasi asinkron karena dapat memakan waktu yang cukup lama. Operasi ini biasanya terdiri dari mengirim permintaan jaringan ke server jarak jauh yang meminta pemberitahuan perubahan. Respons diperoleh ketika perubahan yang diinginkan terpengaruh pada server. Ini adalah contoh operasi di mana pengalih mini jaringan mungkin perlu mendaftarkan nilai konteks unik untuk menangani pembatalan yang dimulai secara lokal.

Sementara rutinitas MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] sedang diproses, anggota lowIoContext.ResourceThreadId dari RX_CONTEXT dijamin menunjukkan utas proses yang memulai operasi di RDBSS. Anggota LowIoContext.ResourceThreadId dapat digunakan untuk merilis struktur FCB atas nama utas lain. Ketika rutinitas asinkron selesai, struktur FCB yang diperoleh dari utas awal dapat dirilis. Struktur FCB dapat dirilis dengan memanggil RxReleaseFcbResourceForThreadInMRx.

Rutinitas MRxLowIOSubmit[LOWIO_OP_READ] dipanggil oleh RDBSS untuk mengeluarkan permintaan baca ke pengalihan mini jaringan.

RDBSS memanggil MRxLowIOSubmit[LOWIO_OP_READ] sebagai tanggapan untuk menerima permintaan IRP_MJ_READ .

Sebelum memanggil MRxLowIOSubmit[LOWIO_OP_READ], RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditunjukkan oleh parameter RxContext :

Anggota LowIoContext.Operation diatur ke LOWIO_OP_READ.

Anggota LowIoContext.ResourceThreadId diatur ke utas proses yang memulai operasi di RDBSS.

Anggota LowIoContext.ParamsFor.ReadWrite.Key diatur ke nilai IrpSp-Parameters.Read.Key>.

Anggota ParamsFor.ReadWrite.Flags memiliki bit LOWIO_READWRITEFLAG_PAGING_IO diatur jika Irp-Flags> memiliki bit IRP_PAGING_IO aktif.

Anggota ParamsFor.ReadWrite.Buffer diatur ke buffer pengguna yang dikunci untuk IoReadAccess.

Anggota LowIoContext.ParamsFor.ReadWrite.ByteCount diatur ke nilai IrpSp-Parameters.Read.Length>.

Permintaan baca biasanya diterapkan oleh pengalih mini jaringan sebagai operasi asinkron karena dapat memakan waktu yang cukup lama. Operasi ini biasanya terdiri dari pengiriman permintaan jaringan ke server jarak jauh. Respons diperoleh ketika permintaan baca selesai di server. Ini adalah contoh operasi di mana pengalih mini jaringan mungkin perlu mendaftarkan konteks untuk menangani pembatalan yang dimulai secara lokal.

Sementara rutinitas MRxLowIOSubmit[LOWIO_OP_READ] sedang diproses, anggota lowIoContext.ResourceThreadId dari RX_CONTEXT dijamin untuk menunjukkan utas proses yang memulai operasi di RDBSS. Anggota LowIoContext.ResourceThreadId dapat digunakan untuk merilis struktur FCB atas nama utas lain. Ketika rutinitas asinkron selesai, struktur FCB yang diperoleh dari utas awal dapat dirilis. Struktur FCB dapat dirilis dengan memanggil RxReleaseFcbResourceForThreadInMRx.

Rutinitas MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] dipanggil oleh RDBSS untuk meminta agar pengalih jaringan membuka kunci bersama pada objek file.

RDBSS memanggil MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] sebagai tanggapan untuk menerima permintaan IRP_MJ_LOCK_CONTROL dengan kode kecil IRP_MN_LOCK jika IrpSp-Flags> tidak memiliki set bit SL_EXCLUSIVE_LOCK.

Sebelum memanggil MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK], RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota LowIoContext.Operation diatur ke LOWIO_OP_SHAREDLOCK.

Anggota LowIoContext.ResourceThreadId diatur ke utas proses yang memulai operasi di RDBSS.

Anggota LowIoContext.ParamsFor.Locks.ByteOffset diatur ke nilai IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.

Anggota LowIoContext.ParamsFor.Locks.Key diatur ke nilai IrpSp-Parameters.LockControl.Key>.

Anggota LowIoContext.ParamsFor.Locks.Flags diatur ke nilai IrpSp-Flags>.

Anggota LowIoContext.ParamsFor.Locks.Length diatur ke nilai IrpSp-Parameters.LockControl.Length.QuadPart>.

Anggota LowIoContext.Operation dari struktur RX_CONTEXT menentukan operasi I/O rendah untuk dilakukan. Dimungkinkan bagi beberapa rutinitas I/O rendah untuk menunjuk ke rutinitas yang sama dalam mini-redirector jaringan karena anggota LowIoContext.Operation dapat digunakan untuk membedakan operasi I/O rendah yang diminta. Misalnya, semua panggilan I/O yang terkait dengan kunci file dapat memanggil rutinitas I/O rendah yang sama di pengalih mini jaringan dan rutinitas ini dapat menggunakan anggota LowIoContext.Operation untuk membedakan antara operasi kunci dan buka kunci yang diminta.

Jika rutinitas MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] dapat memakan waktu lama untuk diselesaikan, driver pengalih mini jaringan harus merilis struktur FCB sebelum memulai komunikasi jaringan. Struktur FCB dapat dirilis dengan memanggil RxReleaseFcbResourceForThreadInMRx. Sementara rutinitas MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] sedang diproses, anggota lowIoContext.ResourceThreadId dari RX_CONTEXT dijamin menunjukkan utas proses yang memulai operasi di RDBSS.

Anggota LowIoContext.ResourceThreadId dari struktur RX_CONTEXT dapat digunakan untuk merilis struktur FCB atas nama utas lain. Ketika rutinitas asinkron selesai, struktur FCB yang diperoleh dari utas awal dapat dirilis.

Rutinitas MRxLowIOSubmit[LOWIO_OP_UNLOCK] dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan menghapus kunci tunggal pada objek file.

RDBSS memanggil MRxLowIOSubmit[LOWIO_OP_UNLOCK] sebagai tanggapan untuk menerima permintaan IRP_MJ_LOCK_CONTROL dengan kode kecil IRP_MN_UNLOCK_SINGLE.

Sebelum memanggil MRxLowIOSubmit[LOWIO_OP_UNLOCK], RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota LowIoContext.Operation diatur ke LOWIO_OP_UNLOCK.

Anggota LowIoContext.ResourceThreadId diatur ke utas proses yang memulai operasi di RDBSS.

Anggota LowIoContext.ParamsFor.Locks.ByteOffset diatur ke nilai IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.

Anggota LowIoContext.ParamsFor.Locks.Key diatur ke nilai IrpSp-Parameters.LockControl.Key>.

Anggota LowIoContext.ParamsFor.Locks.Length diatur ke nilai IrpSp-Parameters.LockControl.Length.QuadPart>.

Anggota LowIoContext.Operation dari struktur RX_CONTEXT menentukan operasi I/O rendah untuk dilakukan. Dimungkinkan bagi beberapa rutinitas I/O rendah untuk menunjuk ke rutinitas yang sama dalam mini-redirector jaringan karena anggota LowIoContext.Operation ini dapat digunakan untuk membedakan operasi I/O rendah yang diminta. Misalnya, semua panggilan I/O yang terkait dengan kunci file dapat memanggil rutinitas I/O rendah yang sama di pengalih mini jaringan dan rutinitas ini dapat menggunakan anggota LowIoContext.Operation untuk membedakan antara operasi kunci dan buka kunci yang diminta.

Jika rutinitas MRxLowIOSubmit[LOWIO_OP_UNLOCK] dapat memakan waktu lama untuk diselesaikan, driver pengalih mini jaringan harus merilis struktur FCB sebelum memulai komunikasi jaringan. Struktur FCB dapat dirilis dengan memanggil RxReleaseFcbResourceForThreadInMRx. Sementara rutinitas MRxLowIOSubmit[LOWIO_OP_UNLOCK] sedang diproses, anggota lowIoContext.ResourceThreadId dari RX_CONTEXT dijamin menunjukkan utas proses yang memulai operasi di RDBSS.

Anggota LowIoContext.ResourceThreadId dari RX_CONTEXT dapat digunakan untuk merilis struktur FCB atas nama utas lain. Ketika rutinitas asinkron selesai, struktur FCB yang diperoleh dari utas awal dapat dirilis.

Rutinitas MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan menghapus beberapa kunci yang disimpan pada objek file.

RDBSS memanggil MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] sebagai tanggapan untuk menerima permintaan IRP_MJ_LOCK_CONTROL dengan kode kecil IRP_MN_UNLOCK_ALL atau IRP_MN_UNLOCK_ALL_BY_KEY.

Sebelum memanggil MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE], RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota LowIoContext.Operation diatur ke LOWIO_OP_UNLOCK_MULTIPLE.

Anggota LowIoContext.ResourceThreadId diatur ke utas proses yang memulai operasi di RDBSS.

Anggota LowIoContext.ParamsFor.Locks.LockList diatur ke daftar elemen LOWIO_LOCK_LIST. Setiap elemen menentukan rentang yang akan dibuka kuncinya.

Rentang byte yang akan dibuka kunci ditentukan dalam anggota LowIoContext.ParamsFor.Locks.LockList dari struktur RX_CONTEXT. Struktur LOWIO_LOCK_LIST adalah sebagai berikut:

typedef struct _LOWIO_LOCK_LIST {
  struct  _LOWIO_LOCK_LIST  *Next;
  ULONG  LockNumber;
  RXVBO  ByteOffset;
  LONGLONG  Length;
  ULONG  Key;
  BOOLEAN  ExclusiveLock;
} LOWIO_LOCK_LIST, *PLOWIO_LOCK_LIST;

Anggota LowIoContext.Operation RX_CONTEXT menentukan operasi I/O rendah untuk dilakukan. Dimungkinkan bagi beberapa rutinitas I/O rendah untuk menunjuk ke rutinitas yang sama dalam mini-redirector jaringan karena anggota LowIoContext.Operation dapat digunakan untuk membedakan operasi I/O rendah yang diminta. Misalnya, semua panggilan I/O yang terkait dengan kunci file dapat memanggil rutinitas I/O rendah yang sama di pengalih mini jaringan dan rutinitas ini dapat menggunakan anggota LowIoContext.Operation untuk membedakan antara operasi kunci dan buka kunci yang diminta.

Jika rutinitas MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] dapat memakan waktu lama untuk diselesaikan, driver pengalih mini jaringan harus merilis struktur FCB sebelum memulai komunikasi jaringan. Struktur FCB dapat dirilis dengan memanggil RxReleaseFcbResourceForThreadInMRx. Sementara rutinitas MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] sedang diproses, anggota lowIoContext.ResourceThreadId dari RX_CONTEXT dijamin menunjukkan utas proses yang memulai operasi di RDBSS.

Anggota LowIoContext.ResourceThreadId dari RX_CONTEXT dapat digunakan untuk merilis struktur FCB atas nama utas lain. Ketika rutinitas asinkron selesai, struktur FCB yang diperoleh dari utas awal dapat dirilis.

Rutinitas MRxLowIOSubmit[LOWIO_OP_WRITE] dipanggil oleh RDBSS untuk mengeluarkan permintaan tulis ke pengalih mini jaringan.

RDBSS memanggil MRxLowIOSubmit[LOWIO_OP_WRITE] sebagai tanggapan untuk menerima permintaan IRP_MJ_WRITE .

Sebelum memanggil MRxLowIOSubmit[LOWIO_OP_WRITE], RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota LowIoContext.Operation diatur ke LOWIO_OP_WRITE.

Anggota LowIoContext.ResourceThreadId diatur ke utas proses yang memulai operasi di RDBSS.

Anggota LowIoContext.ParamsFor.ReadWrite.Key diatur ke nilai IrpSp-Parameters.Read.Key>.

Anggota ParamsFor.ReadWrite.Flags memiliki bit LOWIO_READWRITEFLAG_PAGING_IO diatur jika Irp-Flags> memiliki bit IRP_PAGING_IO aktif.

Anggota ParamsFor.ReadWrite.Buffer diatur ke buffer pengguna yang dikunci untuk IoWriteAccess.

Anggota LowIoContext.ParamsFor.ReadWrite.ByteCount diatur ke nilai IrpSp-Parameters.Write.Length>.

Permintaan tulis biasanya diimplementasikan oleh pengalih mini jaringan sebagai operasi asinkron karena dapat memakan waktu cukup lama. Operasi ini biasanya terdiri dari pengiriman permintaan jaringan ke server jarak jauh. Respons diperoleh ketika permintaan tulis selesai di server. Ini adalah contoh operasi di mana pengalih mini jaringan mungkin perlu mendaftarkan konteks untuk menangani pembatalan yang dimulai secara lokal.

Sementara rutinitas MRxLowIOSubmit[LOWIO_OP_WRITE] sedang diproses, anggota lowIoContext.ResourceThreadId dari RX_CONTEXT dijamin untuk menunjukkan utas proses yang memulai operasi di RDBSS. Anggota LowIoContext.ResourceThreadId dapat digunakan untuk merilis struktur FCB atas nama utas lain. Ketika rutinitas asinkron selesai, struktur FCB yang diperoleh dari utas awal dapat dirilis. Struktur FCB dapat dirilis dengan memanggil RxReleaseFcbResourceForThreadInMRx.

Rutinitas MRxQueryDirectory dipanggil oleh RDBSS untuk meminta informasi kueri pengalih mini jaringan pada direktori file.

Sebelum memanggil MRxQueryDirectory, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditunjukkan oleh parameter RxContext :

Anggota Info.FileInformationClass diatur ke IrpSp-Parameters.QueryDirectory.FileInformationClass>.

Anggota Info.Buffer diatur ke buffer pengguna dari paket permintaan I/O. Buffer ini telah dikunci oleh RDBSS jika diperlukan.

Anggota Info.LengthRemaining diatur ke IrpSp-Parameters.QueryDirectory.Length>.

Anggota QueryDirectory.FileIndex diatur ke IrpSp-Parameters.QueryDirectory.FileIndex>.

Anggota QueryDirectory.RestartScan diatur ke bukan nol jika IrpSp-Flags> memiliki bit SL_RESTART_SCAN aktif.

Anggota QueryDirectory.ReturnSingleEntry diatur ke bukan nol jika IrpSp-Flags> memiliki bit SL_RETURN_SINGLE_ENTRY aktif.

Anggota QueryDirectory.IndexSpecified diatur ke bukan nol jika IrpSp-Flags> memiliki bit SL_INDEX_SPECIFIED aktif.

Anggota QueryDirectory.InitialQuery diatur ke bukan nol jika unicodeQueryTemplate.Buffer anggota FOBX terkait adalah NULL dan anggota Bendera FOBX tidak memiliki FOBX_FLAG_MATCH_ALL bit aktif.

Untuk kueri wild card (".", misalnya), RDBSS akan mengatur anggota UnicodeQueryTemplate.Buffer dari FOBX terkait ke kueri wild card yang diteruskan.

Jika anggota PostRequest dari struktur RX_CONTEXT TRUE saat dikembalikan dari MRxQueryDirectory, maka RDBSS akan memanggil RxFsdPostRequest meneruskan struktur RX_CONTEXT ke antrean pekerja untuk diproses oleh proses sistem file (FSP).

Rutinitas MRxQueryEaInfo dipanggil oleh RDBSS untuk meminta kueri pengalih mini jaringan memperluas informasi atribut pada objek sistem file.

RDBSS mengeluarkan panggilan ke MRxQueryEaInfo sebagai respons untuk menerima permintaan IRP_MJ_QUERY_EA .

Sebelum memanggil MRxQueryEaInfo, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota Info.Buffer diatur ke buffer pengguna dari paket permintaan I/O. Buffer ini telah dikunci oleh RDBSS jika diperlukan.

Anggota Info.LengthRemaining diatur ke IrpSp-Parameters.QueryEa.Length>.

Anggota QueryEa.UserEaList diatur ke IrpSp-Parameters.QueryEa.EaList>.

Anggota QueryEa.UserEaListLength diatur ke IrpSp-Parameters.QueryEa.EaListLength>.

Anggota QueryEa.UserEaIndex diatur ke IrpSp-Parameters.QueryEa.EaIndex>.

Anggota QueryEa.RestartScan diatur ke bukan nol jika IrpSp-Flags> memiliki bit SL_RESTART_SCAN aktif.

Anggota QueryEa.ReturnSingleEntry diatur ke bukan nol jika IrpSp-Flags> memiliki bit SL_RETURN_SINGLE_ENTRY aktif.

Anggota QueryEa.IndexSpecified diatur ke bukan nol jika IrpSp-Flags> memiliki bit SL_INDEX_SPECIFIED aktif.

Setelah berhasil, MRxQueryEaInfo harus mengatur anggota Info.LengthRemaining dari struktur RX_CONTEXT ke panjang informasi atribut yang diperluas yang dikembalikan dan juga memperbarui anggota Fobx-OffsetOfNextEaToReturn>. Jika panggilan ke MRxQueryEaInfo berhasil, RDBSS mengatur anggota IoStatus.Information dari IRP ke IrpSp-Parameters.QueryEa.Length> dikurangi anggota Info.LengthRemaining dari RX_CONTEXT.

Rutinitas MRxQueryFileInfo dipanggil oleh RDBSS untuk meminta informasi file kueri pengalih mini jaringan pada objek sistem file.

RDBSS mengeluarkan panggilan ke MRxQueryFileInfo sebagai respons untuk menerima permintaan IRP_MJ_QUERY_INFORMATION .

Sebelum memanggil MRxQueryFileInfo, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota Info.FileInformationClass diatur ke IrpSp-Parameters.QueryFile.FileInformationClass>, nilai FILE_INFORMATION_CLASS yang diminta.

Anggota Info.Buffer diatur ke buffer pengguna dari paket permintaan I/O.

Anggota Info.LengthRemaining diatur ke IrpSp-Parameters.QueryFile.Length>.

Anggota QueryDirectory.FileIndex diatur ke IrpSp-Parameters.QueryDirectory.FileIndex>.

Anggota QueryDirectory.RestartScan diatur jika IrpSp-Flags> memiliki set bit SL_RESTART_SCAN.

Anggota QueryDirectory.ReturnSingleEntry diatur jika IrpSp-Flags> memiliki set bit SL_RETURN_SINGLE_ENTRY.

Anggota QueryDirectory.InitialQuery diatur jika Fobx-UnicodeQueryTemplate.Buffer> adalah NULL dan Fobx-Flags> tidak memiliki set bit FOBX_FLAG_MATCH_ALL.

Jika berhasil, pengalih mini jaringan harus mengatur anggota Info.LengthRemaining dari struktur RX_CONTEXT ke anggota Info.Length dikurangi panjang informasi file yang dikembalikan. Jika panggilan ke MRxQueryFileInfo berhasil, RDBSS mengatur anggota IoStatus.Information dari IRP ke IrpSp-Parameters.QueryFile.Length> dikurangi anggota Info.LengthRemaining dari RX_CONTEXT.

RDBSS tidak mendukung permintaan dengan bit SL_INDEX_SPECIFIED dari set IrpSp-Flags>. Pengalih mini jaringan tidak akan menerima panggilan ke MRxQueryFileInfo dengan bit SL_INDEX_SPECIFIED set IrpSp-Flags>.

Rutinitas MRxQueryQuotaInfo dipanggil oleh RDBSS untuk meminta informasi kuota kueri pengalih mini jaringan pada objek sistem file.

RDBSS mengeluarkan panggilan ke MRxQueryQuotaInfo sebagai respons untuk menerima permintaan IRP_MJ_QUERY_QUOTA .

Sebelum memanggil MRxQueryQuotaInfo, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota Info.Buffer diatur ke buffer pengguna dari paket permintaan I/O. Buffer ini telah dikunci oleh RDBSS jika diperlukan.

Anggota Info.LengthRemaining diatur ke IrpSp-Parameters.QueryQuota.Length>.

Anggota QueryQuota.SidList diatur ke IrpSp-Parameters.QueryQuota.SidList>.

Anggota QueryQuota.SidListLength diatur ke IrpSp-Parameters.QueryQuota.SidListLength>.

Anggota QueryQuota.StartSid diatur ke IrpSp-Parameters.QueryQuota.StartSid>.

Anggota QueryQuota.Length diatur ke IrpSp-Parameters.QueryQuota.Length>.

Anggota QueryQuota.RestartScan diatur ke bukan nol jika IrpSp-Flags> memiliki set bit SL_RESTART_SCAN.

Anggota QueryQuota.ReturnSingleEntry diatur ke bukan nol jika IrpSp-Flags> memiliki set bit SL_RETURN_SINGLE_ENTRY.

Anggota QueryQuota.IndexSpecified diatur ke bukan nol jika IrpSp-Flags> memiliki set bit SL_INDEX_SPECIFIED.

Jika berhasil, pengalih mini jaringan harus mengatur anggota Info.LengthRemaining dari struktur RX_CONTEXT ke panjang informasi kuota yang akan dikembalikan. Jika panggilan ke MRxQueryQuotaInfo berhasil, RDBSS menetapkan anggota IoStatus.Information dari IRP ke anggota Info.LengthRemaining RX_CONTEXT.

Jika panggilan ke MRxQueryQuotaInfo berhasil, anggota InformationToReturn dari struktur RX_CONTEXT harus diatur ke panjang informasi kuota yang dikembalikan. Jika panggilan tidak berhasil, anggota InformationToReturn dari RX_CONTEXT harus diatur ke nol.

Rutinitas MRxQuerySdInfo dipanggil oleh RDBSS untuk meminta informasi pendeskripsi keamanan kueri pengalih mini jaringan pada objek sistem file.

RDBSS mengeluarkan panggilan ke MRxQuerySdInfo sebagai respons untuk menerima permintaan IRP_MJ_QUERY_SECURITY .

Sebelum memanggil MRxQuerySdInfo, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota QuerySecurity.SecurityInformation diatur ke IrpSp-Parameters.QuerySecurity.SecurityInformation>.

Anggota Info.Buffer diatur ke buffer pengguna dari paket permintaan I/O. Buffer ini telah dikunci oleh RDBSS jika diperlukan.

Anggota Info.LengthRemaining diatur ke IrpSp-Parameters.QuerySecurity.Length>.

Jika berhasil, pengalih mini jaringan harus mengatur anggota InformationToReturn dari struktur RX_CONTEXT ke panjang informasi keamanan yang dikembalikan. Jika panggilan ke MRxQuerySdInfo berhasil, RDBSS menetapkan anggota IoStatus.Information dari IRP ke anggota InformationToReturn dari RX_CONTEXT.

Rutinitas MRxQueryVolumeInfo dipanggil oleh RDBSS untuk meminta informasi volume kueri pengalih mini jaringan.

RDBSS mengeluarkan panggilan ke MRxQueryVolumeInfo dalam salah satu kasus berikut:

Sebelum memanggil MRxQueryVolumeInfo dalam kasus permintaan IRP_MJ_QUERY_VOLUME_INFORMATION, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota Info.FsInformationClass diatur ke IrpSp-Parameters.QueryVolume.FsInformationClass>.

Anggota Info.Buffer diatur ke Irp-AssociatedIrp.SystemBuffer>.

Anggota Info.LengthRemaining diatur ke IrpSp-Parameters.QueryVolume.Length>.

Untuk permintaan IRP_MJ_QUERY_VOLUME_INFORMATION, jika anggota PostRequest dari struktur RX_CONTEXT BENAR saat dikembalikan dari MRxQueryVolumeInfo, RDBSS akan memanggil RxFsdPostRequest untuk memposting permintaan. Untuk kasus ini, permintaan IRP_MJ_QUERY_VOLUME_INFORMATION akan meneruskan struktur RX_CONTEXT ke antrean RX_CONTEXT ke antrean pekerja untuk diproses oleh proses sistem file (FSP).

Jika anggota PostRequest dari struktur RX_CONTEXT FALSE saat dikembalikan dari MRxQueryVolumeInfo, pengalih mini jaringan harus mengatur anggota Info.LengthRemaining dari struktur RX_CONTEXT ke panjang informasi volume yang dikembalikan. RDBSS menetapkan anggota IoStatus.Information dari IRP ke IrpSp-Parameters.QueryVolume.Length> dikurangi anggota Info.LengthRemaining dari struktur RX_CONTEXT.

Jika panggilan ke MRxQueryVolumeInfo berhasil, pengalih mini jaringan harus mengatur anggota Info.LengthRemaining dari struktur RX_CONTEXT ke anggota Info.Length dikurangi panjang informasi volume yang dikembalikan. Jika panggilan ke MRxQueryVolumeInfo berhasil, RDBSS menetapkan anggota IoStatus.Information dari IRP ke IrpSp-Parameters.QueryVolume.Length> dikurangi anggota Info.LengthRemaining dari struktur RX_CONTEXT.

Untuk permintaan IRP_MJ_QUERY_VOLUME_INFORMATION dengan anggota Info.FsInformationClass yang diatur ke FileFsDeviceInformation, redirector mini jaringan mengembalikan informasi berikut dalam struktur RX_CONTEXT yang ditunjukkan oleh parameter RxContext :

Anggota Info.Buffer berisi struktur FILE_FS_DEVICE_INFORMATION

Anggota Info.Buffer.Characteristics diatur ke karakteristik volume, yang harus menyertakan FILE_REMOTE_DEVICE sebagai salah satu opsi.

Anggota Info.Buffer.DeviceType diatur ke anggota DeviceType dari struktur NET_ROOT terkait. Jika anggota Jenis NET_ROOT terkait NET_ROOT_PIPE, anggota Info.Buffer.DeviceType diatur ke FILE_DEVICE_NAMED_PIPE.

Untuk permintaan IRP_MJ_QUERY_VOLUME_INFORMATION dengan anggota Info.FsInformationClass yang diatur ke FileFsVolumeInformation, redirector mini jaringan mengembalikan informasi berikut dalam struktur RX_CONTEXT yang diarahkan oleh parameter RxContext :

Anggota Info.Buffer berisi struktur FILE_FS_VOLUME_INFORMATION.

Anggota Info.Buffer diatur ke anggota VolumeInfo dari struktur NET_ROOT terkait.

Anggota Info.LengthRemaining diatur ke anggota VolumeInfoLength dari struktur NET_ROOT terkait.

Panggilan MRxQueryVolumeInfo dari RDBSS untuk IRP_MJ_FILE_SYSTEM_CONTROL adalah permintaan untuk informasi pelacakan tautan. Sebelum memanggil MRxQueryVolumeInfo untuk IRP_MJ_FILE_SYSTEM_CONTROL, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota Info.FsInformationClass diatur ke FileFsObjectIdInformation.

Anggota Info.Buffer diatur ke struktur FILE_FS_OBJECTID_INFORMATION.

Anggota Info.LengthRemaining diatur ke sizeof(FILE_FS_OBJECTID_INFORMATION).

Untuk kasus permintaan IRP_MJ_FILE_SYSTEM_CONTROL ini, anggota AssociatedIrp.SystemBuffer dari IRP menunjuk ke struktur LINK_TRACKING_INFORMATION.

Jika permintaan dimulai sebagai IRP_MJ_FILE_SYSTEM_CONTROL ke MRxQueryVolumeInfo dengan nilai pengembalian STATUS_SUCCESS atau STATUS_BUFFER_OVERFLOW, RDBSS menyalin anggota ObjectId dari struktur FILE_FS_OBJECTID_INFORMATION yang diteruskan di anggota Info.Buffer struktur RX_CONTEXT ke anggota NetRoot-DiskParameters.VolumeId> dari struktur FCB dan ke anggota AssociatedIrp.SystemBuffer.VolumeId dari IRP. Jika panggilan ke MRxQueryVolumeInfo berhasil, RDBSS menetapkan anggota Jenis struktur LINK_TRACKING_INFORMATION. Jika anggota NetRoot-Flags> dari struktur FCB memiliki set bit NETROOT_FLAG_DFS_AWARE_NETROOT, anggota Jenis diatur oleh RDBSS ke DfsLinkTrackingInformation. Jika anggota NetRoot-Flags> dari struktur FCB tidak memiliki set bit NETROOT_FLAG_DFS_AWARE_NETROOT, anggota Jenis diatur oleh RDBSS ke NtfsLinkTrackingInformation. Setelah berhasil, RDBSS menetapkan anggota IoStatus.Information dari IRP ke ukuran struktur LINK_TRACKING_INFORMATION.

Rutinitas MRxSetEaInfo dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan mengatur informasi atribut yang diperluas pada objek sistem file.

RDBSS mengeluarkan panggilan ke MRxSetEaInfo sebagai respons untuk menerima permintaan IRP_MJ_SET_EA .

Sebelum memanggil MRxSetEaInfo, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota Info.Buffer diatur ke buffer pengguna dari paket permintaan I/O. Buffer ini telah dikunci oleh RDBSS jika diperlukan.

Anggota Info.LengthRemaining diatur ke IrpSp-Parameters.QueryEa.Length>.

Rutinitas MRxSetFileInfo dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan mengatur informasi file pada objek sistem file.

RDBSS mengeluarkan panggilan ke MRxSetFileInfo sebagai respons untuk menerima permintaan IRP_MJ_SET_INFORMATION .

Sebelum memanggil MRxSetFileInfo, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota Info.FileInformationClass diatur ke IrpSp-Parameters.SetFile.FileInformationClass>, nilai FILE_INFORMATION_CLASS yang ditentukan.

Anggota Info.Buffer diatur ke Irp-AssociatedIrp.SystemBuffer>.

Anggota Info.Length diatur ke IrpSp-Parameters.SetFile.Length>.

Rutinitas MRxSetFileInfoAtCleanup dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan mengatur informasi file pada objek sistem file saat pembersihan.

RDBSS mengeluarkan panggilan ke MRxSetFileInfoAtCleanup selama pembersihan , ketika handel terakhir ke objek file ditutup. Ini berbeda dari operasi penutupan yang dipanggil ketika referensi terakhir ke objek file dihapus.

MRxSetFileInfoAtCleanup dipanggil oleh RDBSS jika tanda waktu pada file atau ukuran file telah berubah. Panggilan ke MRxSetFileInfoAtCleanup oleh RDBSS dilakukan secara terpisah untuk setiap perubahan ini. Jika ukuran file dan tanda waktu telah berubah, maka RDBSS melakukan dua panggilan ke MRxSetFileInfoAtCleanup.

Sebelum memanggil MRxSetFileInfoAtCleanup, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditunjukkan oleh parameter RxContext jika tanda waktu pada file telah berubah:

Anggota Info.FileInformationClass diatur ke nilai FILE_INFORMATION_CLASS FileBasicInformation.

Anggota Info.Buffer diatur ke struktur FILE_BASIC_INFORMATION yang dialokasikan pada tumpukan.

Anggota Info.Length diatur ke ukurandari struktur FILE_BASIC_INFORMATION.

Sebelum memanggil MRxSetFileInfoAtCleanup, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditunjukkan oleh parameter RxContext jika ukuran file telah berubah:

Anggota Info.FileInformationClass diatur ke nilai FILE_INFORMATION_CLASS FileEndOfFileInformation.

Anggota Info.Buffer diatur ke struktur FILE_END_OF_FILE_INFORMATION yang dialokasikan pada tumpukan.

Anggota Info.Length diatur ke sizeof(FILE_END_OF_FILE_INFORMATION).

RDBSS mengabaikan nilai pengembalian dari MRxSetFileInfoAtCleanup.

Pengalih mini jaringan dapat memilih untuk tidak melakukan apa pun dalam rutinitas ini dan mengembalikan STATUS_SUCCESS. Setiap perubahan pada ukuran file atau tanda waktu akan ditangani selama operasi pembersihan.

Rutinitas MRxSetQuotaInfo dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan menetapkan informasi kuota pada objek sistem file.

RDBSS mengeluarkan panggilan ke MRxSetQuotaInfo sebagai respons untuk menerima permintaan IRP_MJ_SET_QUOTA .

Sebelum memanggil MRxSetQuotaInfo, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota Info.Buffer diatur ke buffer pengguna dari paket permintaan I/O. Buffer ini telah dikunci oleh RDBSS jika diperlukan.

Anggota Info.LengthRemaining diatur ke IrpSp-Parameters.SetQuota.Length>.

Rutinitas MRxSetSdInfo dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan mengatur informasi pendeskripsi keamanan pada objek sistem file.

RDBSS mengeluarkan panggilan ke MRxSetSdInfo sebagai respons untuk menerima permintaan IRP_MJ_SET_SECURITY .

Sebelum memanggil MRxSetSdInfo, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditunjukkan oleh parameter RxContext :

Anggota SetSecurity.SecurityInformation diatur ke IrpSp-Parameters.SetSecurity.SecurityInformation>.

Anggota SetSecurity.SecurityDescriptor diatur ke IrpSp-Parameters.SetSecurity.SecurityDescriptor>.

Rutinitas MRxSetVolumeInfo dipanggil oleh RDBSS untuk meminta agar redirector mini jaringan mengatur informasi volume.

RDBSS mengeluarkan panggilan ke MRxSetVolumeInfo sebagai respons untuk menerima permintaan IRP_MJ_SET_VOLUME_INFORMATION .

Sebelum memanggil MRxSetVolumeInfo, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditujukkan oleh parameter RxContext :

Anggota Info.FsInformationClass diatur ke IrpSp-Parameters.SetVolume.FsInformationClass>.

Anggota Info.Buffer diatur ke Irp-AssociatedIrp.SystemBuffer>.

Anggota Info.LengthRemaining diatur ke IrpSp-Parameters.SetVolume.Length>.

Rutinitas MRxShouldTryToCollapseThisOpen dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan menunjukkan apakah RDBSS harus mencoba dan menciutkan permintaan terbuka ke objek sistem file yang ada.

MRxShouldTryToCollapseThisOpen dipanggil untuk menentukan apakah permintaan terbuka tidak boleh diciutkan.

Sebelum memanggil MRxShouldTryToCollapseThisOpen, RDBSS memodifikasi anggota berikut dalam struktur RX_CONTEXT yang ditunjukkan oleh parameter RxContext :

Anggota pRelevantSrvOpen diatur ke SRV_OPEN.

Panggilan ke MRxShouldTryToCollapseThisOpen bisa menjadi perubahan yang memberi tahu permintaan untuk direktori. Oleh karena itu, pengalih mini jaringan mungkin tidak mengizinkan penciutkan permintaan terbuka sehingga pemberitahuan perubahan berfungsi dengan benar.

RDBSS melarang penciutan terbuka jika anggota Create.NtCreateParameters.CreateOptions dari struktur RX_CONTEXT memiliki opsi FILE_OPEN_FOR_BACKUP_INTENT atau opsi FILE_DELETE_ON_CLOSE diatur.

Rutinitas MRxTruncate dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan memotong konten objek sistem file.

MRxTruncate disebut sebagai bagian dari operasi pembersihan jika kedua kondisi berikut ini benar:

  • Objek file sesuai dengan file atau direktori disk

  • Ini adalah panggilan pembersihan terakhir dan objek file ditandai untuk pemotokan.

Objek file ditandai untuk pemotokan jika anggota fcbstate dari struktur FCB memiliki set bit FCB_STATE_TRUNCATE_ON_CLOSE. RDBSS akan membatalkan inisialisasi peta cache di lain waktu.

Panggilan ke MRxTruncate akan diikuti dengan panggilan ke MRxCleanupFobx sebagai bagian dari operasi pembersihan.

RDBSS mengabaikan nilai pengembalian dari MRxTruncate.

Rutinitas MRxZeroExtend dipanggil oleh RDBSS untuk meminta agar pengalih mini jaringan memotong konten objek sistem file.

MRxZeroExtend disebut sebagai bagian dari operasi pembersihan jika objek file tidak ditandai untuk dihapus dan objek file bukan file halaman. MRxZeroExtend dipanggil untuk memastikan bahwa bagian antara panjang data yang valid dan ukuran file tidak diperpanjang. Setelah memanggil MRxZeroExtend, RDBSS mengatur anggota Header.ValidDataLength.QuadPart dari struktur FCB yang sama dengan anggota Header.FileSize.QuadPart dari struktur FCB.

Panggilan ke MRxZeroExtend akan diikuti dengan panggilan ke MRxCleanupFobx sebagai bagian dari operasi pembersihan.

RDBSS mengabaikan nilai pengembalian dari MRxZeroExtend.

Rutinitas MRxCleanupFobx dipanggil oleh RDBSS untuk meminta pengalih mini jaringan untuk menutup ekstensi objek sistem file. RDBSS mengeluarkan panggilan ini sebagai respons untuk menerima permintaan IRP_MJ_CLEANUP pada objek file.

MRxCleanupFobx dipanggil oleh RDBSS sebagai bagian dari operasi pembersihan dan penutupan pada objek file.

MRxCleanupFobx tidak dapat mengembalikan nilai STATUS_RETRY yang menunjukkan bahwa panggilan harus dicoba ulang. Jika perulangan coba lagi diperlukan, perulangan harus ditangani secara internal dalam rutinitas MRxCleanupFobx oleh pengalih mini jaringan.

Persyaratan

Persyaratan Nilai
Target Platform Desktop
Header mrx.h (termasuk Mrx.h)

Lihat juga

MRxAreFilesAliased

MRxCleanupFobx

MRxCollapseOpen

MRxBuat

MRxDeallocateForFobx

MRxDeallocateForFobx

MRxExtendForCache

MRxExtendForNonCache

MRxFlush

MRxForceClosed

MRxIsLockRealizable

MRxShouldTryToCollapseThisOpen

MRxTruncate

MRxZeroExtend

RxFinalizeNetFCB