Share via


NdisAllocateSpinLock

This function initializes a variable of type NDIS_SPIN_LOCK, used to synchronize access to resources shared among driver functions not related to interrupts.

VOID NdisAllocateSpinLock (
IN PNDIS_SPIN_LOCK SpinLock );

Parameters

  • SpinLock
    Pointer to an opaque variable that represents a spin lock.

Remarks

Before a driver calls NdisAcquireSpinLock, NdisDprAcquireSpinLock, or any of the NdisInterlockedXXX functions, it must call this function to initialize the spin lock passed as a required parameter to these NdisXXX functions. The caller must provide nonpaged storage for the variable at SpinLock.

After calling this function, the driver can call NdisAcquireSpinLock to obtain exclusive use of the resource(s) that the spin lock protects. When resource access is complete, the driver calls NdisReleaseSpinLock so that other driver functions can access the resource(s) protected by that spin lock.

As a general rule, a driver should not pass the same spin lock to every NdisXXXSpinLock and NdisInterlockedXXX that it calls subsequently. In this way, any driver might initialize more than one spin lock with this function.

A driver should never use two spin locks to protect the same resources because nested spin-lock acquisitions frequently cause deadlocks. Even if a driver could be designed to prevent deadlocks, nested spin-lock acquisitions have an adverse effect on driver performance and I/O throughput.

When a driver no longer requires resource protection, for example, when a network adapter is being removed and the driver is releasing the resources that it allocated for that network adapter, the driver calls NdisFreeSpinLock.

Freeing a spin lock and releasing a spin lock must be distinguished. NdisFreeSpinLock clears the memory at SpinLock so it no longer represents a spin lock. Releasing an acquired spin lock with NdisReleaseSpinLock allows another thread of execution to acquire that spin lock.

Requirements

Runs on Versions Defined in Include Link to
Windows CE OS 2.0 and later Ndis.h   Ndislib.lib

Note   This API is part of the complete Windows CE OS package as provided by Microsoft. The functionality of a particular platform is determined by the original equipment manufacturer (OEM) and some devices may not support this API.

See Also

NdisAcquireSpinLock, NdisDprAcquireSpinLock, NdisDprReleaseSpinLock, NdisFreeSpinLock, NdisMSynchronizeWithInterrupt, NdisReleaseSpinLock

 Last updated on Tuesday, July 13, 2004

© 1992-2000 Microsoft Corporation. All rights reserved.