Query the Value of a Semaphore

Have you ever wanted to take a look at the current value of a semaphore
whilst debugging your code, but don’t want to alter the value of the semaphore
by ReleaseSemaphore?

Well, Win32 does not give you the possibilty to get the value, but there
is a call in ntdll.dll which allows to query the semaphore. So the ‘QuerySemaphore.lib’
simply provides a small static lib, which wraps the NtQuerySemaphore call
in ntdll.dll.

QuerySemaphore.lib is selfcontained, so your program does not need ntdll.lib to
resolve the call to NtQuerySemaphore.

A simple example


#include “QuerySemaphore.h”

LONG Value, v1;

// Create a semaphore
HANDLE Handle = CreateSemaphore(NULL, 4, 10, NULL);

// Query the content of a semaphore
QuerySemaphore(Handle, &Value);

// Acquire Semaphore
WaitForSingleObject(Handle, INFINITE);

// Query again
QuerySemaphore(Handle, &Value);

So all you need is to include ‘QuerySemaphore.h’ in your sourcecode and
add ‘QuerySemaphore.lib’ to the libraries you are linking against.

Download demo project – 2 KB

Download source – 8 KB

More by Author

Must Read