Bagikan melalui


Fungsi RxDriverEntry (rxprocs.h)

RxDriverEntry dipanggil oleh driver mini-redirector jaringan monolitik dari rutinitas DriverEntry-nya untuk menginisialisasi pustaka statis RDBSS.

Untuk driver non-monolitik, rutinitas inisialisasi ini setara dengan rutinitas DriverEntry dari driver perangkat RDBSS.SYS.

Sintaks

NTSTATUS RxDriverEntry(
  [in] IN PDRIVER_OBJECT  DriverObject,
  [in] IN PUNICODE_STRING RegistryPath
);

Parameter

[in] DriverObject

Penunjuk ke objek driver driver pengalihan mini jaringan. Setiap driver menerima penunjuk ke objek drivernya dalam parameter untuk rutinitas DriverEntry-nya . Obyek pengandar ini akan digunakan untuk membuat objek perangkat untuk pengandar pengalih-mini jaringan.

[in] RegistryPath

Penunjuk ke string Unicode yang berisi jalur registri ke tempat parameter driver dan data konfigurasi lainnya disimpan. Jalur registri ini biasanya terletak di bawah entri layanan untuk pengalihan mini jaringan tertentu yang terletak di bawah kunci HKLM\System\CurrentControlSet\Services .

Nilai kembali

RxDriverEntry mengembalikan STATUS_SUCCESS pada keberhasilan atau salah satu nilai kesalahan berikut pada kegagalan:

Menampilkan kode Deskripsi
RXINIT_START Inisialisasi RDBSS dimulai, tetapi terjadi kesalahan. Kode kesalahan ini adalah enum RDBSS internal dengan nilai 5.

Keterangan

Driver mini-redirector jaringan monolitik yang ditautkan secara statis dengan RDBSSLIB. LIB harus memanggil RxDriverEntry dari rutinitas DriverEntry-nya untuk menginisialisasi salinan pustaka RDBSSLIB yang ditautkan dengan driver. RxDriverEntry harus dipanggil oleh driver mini-redirector jaringan monolitik sebelum rutinitas RDBSS lainnya dipanggil.

Setelah memanggil RxDriverEntry untuk menginisialisasi salinan pustaka RDBSS di dekat awal rutinitas DriverEntry-nya , driver pengalihan mini jaringan biasanya akan memanggil RxRegisterMinirdr nanti dalam rutinitas DriverEntry-nya untuk mendaftar dengan RDBSS.

Jika panggilan RxDriverEntry berhasil, struktur data RDBBS global internal diinisialisasi. Berbagai spinlock dan mutex dibuat untuk melindungi struktur data ini. Salah satu struktur data ini adalah struktur RDBSS_DATA yang merupakan struktur teratas dalam struktur data memori RDBSS. Parameter DriverObject disimpan dalam anggota DriverObject dari struktur RDBSS_DATA. RxDriverEntry juga menginisialisasi pelacakan, pengelogan, dan penelusuran kesalahan jika ini diaktifkan (build yang dicentang, misalnya).

RxDriverEntry juga akan mencoba membuka jalur registri yang diteruskan sebagai parameter RegistryPath , memperlakukan objek ini sebagai string yang tidak peka huruf besar/kecil. Jika kunci registri ini dapat berhasil dibuka, maka upaya akan dilakukan untuk membuka kunci registri Parameter di bawah entri ini.

RxDriverEntry juga akan mencoba membuka kunci registri HKLM\System\CurrentControlSet\Services\LanmanWorkStation\Parameters .

Jika kunci ini dapat dibuka, maka upaya akan dilakukan untuk membaca beberapa nilai di bawah kunci ini tergantung pada versi sistem operasi.

Pada Windows XP dan yang lebih baru, RxDriverEntry akan mencoba membuka nilai DisableByteRangeLockingOnReadOnlyFiles di bawah kunci LanmanWorkStation\Parameters .

Nilai ini adalah DWORD yang diperlakukan sebagai boolean dan disimpan sebagai nilai boolean untuk DisableByteRangeLockingOnReadOnlyFiles, variabel RDBSS untuk menangani penguncian rentang byte pada file baca saja. Variabel ini memengaruhi cara RDBSS menangani permintaan SRV_OPEN baru oleh pengalih mini jaringan pada FCB dan memutuskan apakah dapat diciutkan ke SRV_OPEN yang ada jika atribut kompatibel. Jika driver pengalih mini jaringan ingin mengubah perilaku ini, driver harus mengatur nilai DisableByteRangeLockingOnReadOnlyFiles ke nilai yang sesuai setelah rutinitas RxDriverEntry kembali. The RDBSSLIB. Pustaka statis LIB mengekspos DisableByteRangeLockingOnReadOnlyFiles sebagai variabel eksternal.

Pada Windows 2000 dan Windows XP, RxDriverEntry akan mencoba membuka nilai ReadAheadGranularity di bawah kunci LanmanWorkStation\Parameters .

Nilai ini adalah DWORD yang diperlakukan sebagai angka dan disimpan sebagai nilai untuk opsi RDBSS internal pada jumlah halaman PAGE_SIZE untuk dibaca sebelumnya yang digunakan oleh Cache Manager. Nilai registri apa pun yang lebih besar dari 16 diperlakukan seolah-olah nilai ini dibatasi hingga 16 (nilai maksimum yang saat ini diizinkan). Opsi internal ini disimpan sebagai berapa kali halaman PAGE_SIZE pada prosesor (maksimum 0x10000 atau 64K untuk PAGE_SIZE 4K, misalnya). Pada Windows 2000 dan Windows XP, RDBSS memanggil CcSetReadAheadGranularity dengan opsi ini untuk berbagai operasi buat, baca, dan tulis. Jika driver pengalih mini jaringan ingin mengubah perilaku ini, driver harus mengatur nilai ReadAheadGranularity ke nilai yang sesuai setelah rutinitas RxDriverEntry kembali. The RDBSSLIB. Pustaka statis LIB mengekspos ReadAheadGranularity sebagai variabel eksternal.

Pada sistem X86, 64K adalah tulisan terbesar yang akan dikeluarkan oleh Memory Manager saat mengeluarkan penulisan halaman (flush cache akan menjadi penulisan halaman melalui Memory Manager). Untuk sistem file jarak jauh, 64K bukanlah pilihan terbaik. Data terbanyak yang dapat ditransfer dalam satu permintaan jaringan TDI akan kurang dari 64K karena overhead untuk informasi protokol.

Pada Windows Server 2003, nilai registri untuk mengatur ReadAheadGranularity tidak diekspos dan RDBSS default ke 32K (8 4K PAGE_SIZE halaman). Ini adalah nilai default yang sama yang diadopsi untuk sistem file lokal.

RxDriverEntry mengambil penunjuk ke proses kernel yang berjalan dengan memanggil PsGetCurrentProcess dan menyimpan nilai ini dalam struktur data RDBSS internal. Proses kernel ini terkadang disebut proses sistem file.

RxDriverEntry kemudian menyalin penunjuk ke rutinitas RxFsdDispatch atas semua entri dalam tabel pengiriman driver. Jadi jika driver mini-redirector jaringan monolitik perlu menerima IRP tertentu untuk pemrosesan khusus sebelum pustaka RDBSS, salinan tabel pengiriman driver aslinya harus disimpan sebelum memanggil RxDriverEntry dan pointer rutin apa pun yang dipulihkan setelah panggilan ke RxDriverEntry telah kembali. Perhatikan bahwa RDBSS juga akan menyalin RxFsdDispatch ke semua entri tabel pengiriman driver ketika RxRegisterMinirdr dipanggil kecuali opsi diatur untuk mencegah perilaku ini.

Untuk driver pengalihan mini jaringan non-monolitik (pengalih Microsoft SMB), driver perangkat RDBSS.SYS diinisialisasi dalam rutinitas DriverEntry sendiri saat dimuat yang secara internal memanggil RxDriverEntry. Pada driver monolitik, rutinitas RxDriverEntry diekspor dari RDBSSLIB. Pustaka statis LIB dan harus dipanggil secara eksplisit oleh pengarah mini jaringan.

Persyaratan

Persyaratan Nilai
Target Platform Desktop
Header rxprocs.h (termasuk Rxprocs.h)
IRQL <= APC_LEVEL

Lihat juga

CcSetReadAheadGranularity

PsGetCurrentProcess

RxRegisterMinirdr

RxSetDomainForMailslotBroadcast

RxStartMinirdr

RxStopMinirdr

RxUnregisterMinirdr

RxpUnregisterMinirdr

__RxFillAndInstallFastIoDispatch