Process Explorer делает это, как угодно. Вероятно, он включает в себя глубокую магию Windows API, поскольку он извлекает максимальное количество, а также текущий счет.
Вы также можете попробовать моральный эквивалент
int old_count=0;
if (AcquireSemaphore(timeout=0)) {
ReleaseSemaphore(&old_count);
old_count += 1;
}
но здесь есть оговорка, что он слегка навязчив к коду, использующему семафор.