NdisAcquireReadWriteLock 함수(ndis.h)

NdisAcquireReadWriteLock 함수는 호출자가 드라이버 스레드 간에 공유되는 리소스에 대한 쓰기 또는 읽기 액세스에 사용하는 잠금을 획득합니다.

참고 읽기-쓰기 잠금 인터페이스는 NdisAcquireReadWriteLock 대신 NdisAcquireRWLockRead 또는 NdisAcquireRWLockWrite를 사용해야 하는 NDIS 6.20 이상 드라이버에서는 더 이상 사용되지 않습니다.
 

구문

void NdisAcquireReadWriteLock(
  [in, out] PNDIS_RW_LOCK Lock,
  [in]      BOOLEAN       fWrite,
  [_out_]   PLOCK_STATE   LockState
);

매개 변수

[in, out] Lock

잠금을 나타내는 불투명 변수에 대한 포인터입니다. 호출자는 이 잠금을 사용하여 공유 리소스에 액세스할 수 있습니다.

[in] fWrite

부울 값입니다. 값이 TRUE이면 이 함수는 공유 리소스에 대한 쓰기 액세스 권한이 제공됩니다. 값이 FALSE이면 이 함수에 읽기 액세스 권한이 제공됩니다.

[_out_] LockState

LockState. 잠금 상태를 추적하는 불투명 변수에 대한 포인터입니다. 이 변수는 호출자가 잠금을 획득하고 해제하는 시간 사이의 간격에 존재합니다. 호출자는 동일한 비 ISR 드라이버 스레드에서 잠금을 획득하려는 각 시도에 대해 LOCK_STATE 형식의 다른 변수를 사용해야 합니다.

반환 값

없음

설명

드라이버는 를 사용하여 NDIS_RW_LOCK 형식의 변수를 초기화해야 합니다.드라이버가 다른 NdisXxx ReadWriteLock 함수를 호출하기 전에 NdisInitializeReadWriteLock 함수입니다. 드라이버는 사용하는 잠금에 대한 상주 스토리지를 제공해야 합니다.

NdisAcquireReadWriteLock을 사용하여 잠금을 획득한 후 호출자는 를 호출하여 해당 잠금을 해제해야 합니다. NdisReleaseReadWriteLock 함수. 잠금의 참조 수를 감소하려면 드라이버가 를 호출해야 합니다.
NdisAcquireReadWriteLock 에 대한 각 호출에 대해 NdisReleaseReadWriteLock을 한 번 만듭니다.

드라이버 스레드 간에 공유되는 리소스를 수정하려면 드라이버 스레드가 쓰기 잠금을 획득해야 합니다. 이러한 리소스를 모니터링하기 위해 드라이버 스레드는 읽기 전용 잠금을 획득해야 합니다. 읽기 액세스에는 스핀 잠금에 대한 연동 작업 또는 경합이 필요하지 않습니다. 읽기 전용 액세스를 사용하면 우수한 운영 체제 및 드라이버 성능을 유지하는 데 도움이 됩니다.

드라이버 스레드는 25 마이크로초 이상의 쓰기 잠금을 보유해서는 안 됩니다. 장기간 쓰기 잠금을 유지하면 운영 체제와 드라이버 성능이 모두 저하됩니다.

드라이버는 잠금을 사용하여 다른 함수가 MiniportInterrupt 및/or와 공유하는 읽기 또는 쓰기 액세스로부터 리소스를 보호할 수 없습니다. MiniportDisableInterruptEx 함수입니다. 대신 드라이버가 를 호출해야 합니다. NdisMSynchronizeWithInterruptEx MiniportSynchronizeInterrupt 함수는 해당 리소스가 있는 동일한 DIRQL에서 이러한 공유 리소스에 액세스합니다.
MiniportInterrupt 및/또는 MiniportDisableInterruptEx 함수는 수행합니다.

NdisAcquireReadWriteLock 은 항상 IRQL을 발생합니다. 쓰기 작업의 경우 NdisAcquireReadWriteLock 은 스핀 잠금을 획득하여 IRQL을 발생합니다. 읽기 작업의 경우 NdisAcquireReadWriteLock 은 IRQL을 IRQL = DISPATCH_LEVEL 명시적으로 발생합니다.

NDIS 스핀 잠금을 획득하고 해제하는 방법에 대한 자세한 내용은 네트워크 드라이버의 동기화 및 알림을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 대신 NdisAcquireRWLockRead 또는 NdisAcquireRWLockWrite를 사용해야 하는 NDIS 6.20 이상 드라이버의 경우 사용되지 않습니다. Windows Vista에서 NDIS 6.0 및 NDIS 5.1 드라이버(NdisAcquireReadWriteLock(NDIS 5.1) 참조)에 대해 지원됩니다. Windows XP에서 NDIS 5.1 드라이버(NdisAcquireReadWriteLock(NDIS 5.1) 참조)에 대해 지원됩니다.
대상 플랫폼 유니버설
헤더 ndis.h(Ndis.h 포함)
라이브러리 Ndis.lib
DLL Ndis.sys
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 Irql_Synch_Function(ndis)

추가 정보

MiniportDisableInterruptEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAcquireRWLockRead

NdisAcquireRWLockWrite

NdisInitializeReadWriteLock

NdisMSynchronizeWithInterruptEx

NdisReleaseReadWriteLock