Новые возможности NT6 и выше

Тема в разделе "WASM.WIN32", создана пользователем M0rg0t, 8 ноя 2021.

  1. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Навеяно темой про ХР.
    Возможно, где-то на уровне ядра все осталось почти такое же, но на прикладном уровне различия ХР и той же Висты весьма заметны. И программируя, приходится или делать костыли или две версии, или что. Потому в висте и дальше добавили немало хороших , полезных апи, которые как бы хочется использовать, но не всегда возможно из-за ретроградов. Навскидку.

    1. Restart Manager https://docs.microsoft.com/en-us/windows/win32/rstmgr/restart-manager-portal
    апи для инсталляторов и еще какого-нибудь софта , позволяет посмотреть каким процессом занят какой файл, и завершить процесс. В ХР решается костылем с NtQuerySystemInformation

    2. SRWlock , для синхронизации потоков. Есть решение для ХР https://habr.com/ru/post/317958/ , хз насколько актуально это, юзаю редко.

    3. Криптография. В висте ввели CNG, где все иначе, добавлены новые алгоритмы и вообще. В ХР у нас есть все тот же Криптоапи, как оно взаимозаменяемо - не знаю. Потому как большинство юзают какую-то стороннюю либу типa Crypto++ , но как бы строго говоря, это не решение - любой вариант можно заменить каким-то бустом или QT , и пофиг, ХР там или десятка.

    4. DLL load nofit https://docs.microsoft.com/en-us/windows/win32/devnotes/ldrdllnotification , разные апи для уведомления, например если дллку подгрузили в процесс . Как делать на ХР хз, наверное опять же какой-то андок вида перехвата апи.

    5. Process Mitigation - возможности запретить загружать левые длл, совершать сисколы user32/gdi и так далее. Мб фича не особо популярная, но однако, на ХР ее нет.

    6. Перезапуск приложения в случае сбоя https://docs.microsoft.com/ru-ru/windows/win32/api/winbase/nf-winbase-registerapplicationrestart , тоже полезная вещь, тоже на NT 5 придется городить огород из костылей.

    Про мелочевку, вида новые возможности для VEH, хендлов, Jobs, новые апи и т.д. я уже молчу. Но если кто-то еще что помнит полезное, то напишите в теме.

    Если же брать андок, то там еще интереснее, видимо что-то с висты кардинально поменяли. Примеры моих обсуждений
    https://wasm.in/threads/interesnyj-ros-samoudalenija-i-windows-xp.34099/ https://wasm.in/threads/error-duplicatetokenex-i-windows-xp.33651/
    кому лень читать, то разная ерунда работает на виста и выше.

    Про ядро ничего не скажу , мб и там поменяли, а мб и нет.
     
  2. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    SMEP, изоляция типов, графическая/оконная подсистема заточенная на dwm, сетевую подсистему вообще с нуля переписали, и это только навскидку.
     
    M0rg0t нравится это.
  3. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.729
    Так Свиста не актуальна уже давно.
     
  4. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    asmlamo, не актуальна, но именно в висте были заложены все эти новые возможности (начиная с юак, интегрити и так далее). Дальше они уже допиливались.
     
  5. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    439
    То, что многое добавляют - это довольно логично и правильно.
    Но я бы вопрос рассматривал в другой плоскости: какому количеству софта такие уберфичи нужны так что он отказывается от поддержки WinXP?
    И я встречал гораздо более простые и нужные вещи, что-то типа функции RegDeleteTree https://docs.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regdeletetreew которая сразу удаляет ветку реестра. По ссылке тоже можно убедиться, что начинается поддержка с WinVista хотя функция довольно востребованная если надо с реестром работать, а с реестром много какие приложения под Windows работают. Опять таки её можно навелосипедить удаляя рекурсивно ключи и подветки, но давление в сторону отхода от WinXP конечно это создаёт.
    И такого немало в простых базовых вещах которые иногда даже удивляет, что не было до висты или семёрки.
    Или вот даже современный способ открыть диалог открытия/сохранения файла это уже не банальня OpenFileName, а интерфейс IFileDialog https://docs.microsoft.com/en-us/windows/win32/shell/common-file-dialog где есть много дополнительных опций. Опять таки - с WinVista оно появилось.

    Но всё такое реально можно было бы реализовать на уровне пользовательских библиотек ни разу не требуя замены Windows.
    А MS надо именно перегнать на новую Windows пользователей и для этого и программистов.
    И, имхо, крайне важный способ для MS перегнать пользователей на новую версию - это затруднить разработку игр, а вовсе не каких то программ.
    А довольно халявный способ перегнать программистов на новые версии Windows - это внедрить в библиотеки MSVC зависимости от новых функций и сделать очередную версию .NET Framework тоже зависимой от новых функций.

    И они это успешно делают. Так .NET Framework 4.6 и DirectX 12 поддерживается только на Windows 10.
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    M0rg0t,

    RWL - можно просто рипнуть системный код. По ссылке на говнохабр чушь полная, автор той заметки даже не посмотрел как реализована апи, не смотря что это опенсорс:

    А там внезапно критическая секция, rwl и нужен что бы их не юзать:

    Код (Text):
    1. BOOLEAN
    2. RtlAcquireResourceExclusive(
    3.     IN PRTL_RESOURCE Resource,
    4.     IN BOOLEAN Wait
    5.     )
    6.  
    7. /*++
    8.  
    9. Routine Description:
    10.  
    11.     The routine acquires the resource for exclusive access.  Upon return from
    12.     the procedure the resource is acquired for exclusive access.
    13.  
    14. Arguments:
    15.  
    16.     Resource - Supplies the resource to acquire
    17.  
    18.     Wait - Indicates if the call is allowed to wait for the resource
    19.         to become available for must return immediately
    20.  
    21. Return Value:
    22.  
    23.     BOOLEAN - TRUE if the resource is acquired and FALSE otherwise
    24.  
    25. --*/
    26.  
    27. {
    28.     NTSTATUS Status;
    29.     ULONG TimeoutCount = 0;
    30.     PLARGE_INTEGER TimeoutTime = &RtlpTimeout;
    31.  
    32.     //
    33.     //  Loop until the resource is ours or exit if we cannot wait.
    34.     //
    35.  
    36.     while (TRUE) {
    37.  
    38.         //
    39.         //  Enter the critical section
    40.         //
    41.  
    42.         RtlEnterCriticalSection(&Resource->CriticalSection);
     

    Вложения:

    • Srw.7z
      Размер файла:
      1,8 КБ
      Просмотров:
      124
  7. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Но много чего отличается, правда. Вот свежий пример - интерфейс IDebugControl на ХР не работает, возвращает странные ошибки. На 64 битной работает, но это как бы немного другая ОС уже. А на обычной 32 бит - интерфейс есть, метод есть, а возвращает невнятные ошибки.
     
  8. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Емнип тот который идет с виндой просто заглушка, нужно использовать от Windbg.
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Давно думаю на его базе софтварный анклав сделать. Раз он на ХР не работает, то спец никаким визором не сможет его вскрыть))
     
    M0rg0t нравится это.
  10. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    ormoulu, на NT 5.2 и выше работает, там мб нет каких-то функций с WinDBG, но так то много чего есть (спасибо Rel за наводку).

    Rel, там странно так - вызываешь AttachProcess(), и он возвращает E_INVALIDARG ; пробовал реверсить , менять разные флаги, все бестолку. Видимо, в обычной ХР это не реализовали (как и 100500 вещей, указанных выше).
     
  11. Andrey333

    Andrey333 Member

    Публикаций:
    0
    Регистрация:
    30 янв 2020
    Сообщения:
    35