Есть очень большая разница.В то время как KeReadStateSemaphore
просто возвращает состояние семафора, KeWaitForSingleObject
с таймаутом 0 фактически будет обрабатывать побочные эффекты, если ожидание будет удовлетворено (то есть побочным эффектом является уменьшение состояния сигнала).Используйте первый, чтобы опросить, и используйте второй, чтобы попытаться получить семафор без ожидания.