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 |