Bagikan melalui


Fungsi StorPortAcquireSpinLockEx (storport.h)

Rutinitas StorPortAcquireSpinLockEx memperoleh kunci putar yang ditentukan.

Sintaks

ULONG StorPortAcquireSpinLockEx(
  PVOID             HwDeviceExtension,
  STOR_SPINLOCK     SpinLock,
  PVOID             LockContext,
  PSTOR_LOCK_HANDLE LockHandle
);

Parameter

HwDeviceExtension

[in] Arahkan ke ekstensi perangkat driver miniport per adaptor.

SpinLock

[in] Menentukan nilai enumerator jenis STOR_SPINLOCK yang menentukan kunci putar yang akan diperoleh.

LockContext

[in] Penunjuk ke objek DPC tempat kunci ditahan jika SpinLock diatur ke DpcLock. Anggota ini harus NULL jika SpinLock menunjukkan jenis InterruptLock atau StartIoLock.

LockHandle

[masuk/keluar] Penunjuk ke buffer yang, saat kembali, akan berisi handel kunci. Untuk melepaskan kunci, pemanggil harus meneruskan handel ini ke rutinitas StorPortReleaseSpinLock .

Nilai kembali

StorPortAcquireSpinLockEx mengembalikan STOR_STATUS_SUCCESS jika kunci putar berhasil diperoleh. Jika tidak, kode status akan dikembalikan seperti salah satu hal berikut:

Kode status Deskripsi
STOR_STATUS_INVALID_PARAMETER Parameter tidak valid.
STOR_STATUS_INVALID_IRQL Pemanggil berada di IRQL yang tidak valid untuk jenis SpinLock yang coba diperolehnya.

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 dipegang oleh pengemudi 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, Interupsi (saat anggota SynchronizationModeldari PORT_CONFIGURATION_INFORMATION diatur ke StorSynchronizeHalfDuplex)
HwStorResetBus Startio, Interupsi (saat anggota SynchronizationModeldari PORT_CONFIGURATION_INFORMATION diatur ke StorSynchronizeHalfDuplex)
HwStorAdapterControl Tidak ada. (Di Windows Server 2003, kunci putar StartIo ditahan ketika jenis kontrol adalah ScsiStopAdapter.)
HwStorUnitControl Tidak ada
HwStorTracingEnabled Tidak ada
HwStorPassiveInitializeRoutine Tidak ada
HwStorDpcRoutine Tidak ada
HwStorStateChange Startio, Interupsi (saat 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 putar 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 putar DPC atau StartIo karena kunci putar DPC dan StartIo memiliki urutan yang lebih rendah daripada kunci spin Interupsi . Di sisi lain, jika driver port memperoleh kunci putar StartIo sebelum memanggil rutinitas panggilan balik, rutinitas panggilan balik itu, ketika dieksekusi, masih dapat memperoleh Interupsi atau kunci putar DPC .

Tabel berikut menunjukkan kunci putaran 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 putar yang diizinkan
HwStorFindAdapter Tidak ada
HwStorInitialize Tidak ada
HwStorInterrupt Tidak ada
HwMSIInterruptRoutine Tidak ada
HwStorStartIo DPC, Interupsi. Perhatikan bahwa StartIo dapat diperoleh dalam 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 putar 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
Klien minimum yang didukung Windows 10, version 1809
Header storport.h

Lihat juga

STOR_SPINLOCK

StorPortReleaseSpinLock