Query the Value of a Semaphore

CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

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

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read