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.
#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.