Навеяно темой про ХР. Возможно, где-то на уровне ядра все осталось почти такое же, но на прикладном уровне различия ХР и той же Висты весьма заметны. И программируя, приходится или делать костыли или две версии, или что. Потому в висте и дальше добавили немало хороших , полезных апи, которые как бы хочется использовать, но не всегда возможно из-за ретроградов. Навскидку. 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/ кому лень читать, то разная ерунда работает на виста и выше. Про ядро ничего не скажу , мб и там поменяли, а мб и нет.
SMEP, изоляция типов, графическая/оконная подсистема заточенная на dwm, сетевую подсистему вообще с нуля переписали, и это только навскидку.
asmlamo, не актуальна, но именно в висте были заложены все эти новые возможности (начиная с юак, интегрити и так далее). Дальше они уже допиливались.
То, что многое добавляют - это довольно логично и правильно. Но я бы вопрос рассматривал в другой плоскости: какому количеству софта такие уберфичи нужны так что он отказывается от поддержки 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.
M0rg0t, RWL - можно просто рипнуть системный код. По ссылке на говнохабр чушь полная, автор той заметки даже не посмотрел как реализована апи, не смотря что это опенсорс: А там внезапно критическая секция, rwl и нужен что бы их не юзать: Код (Text): BOOLEAN RtlAcquireResourceExclusive( IN PRTL_RESOURCE Resource, IN BOOLEAN Wait ) /*++ Routine Description: The routine acquires the resource for exclusive access. Upon return from the procedure the resource is acquired for exclusive access. Arguments: Resource - Supplies the resource to acquire Wait - Indicates if the call is allowed to wait for the resource to become available for must return immediately Return Value: BOOLEAN - TRUE if the resource is acquired and FALSE otherwise --*/ { NTSTATUS Status; ULONG TimeoutCount = 0; PLARGE_INTEGER TimeoutTime = &RtlpTimeout; // // Loop until the resource is ours or exit if we cannot wait. // while (TRUE) { // // Enter the critical section // RtlEnterCriticalSection(&Resource->CriticalSection);
Но много чего отличается, правда. Вот свежий пример - интерфейс IDebugControl на ХР не работает, возвращает странные ошибки. На 64 битной работает, но это как бы немного другая ОС уже. А на обычной 32 бит - интерфейс есть, метод есть, а возвращает невнятные ошибки.
Давно думаю на его базе софтварный анклав сделать. Раз он на ХР не работает, то спец никаким визором не сможет его вскрыть))
ormoulu, на NT 5.2 и выше работает, там мб нет каких-то функций с WinDBG, но так то много чего есть (спасибо Rel за наводку). Rel, там странно так - вызываешь AttachProcess(), и он возвращает E_INVALIDARG ; пробовал реверсить , менять разные флаги, все бестолку. Видимо, в обычной ХР это не реализовали (как и 100500 вещей, указанных выше).
Начиная с Vista появился WFP (Windows Filtering Platform). Технология для фильтрации в сети. User mode: Windows Filtering Platform Kernel mode: Introduction to Windows Filtering Platform Callout Drivers