Всем привет. Делаем так: HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); HANDLE hEvent1 = (HANDLE)((DWORD)hEvent | 2); CloseHandle(hEvent1); CloseHandle возвращает TRUE. Делаем так: HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); HANDLE hEvent1 = (HANDLE)((DWORD)hEvent | 2); CloseHandle(hEvent1); CloseHandle(hEvent); Первый CloseHandle возвращает TRUE. Второй завершается неудачей, код ошибки: невалидный хендл. Выходит, что хендлы определяются с точностью до второго бита??...
Первые два бита - tag bits, если оба взведены, то считается, что это хендл консоли. А при поиске (lookup) учитываются только старшие 30 бит.