Fungsi StorPortAcquireSpinLock (storport.h)
Rutinitas StorPortAcquireSpinLock memperoleh kunci putar yang ditentukan.
Sintaks
void StorPortAcquireSpinLock(
[in] PVOID DeviceExtension,
[in] STOR_SPINLOCK SpinLock,
[in] PVOID LockContext,
[in/out] PSTOR_LOCK_HANDLE LockHandle
);
Parameter
[in] DeviceExtension
Penunjuk ke ekstensi perangkat driver miniport per adaptor.
[in] SpinLock
Menentukan nilai enumerator jenis STOR_SPINLOCK yang menentukan kunci putar yang akan diperoleh. Untuk fungsi ini, SpinLock harus salah satu dari: DpcLock, StartIoLock, atau InterruptLock. Panggil StorportAcquireSpinLockEx untuk memperoleh jenis kunci putar lainnya.
[in] LockContext
Penunjuk ke objek DPC tempat kunci ditahan jika SpinLock diatur ke DpcLock. Anggota ini harus NULL jika SpinLock menunjukkan jenis InterruptLock atau StartIoLock.
[in/out] LockHandle
Penunjuk ke buffer yang, saat dikembalikan, akan berisi handel kunci. Untuk melepaskan kunci, pemanggil harus meneruskan handel ini ke rutinitas StorPortReleaseSpinLock .
Nilai kembali
Tidak ada
Keterangan
Driver Miniport harus memastikan bahwa mereka tidak mencoba untuk memperoleh kunci yang sudah ditahan atau memperoleh kunci dalam urutan yang salah. Salah satu kesalahan ini akan mengakibatkan kebuntuan sistem.
Kunci tertentu ditahan secara otomatis oleh driver port sebelum memanggil rutinitas panggilan balik driver miniport. Untuk setiap rutinitas panggilan balik driver miniport, tabel berikut menunjukkan mana yang mengunci driver port yang diperoleh secara otomatis sebelum memanggil rutinitas panggilan balik.
Rutinitas driver miniport | Kunci putar yang dipegang oleh driver port |
---|---|
HwStorFindAdapter | Tidak ada |
HwStorInitialize | Interupsi (miniport fisik), Tidak ada (miniport virtual) |
HwStorInterrupt | Interupsi |
HwMSIInterruptRoutine | Interupsi |
HwStorStartIo | StartIo (miniport fisik hanya ketika diminta saluran bersamaan <= 1) |
HwStorBuildIo | Tidak ada |
HwStorTimer | Startio, Interrupt (ketika anggota SynchronizationModeldari PORT_CONFIGURATION_INFORMATION diatur ke StorSynchronizeHalfDuplex) |
HwStorResetBus | Startio, Interrupt (ketika anggota SynchronizationModeldari PORT_CONFIGURATION_INFORMATION diatur ke StorSynchronizeHalfDuplex) |
HwStorAdapterControl | Tidak ada. (Di Windows Server 2003, kunci spin StartIo ditahan ketika jenis kontrol adalah ScsiStopAdapter.) |
HwStorUnitControl | Tidak ada |
HwStorTracingEnabled | Tidak ada |
HwStorPassiveInitializeRoutine | Tidak ada |
HwStorDpcRoutine | Tidak ada |
HwStorStateChange | Startio, Interrupt (ketika anggota SynchronizationModeldari PORT_CONFIGURATION_INFORMATION diatur ke StorSynchronizeHalfDuplex) |
Kunci yang dipegang oleh pengaruh driver port yang mengunci rutinitas panggilan balik diizinkan untuk memperoleh, karena kunci spin harus diperoleh dalam urutan berikut:
- DPC atau StartIo
- Interupsi
Misalnya, jika driver port memperoleh kunci spin Interupsi sebelum memanggil rutinitas panggilan balik, rutinitas panggilan balik tersebut tidak dapat lagi memperoleh kunci putaran DPC atau StartIo karena kunci spin DPC dan StartIo memiliki urutan yang lebih rendah daripada kunci spin Interupsi . Di sisi lain, jika driver port memperoleh kunci spin StartIo sebelum memanggil rutinitas panggilan balik, rutinitas panggilan balik itu, ketika dieksekusi, masih dapat memperoleh Interupsi atau kunci putar DPC .
Tabel berikut menunjukkan spin lock mana yang dapat diperoleh setiap rutinitas driver miniport. Dalam kasus di mana rutinitas driver miniport harus mendapatkan kunci putar StartIo dan kunci spin Interupsi , rutinitas harus selalu memperoleh kunci spin StartIo terlebih dahulu.
Rutinitas driver miniport | Kunci putaran yang diizinkan |
---|---|
HwStorFindAdapter | Tidak ada |
HwStorInitialize | Tidak ada |
HwStorInterrupt | Tidak ada |
HwMSIInterruptRoutine | Tidak ada |
HwStorStartIo | DPC, Interupsi. Perhatikan bahwa StartIo dapat diperoleh di driver miniport virtual atau dari driver miniport fisik yang menggunakan beberapa saluran bersamaan. |
HwStorBuildIo | DPC, StartIo, Interupsi |
HwStorTimer | Interupsi (ketika anggota SynchronizationModeldari PORT_CONFIGURATION_INFORMATION tidak diatur ke StorSynchronizeHalfDuplex) |
HwStorResetBus | Interupsi (ketika anggota SynchronizationModeldari PORT_CONFIGURATION_INFORMATION tidak diatur ke StorSynchronizeHalfDuplex) |
HwStorAdapterControl | DPC, StartIo, Interupsi. (Di Windows Server 2003, kunci spin tidak diizinkan ketika jenis kontrol adalah ScsiStopAdapter.) |
HwStorUnitControl | DPC, StartIo, Interupsi |
HwStorTracingEnabled | DPC, StartIo, Interupsi |
HwStorPassiveInitializeRoutine | Tidak ada |
HwStorDpcRoutine | DPC, StartIo, Interupsi |
HwStorStateChange | Interupsi (ketika anggota SynchronizationModeldari PORT_CONFIGURATION_INFORMATION tidak diatur ke StorSynchronizeHalfDuplex) |
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Header | storport.h (termasuk Storport.h) |
Aturan kepatuhan DDI | StorPortSpinLock(storport), StorPortSpinLock3(storport), StorPortSpinLock4(storport) |