Bagikan melalui


Menggunakan TmXxx Routines

Sebagian besar rutinitas KTM menggunakan format penamaan ZwXxx. Rutinitas ini berbasis handel. Artinya, setidaknya salah satu parameter input atau output mereka adalah handel ke objek KTM.

KTM juga menyediakan jumlah rutinitas yang lebih kecil yang menggunakan format penamaan TmXxx. Rutinitas ini berbasis pointer. Setidaknya salah satu parameter input atau outputnya adalah penunjuk ke objek KTM.

Beberapa rutinitas TmXxx menduplikasi rutinitas ZwXxx . Rutinitas TmXxx lainnya tidak memiliki ZwXxx yang setara.

Dalam kebanyakan kasus, Anda harus menggunakan rutinitas ZwXxx . Tetapi Anda harus menggunakan rutinitas TmXxx dalam situasi berikut:

  • Manajer sumber daya Anda menggunakan rutinitas panggilan balik ResourceManagerNotification , yang menyediakan penunjuk ke objek pendaftaran alih-alih handel.

    Anda dapat meneruskan penunjuk objek pendaftaran ke rutinitas TmXxx objek pendaftaran.

  • Komponen sistem pemrosesan transaksi (TPS) Anda melakukan banyak panggilan cepat ke KTM, yang berpotensi menyebabkan performa sistem terlalu lambat.

    Dalam hal ini, komponen Anda dapat memanggil ObReferenceObjectByHandle untuk mengonversi setiap handel objek KTM ke penunjuk, menyimpan pointer, lalu meneruskan pointer ke rutinitas TmXxx . Konversi ini menghilangkan kebutuhan KTM untuk mengonversi setiap handel menjadi pointer secara internal setiap kali rutinitas ZwXxx dipanggil.

    Setiap panggilan ke ObReferenceObectByHandle harus menyertakan masker akses yang berisi bendera yang ditentukan KTM yang sesuai. Bendera ini dijelaskan pada halaman referensi untuk rutinitas buat dan buka KTM.

    Ketika komponen Anda telah selesai menggunakan objek KTM, komponen harus mendereferensikan objek dengan memanggil ObDereferenceObjectDeferDelete atau ObDereferenceObject.

    • Anda harus menggunakan ObDereferenceObjectDeferDelete jika komponen Anda, atau komponen lain di tumpukan driver Anda, memegang kunci yang disediakan sistem, seperti kunci spin, objek mutex, atau mutex cepat.

    • Anda dapat menggunakan ObDereferenceObject jika Anda yakin bahwa tidak ada komponen pada tumpukan driver Anda yang menyimpan kunci yang disediakan sistem.

    Kebuntuan dapat terjadi jika komponen Anda memanggil ObDereferenceObject saat menahan kunci, karena KTM mungkin juga menahan kunci untuk namespace objek. Selain itu, komponen Anda dapat memanggil TmGetTransactionId untuk mendapatkan pengidentifikasi transaksi dengan cepat lebih efisien daripada memanggil ZwQueryInformationTransaction.

  • Anda harus memiliki kemampuan yang tidak disediakan oleh rutinitas ZwXxx .

    Secara khusus, manajer sumber daya dapat memanggil rutinitas berikut: