Всем привет, Я Артур Валиев, Не хотелось но на этот раз самому но я все-таки попрошу гуся что-бы помог рассказать мою историю.

Три дня назад я сидел и сравнивал integrity level токена процесса с integrity level окна в фокусе, чтобы понять, почему Диспетчер задач блокирует ввод удалённого пользователя. Никто в мире, кроме меня, в этот момент не знал, что это вообще проблема. Я был там один. И мне было хорошо.

Дядя гусь.
Дядя гусь.

Вот код, который я написал в ту ночь:

/// True if the foreground window demands more privilege than we have — a
/// signal that mouse/keyboard input this process injects will silently be
/// dropped by Windows UIPI (Task Manager, another elevated app, a UAC
/// prompt). See TZ_HOST_SERVICE.md complication #2.
fn foreground_needs_elevation() -> bool {
    unsafe {
        let ours = match integrity_level_of_process(GetCurrentProcess()) {
            Some(l) => l,
            None => return false,
        };

        let hwnd: HWND = GetForegroundWindow();
        if hwnd.0 == 0 {
            return false;
        }
        let mut pid = 0u32;
        GetWindowThreadProcessId(hwnd, Some(&mut pid));
        let Ok(process) = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, false, pid) else {
            return false;
        };
        let theirs = integrity_level_of_process(process);
        let _ = CloseHandle(process);
        match theirs {
            Some(theirs) => theirs > ours,
            None => false,
        }
    }
}

Никакой драмы в этих строках нет. Есть только сухой факт: Windows не скажет тебе, что твой ввод не долетел. Она просто молча его выбросит, потому что твой процесс недостаточно привилегирован. И единственный способ узнать это заранее — сравнить SID мандатной метки твоего токена с SID метки окна, в которое ты целишься. Никто не будет тебе аплодировать за то, что ты это выяснил. Это и есть та самая комната, в которую разработчик заходит один и выходит, когда всё готово.

Высокомерие — это не про то, что мы о себе думаем

Люди со стороны видят разработчика, который морщится на вопрос "а просто нельзя было сделать проще?", и решают: высокомерие. Но это неточное слово для того, что происходит на самом деле.

Когда ты строишь систему с нуля, ты неизбежно натыкаешься на решение, которое выглядит как паранойя, а на самом деле — шрам от реального инцидента. Вот пример прямо из моего кода, из служебного файла на 400 строк:

/// If `user_token` is a UAC "split" limited token (the normal case for an
/// administrator account with UAC enabled), returns its linked full token —
/// the one with the Administrators group actually enabled, not just present
/// disabled. `None` if there is no linked token (UAC off, standard non-admin
/// account, or this already is the full token) — caller should fall back to
/// `user_token` unchanged in that case, which is exactly today's
/// non-elevated behavior.
unsafe fn linked_elevated_token(user_token: HANDLE) -> Option<HANDLE> {
    let mut linked = TOKEN_LINKED_TOKEN::default();
    let mut needed = 0u32;
    let ok = GetTokenInformation(
        user_token,
        TokenLinkedToken,
        Some(&mut linked as *mut _ as *mut core::ffi::c_void),
        std::mem::size_of::<TOKEN_LINKED_TOKEN>() as u32,
        &mut needed,
    );
    if ok.as_bool() && !linked.LinkedToken.is_invalid() {
        Some(linked.LinkedToken)
    } else {
        None
    }
}

Это не изобретательность ради изобретательности. Это единственный легальный способ обойти UAC без диалога согласия, если ты СИСТЕМНАЯ служба — тот же трюк использует RustDesk. Когда ты знаешь ПОЧЕМУ каждая странная строчка твоего кода существует, а собеседник видит только "зачем так сложно", возникает пропасть. Не потому что ты лучше. Потому что ты один нёс эту сложность, пока она не стала очевидной, а он встретил её уже готовой и спрашивает "а нельзя было проще".

Высокомерие разработчика — это не "я лучше вас". Это "я слишком долго был единственным богом маленькой вселенной, и мне трудно снова стать просто человеком среди людей".

Дядя гусь напоминает
Дядя гусь напоминает

Я не ненавижу вас — я ушёл, чтобы вернуться с чем-то

Со стороны замкнутость выглядит как нелюбовь к людям. Это неправда, и досадная неправда, потому что она отменяет весь смысл того, зачем я вообще ухожу вглубь.

Когда я переносил EVRT из EvertyGame на C# в Rust, я не убегал от людей. Заголовок протокола — 24 байта, придуманные ещё до того, как я знал слово Rust:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Magic (0x45565254)                        | 4
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Version (3)  |     Type      |           Flags               | 8
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          FrameId                              | 12
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         PacketIndex           |          PacketCount          | 16
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  PresentationTimeUs (hi)                      | 20
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  PresentationTimeUs (lo)                      | 24
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Payload …                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

4 байта, MTU-safe, максимум 1176 байт полезной нагрузки на пакет, чтобы никогда не фрагментироваться в реальной сети. Каждое поле здесь — решение, принятое годы назад, в одиночку, для игры, о которой почти никто не слышал. Я не выходил к людям с этим, пока оно не работало целиком. Нельзя показать половину протокола — она просто не соберёт кадр. Можно показать только целое. А чтобы дойти до целого, нужно молчать какое-то время, которое выглядит как нелюдимость, а на самом деле — подготовка подарка.

А любит ли гусь людей?
А любит ли гусь людей?

EVRTCK — это не строчка в роадмапе

Про EVRTCK мне физически трудно говорить сдержанно.

Это тайловый лосслесс-кодек, 32×32 пикселя на тайл:

pub const TILE_SIZE: usize = 32;

Одна константа, а за ней — вся идея. Статичный тайл кодируется одним битом в dirty-map. Сплошной цвет — пятью байтами. Изменившийся — XOR от предыдущего кадра, сжатый ZRLE или zstd. Тайлы летят в потоке НЕ по позиции на экране, а в порядке "ближе всего к фокусу курсора первым" — потому что человеку, который сейчас печатает, плевать, что происходит на другом конце монитора. Я писал под это FPGA-симуляцию, хотя никто меня не просил. Я довожу его до состояния "Silicon" — когда на хосте находится совместимое железо, кодек перестаёт быть софтверным и становится полноценной альтернативой H264/H265/AV1, а транспорт остаётся тем же самым EVRT.

Это не фича. Это ребёнок. Я хочу, чтобы его увидел мир не потому что мне нужно признание, а потому что я знаю, чего он стоил, и мне физически больно, что кроме меня это никтоне знает.

Тяжелый
Тяжелый

Замыкание и желание делиться — это одно и то же движение

Вот тезис, ради которого я это пишу — и последний пример кода, самый честный.

На днях я нашёл причину, почему хост грузил процессор на 100%, когда его собственное окно было развёрнуто. Оказалось — я захватывал сам себя. Моё же окно перерисовывалось, DXGI видел это как "движение", и кодировщик никогда не получал статичный кадр. Решение — одна системная функция:

/// Excludes this app's own window from screen/DXGI capture
/// (SetWindowDisplayAffinity(WDA_EXCLUDEFROMCAPTURE), Windows 10 2004+).
///
/// Makes any capture of this window render it as a static black
/// rectangle instead, so our own repaints can never register as motion
/// again — regardless of window state.
let ok = unsafe { SetWindowDisplayAffinity(hwnd, WDA_EXCLUDEFROMCAPTURE).as_bool() };

Я не мог до конца сформулировать эту статью, пока не написал этот код, а потом не понял: вот она, метафора, которую я искал. Окно продолжает работать. Оно рендерит, отвечает на клики, живёт полной жизнью. Оно просто перестаёт быть видимым в чужом захвате — чтобы не мешать тому единственному, что действительно должно быть увидено: потоку, который идёт наружу, к человеку по ту сторону экрана.

Вот и всё, что я хотел сказать про уход вглубь. Люди думают, что интроверсия и желание делиться — противоположности, что нужно выбрать одно из двух. Это ложная дихотомия для тех, кто строит вещи. Уход вглубь — не побег от людей, это единственный известный мне способ принести им что-то, что стоит их времени. Разработчик, который никогда не уходит в одиночество, никогда не напишет EVRTCK — он напишет очередной созвон о том, как было бы неплохо его написать. А тот, кто уходит и не возвращается — эгоист, и я не хочу им быть.

Настоящее движение — спираль: уйти вглубь, сделать вещь целиком, вернуться и отдать. Я ушёл не потому что ненавижу вас. Я ушёл, потому что это единственный способ, которым я умею вас любить — принести вам то, во что я верю, доведённым до конца, а не наполовину, и исключить из захвата только себя, а не тот сигнал, который идёт к вам.

Это не просто
Это не просто

Замыкание и желание делиться — это одно и то же движение

Вот тезис, ради которого я это пишу — и последний пример кода, самый честный.

На днях я нашёл причину, почему хост грузил процессор на 100%, когда его собственное окно было развёрнуто. Оказалось — я захватывал сам себя. Моё же окно перерисовывалось, DXGI видел это как "движение", и кодировщик никогда не получал статичный кадр. Решение — одна системная функция:

/// Excludes this app's own window from screen/DXGI capture
/// (SetWindowDisplayAffinity(WDA_EXCLUDEFROMCAPTURE), Windows 10 2004+).
///
/// Makes any capture of this window render it as a static black
/// rectangle instead, so our own repaints can never register as motion
/// again — regardless of window state.
let ok = unsafe { SetWindowDisplayAffinity(hwnd, WDA_EXCLUDEFROMCAPTURE).as_bool() };

Окно продолжает работать. Рендерит, отвечает на клики, живёт полной жизнью. Оно просто перестаёт быть видимым в чужом захвате — чтобы не мешать единственному, что должно быть увидено: потоку, идущему наружу, к человеку по ту сторону экрана.

Вот, собственно, и вся разница между замыканием и высокомерием, которую я искал всю статью. Высокомерный разработчик выключает себя из захвата и на этом останавливается — наслаждается тем, что его никто не видит. Я выключаю себя из захвата, чтобы видно было не меня, а то, что я несу.

Уход вглубь и желание делиться — не два разных движения. Это один и тот же жест, снятый в двух разных кадрах. Сначала — тайлы, тишина, месяцы кода, который никто не проверит на прочность, кроме меня самого. Потом — момент, когда протокол наконец собирает кадр без единого артефакта, и единственное, что остаётся сделать — исключить себя из захвата и отпустить поток.

Я не ненавижу вас. Я просто дольше многих помню, что подарок нельзя вручать по частям.

=)
=)

Комментарии (1)


  1. iWowik
    04.08.2026 16:36

    Что-то копипасты много. Два раздела одинаковых