StorPortAcquireSpinLock 루틴은 지정된 스핀 잠금을 획득합니다.
통사론
void StorPortAcquireSpinLock(
[in] PVOID DeviceExtension,
[in] STOR_SPINLOCK SpinLock,
[in] PVOID LockContext,
[in/out] PSTOR_LOCK_HANDLE LockHandle
);
매개 변수
[in] DeviceExtension
미니포트 드라이버 어댑터별 디바이스 확장에 대한 포인터입니다.
[in] SpinLock
획득할 스핀 잠금을 지정하는 STOR_SPINLOCK 형식의 열거자 값을 지정합니다. 이 함수의 경우 SpinLockDpcLock, StartIoLock또는 InterruptLock중 하나여야 합니다. StorportAcquireSpinLockEx 호출하여 다른 유형의 스핀 잠금을 획득합니다.
[in] LockContext
SpinLock DpcLock 설정된 경우 잠금이 유지되는 DPC 개체에 대한 포인터입니다. SpinLockInterruptLock 또는 startIoLock 형식을 나타내는 경우 이 멤버는 NULL이어야 합니다.
[in/out] LockHandle
반환할 때 잠금 핸들을 포함하는 버퍼에 대한 포인터입니다. 잠금을 해제하려면 호출자가 이 핸들을 StorPortReleaseSpinLock 루틴에 전달해야 합니다.
반환 값
없음
발언
미니포트 드라이버는 이미 보유하고 있는 잠금을 획득하거나 잘못된 순서로 잠금을 획득하지 않도록 해야 합니다. 이러한 실수 중 하나라도 시스템 교착 상태가 발생합니다.
특정 잠금은 미니포트 드라이버 콜백 루틴을 호출하기 전에 포트 드라이버에 의해 자동으로 유지됩니다. 각 미니포트 드라이버 콜백 루틴에 대해 다음 표는 콜백 루틴을 호출하기 전에 포트 드라이버가 자동으로 획득하는 잠금을 나타냅니다.
미니포트 드라이버 루틴 | 포트 드라이버가 보유한 스핀 잠금 |
---|---|
HwStorFindAdapter | 없음 |
HwStorInitialize | 인터럽트(물리적 미니포트), 없음(가상 미니포트) |
HwStorInterrupt | 인터럽트 |
HwMSIInterruptRoutine | 인터럽트 |
HwStorStartIo | StartIo(요청된 동시 채널 <= 1인 경우에만 물리적 미니포트) |
HwStorBuildIo | 없음 |
HwStorTimer | Startio, 인터럽트(PORT_CONFIGURATION_INFORMATIONSynchronizationModel 멤버가 storSynchronizeHalfDuplex 설정되는 경우) |
HwStorResetBus | Startio, 인터럽트(PORT_CONFIGURATION_INFORMATIONSynchronizationModel 멤버가 storSynchronizeHalfDuplex 설정되는 경우) |
HwStorAdapterControl | 없음. (Windows Server 2003에서는 컨트롤 형식이 ScsiStopAdapter일 때 StartIo 스핀 잠금이 유지되었습니다.) |
HwStorUnitControl | 없음 |
HwStorTracingEnabled | 없음 |
HwStorPassiveInitializeRoutine | 없음 |
HwStorDpcRoutine | 없음 |
HwStorStateChange | Startio, 인터럽트(PORT_CONFIGURATION_INFORMATIONSynchronizationModel 멤버가 storSynchronizeHalfDuplex 설정되는 경우) |
다음 순서로 스핀 잠금을 획득해야 하므로 포트 드라이버가 보유한 잠금은 콜백 루틴을 잠가는 영향을 받습니다.
- DPC 또는 StartIo
- 인터럽트
예를 들어 포트 드라이버가 콜백 루틴을 호출하기 전에 인터럽트 스핀 잠금을 획득하는 경우 DPC 및 StartIo 스핀 잠금이 인터럽트 스핀 잠금보다 낮은 순서이므로 해당 콜백 루틴은 더 이상 DPC 또는 StartIo 스핀 잠금을 획득할 수 없습니다. 반면, 포트 드라이버가 콜백 루틴을 호출하기 전에 StartIo 스핀 잠금을 획득하는 경우 해당 콜백 루틴이 실행될 때 인터럽트 또는 DPC 스핀 잠금을 획득할 수 있습니다.
다음 표에서는 각 미니포트 드라이버 루틴을 획득할 수 있는 스핀 잠금을 나타냅니다. 미니포트 드라이버 루틴이 StartIo 스핀 잠금과 인터럽트 스핀 잠금을 모두 가져와야 하는 경우 루틴은 항상 StartIo 스핀 잠금을 먼저 획득해야 합니다.
미니포트 드라이버 루틴 | 허용되는 스핀 잠금 |
---|---|
HwStorFindAdapter | 없음 |
HwStorInitialize | 없음 |
HwStorInterrupt | 없음 |
HwMSIInterruptRoutine | 없음 |
HwStorStartIo | DPC, 인터럽트. StartIo는 가상 미니포트 드라이버 또는 여러 동시 채널을 사용하는 물리적 미니포트 드라이버에서 가져올 수 있습니다. |
HwStorBuildIo | DPC, StartIo, 인터럽트 |
HwStorTimer | 인터럽트(PORT_CONFIGURATION_INFORMATIONSynchronizationModel 멤버가 StorSynchronizeHalfDuplex 설정되지 않은 경우) |
HwStorResetBus | 인터럽트(PORT_CONFIGURATION_INFORMATIONSynchronizationModel 멤버가 StorSynchronizeHalfDuplex 설정되지 않은 경우) |
HwStorAdapterControl | DPC, StartIo, 인터럽트. (Windows Server 2003에서는 컨트롤 형식이 ScsiStopAdapter일 때 스핀 잠금이 허용되지 않습니다.) |
HwStorUnitControl | DPC, StartIo, 인터럽트 |
HwStorTracingEnabled | DPC, StartIo, 인터럽트 |
HwStorPassiveInitializeRoutine | 없음 |
HwStorDpcRoutine | DPC, StartIo, 인터럽트 |
HwStorStateChange | 인터럽트(PORT_CONFIGURATION_INFORMATIONSynchronizationModel 멤버가 StorSynchronizeHalfDuplex 설정되지 않은 경우) |
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 보편적 |
헤더 | storport.h(Storport.h 포함) |
DDI 규정 준수 규칙 | StorPortSpinLock(storport), StorPortSpinLock3(storport), StorPortSpinLock4(storport) |