Bagikan melalui


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)

Lihat juga

STOR_SPINLOCK

StorPortReleaseSpinLock