Why the removal of the do/while loop? This breaks the macro when used without braces :
+#define SepReleaseTokenLock(Token) \ + ExReleaseResource(((PTOKEN)Token)->TokenLock); \ + KeLeaveCriticalRegion(); \ +
<snip>
-#define SepReleaseTokenLock(Token) \ - do { \ - ExReleaseResource(((PTOKEN)Token)->TokenLock); \ - KeLeaveCriticalRegion(); \ - while(0)
<snip>
/* Release the lock if we had acquired it */ + if (!TokenLocked) SepReleaseTokenLock(Token);