日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Windows内核读写自旋锁EX_SPIN_LOCK

發(fā)布時(shí)間:2025/3/19 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows内核读写自旋锁EX_SPIN_LOCK 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這玩意本來(lái)是在Vista SP1版本就存在了,但是某些傻x客戶還在堅(jiān)持使用老舊的windows操作系統(tǒng)??梢允褂孟旅娴囊浦卜桨复?。

在微軟的實(shí)現(xiàn)上好像有一些調(diào)試用途或者什么優(yōu)化,移植不了,去掉了。

#ifndef _MY_EX_SPIN_LOCK #define _MY_EX_SPIN_LOCKtypedef LONG EX_SPIN_LOCK;KIRQL NTAPI ExAcquireSpinLockExclusive(volatile EX_SPIN_LOCK *ExSpinLock); KIRQL NTAPI ExAcquireSpinLockShared(volatile EX_SPIN_LOCK *ExSpinLock); void NTAPI ExReleaseSpinLockExclusive(EX_SPIN_LOCK *ExSpinLock, KIRQL NewIrql); void NTAPI ExReleaseSpinLockShared(EX_SPIN_LOCK *ExSpinLock, KIRQL NewIrql);#endif // _MY_EX_SPIN_LOCK #include <wdm.h> #include "exspinlock.h"VOID NTAPI ExpWaitForSpinLockExclusiveAndAcquire(volatile EX_SPIN_LOCK *ExSpinLock) {while(*ExSpinLock < 0 || _interlockedbittestandset(ExSpinLock, 0x1Fu)); }VOID NTAPI ExpWaitForSpinLockSharedAndAcquire(volatile EX_SPIN_LOCK *ExSpinLock) {while(1){if(*ExSpinLock >= 0){EX_SPIN_LOCK Tmp = *ExSpinLock;if (_InterlockedCompareExchange(ExSpinLock, Tmp + 1, Tmp) == Tmp)break;}} }KIRQL NTAPI ExAcquireSpinLockExclusive(volatile EX_SPIN_LOCK *ExSpinLock) {KIRQL OldIrql;OldIrql = KfRaiseIrql(DISPATCH_LEVEL);if(_interlockedbittestandset(ExSpinLock, 0x1Fu))ExpWaitForSpinLockExclusiveAndAcquire(ExSpinLock);while(*ExSpinLock != 0x80000000);return OldIrql; }KIRQL NTAPI ExAcquireSpinLockShared(volatile EX_SPIN_LOCK *ExSpinLock) {KIRQL OldIrql;EX_SPIN_LOCK Tmp;OldIrql = KfRaiseIrql(DISPATCH_LEVEL);Tmp = *ExSpinLock & 0x7FFFFFFF;if(_InterlockedCompareExchange(ExSpinLock, Tmp + 1, Tmp) != Tmp ){ExpWaitForSpinLockSharedAndAcquire(ExSpinLock);}return OldIrql; }void NTAPI ExReleaseSpinLockExclusive(EX_SPIN_LOCK *ExSpinLock, KIRQL NewIrql) {_InterlockedAnd(ExSpinLock, 0);KeLowerIrql(NewIrql); }void NTAPI ExReleaseSpinLockShared(EX_SPIN_LOCK *ExSpinLock, KIRQL NewIrql) {_InterlockedExchangeAdd(ExSpinLock, 0xFFFFFFFF);KeLowerIrql(NewIrql); }

?

總結(jié)

以上是生活随笔為你收集整理的Windows内核读写自旋锁EX_SPIN_LOCK的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。