Я создаю объект, например, WhaitableTimer, и я хочу поделиться своим объектом с другим процессом.
HANDLE htimerProcess = CreateWaitableTimer(NULL, FALSE, L"Time1");
HANDLE htimerProcess2 = CreateWaitableTimer(NULL, FALSE, L"Time1");
От документов до CreateWaitableTimer
:
Если указанный объект таймера существует до вызова функции,
функция возвращает дескриптор существующего объекта и GetLastError
возвращается ERROR_ALREADY_EXISTS.
Таким образом, ответ на ваш вопрос № 1 — нет, вы не создаете новый объект ядра — если оба вызова завершатся успешно, они будут ссылаться на один и тот же таймер.
Как доказать, что они одинаковы? Вы могли бы сделать это, позвонив SetWaitableTimer
в одном процессе, и ожидая его в другом.
Если вы хотите убедиться, что вы получаете тот же объект таймера во втором процессе, вызовите OpenWaitableTimer
вместо этого — так как это успешно, только если таймер уже существует.
Согласно описанию CreateWaitableTimer, это возможно:
Если функция завершается успешно, возвращаемое значение является дескриптором объекта таймера. Если именованный объект таймера существует до вызова функции, функция возвращает дескриптор существующего объекта, а GetLastError возвращает ERROR_ALREADY_EXISTS.
Таким образом, вы должны проверить значение (не адрес) дескрипторов и результат GetLastError()
чтобы увидеть, если ваша реализация будет успешной.