The NDIS interface library uses certain functions to process interlocked requests as Table A.2.15 shows. Operation for these functions is the same as acquiring a spin lock, performing a request, and then releasing the lock. However, internal implementation is efficient and may not involve acquiring an actual spin lock. Interlocked functions use executive spin locks; therefore an NDIS 3.0 driver cannot call them if it is running above IRQL DISPATCH_LEVEL.
The driver synchronizes code that calls interlocked functions with other operations that explicitly use spin locks. In other words, it can modify a variable using NdisInterlockedAddUlong in one place, and modify the same variable inside a spin lock acquisition in another place, without the possibility that the two threads will run simultaneously.
Table A.2.15 Interlocked Functions
Function |
Definition |
Adds an increment to a value that a spin lock protects. | |
Inserts a structure at the head of a linked list that a spin lock protects. | |
Inserts a structure at the tail of a linked list that a spin lock protects. | |
Removes a structure from the head of a linked list that a spin lock protects. |