Dxgi.dll

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

dxgi.dll (расово верн. DirectX Graphics Infrastructure, надмозг. Инфраструктура графики DirectX) — культовая, былинная и несущая боль динамическая библиотека, живущая в недрах операционной системы Windows, начиная с версии Vista и заканчивая актуальными десятками и одиннадцатками. Для рядового пользователя, чей компьютерный кругозор ограничен ярлыком Доты и порнхабом, данный файл представляет собой загадочную херню, отсутствие которой вызывает экзистенциальный ужас и немоту, ибо любимая игрушка отказывается запускаться, выплевывая на экран страшные ругательства. Для красноглазиков и разработчиков игровых движков — это базовый слой абстракции, без которого современный графон был бы невозможен в принципе. Входит в стандартный пакет DirectX, является собственностью корпорации зла Microsoft и объектом лютого фапа любителей инжектить шейдеры во все поля.

Суть[править]

Чтобы понять, зачем нужен этот кусок кода весом в пару сотен килобайт, нужно совершить небольшой экскурс в историю, когда мониторы были толстыми, а школота не знала слова рейтрейсинг. В стародавние времена, когда миром правили Windows XP и DirectX 9, жизнь была проще, но архитектура графической подсистемы напоминала тарелку со спагетти, уроненную на пол. Direct3D 9 делал всё сам: и рисовал полигоны, и управлял окнами, и переключал разрешения экрана. Это приводило к тому, что драйверы видеокарт писались через задницу, а любой чих в сторону графического режима мог повесить систему намертво.

С приходом Висты (Longhorn, R.I.P.) мелкомягкие решили перепилить всё на корню. Они посмотрели на тот ужас, который творился в ядре XP, перекрестились и создали WDDM (Windows Display Driver Model). Чтобы Direct3D 10 не занимался херней типа перечисления мониторов, эту задачу вынесли в отдельную сущность. Так родился DXGI.

Фактически, dxgi.dll — это сутенер, который сводит вашу видеокарту (будь то божественная GeForce или нищебродская встройка от Intel) с операционной системой и запущенным приложением. Он отвечает за самые низменные, но необходимые вещи:

  • Enumeration: Перечисление видеоадаптеров. Именно dxgi сообщает игре, что у вас две видеокарты, и одна из них — бесполезный кусок кремния в процессоре.
  • Swap Chain: Цепочка буферов обмена. Святая святых. DXGI решает, какой кадр и когда будет выведен на ваш заляпанный монитор. Он управляет Back Buffer’ом и Front Buffer’ом, чтобы вы не видели, как отрисовывается каждая строка пикселей (хотя если выключить VSync, то увидите тиринг и dxgi тут не виноват).
  • Window Association: Тот самый Alt+Tab. DXGI контролирует переход из оконного режима в полноэкранный и обратно. Когда этот процесс глючит и игра сворачивается, но звук остается, а мышка пропадает — это DXGI поссорился с DWM (Desktop Window Manager).

Без dxgi.dll Direct3D 10, 11 и 12 просто не умеют разговаривать с железом на понятном языке, превращая мощный игровой ПК в тыкву, способную лишь гудеть вентиляторами.

Моддинг[править]

Однако есть у dxgi.dll и светлая, хотя и весьма специфическая сторона. Продвинутые юзеры, которым ванильная графика в Skyrim, GTA V или Cyberpunk 2077 кажется слишком унылой, знают этот файл как входные ворота в мир улучшайзеров. Речь идет о знаменитых библиотеках постобработки типа ENBSeries, ReShade, SweetFX или Special K.

Механизм Proxy DLL[править]

Механизм работы этих штук прост и гениален, как удар ломом. Это называется DLL Hijacking (в хорошем смысле) или Hooking.

  1. Моддер берет свою кастомную библиотеку, которая умеет накладывать шейдеры (Bloom, Ambient Occlusion, цветокоррекцию, от которой вытекают глаза, резкость а-ля наждачка).
  2. Называет этот файл dxgi.dll.
  3. Кладет его прямо в папку с `game.exe`.

При запуске игра, будучи тупой программой, следует стандартному порядку поиска DLL: сначала смотрит в текущую папку (о, dxgi.dll, привет!), а уже потом лезет в системные папки. В итоге игра подхватывает поддельный файл, думая, что это системный компонент.

Фейковый dxgi.dll перехватывает вызовы `CreateSwapChain` и `Present`, накладывает свои эффекты, делая картинку как в кино (или как в кислотном трипе, тут уж как повезет с пресетом), а затем передает управление настоящему системному файлу из System32. Этот метод позволяет творить чудеса с играми, разработчики которых положили болт на графику. Именно благодаря этому мы имеем тысячи скриншотов, где старая добрая GTA San Andreas блестит, как намазанная маслом лысина Брюса Уиллиса, а лужи отражают всё, вплоть до комплексов игрока.

Пацаны, поставил ENB, переименовал dxgi.dll, теперь вместо игры черный экран и звук ошибки Windows. Но зато видеокарта греется, значит работает!
— комментарий в паблике по моддингу

Конфликты[править]

Часто случается так, что юзер хочет и ENB, и ReShade одновременно. Оба хотят называться `d3d11.dll` или `dxgi.dll`. Начинается танец с бубном: один файл переименовывается в `dxgi.dll`, другой в `d3d11.dll`, в конфигах прописываются прокси-библиотеки… В итоге игра крашится при запуске, потому что оверлей Steam подрался с оверлеем Discord, а те вместе запинали ReShade, который пытался хукнуть DXGI.

Античиты[править]

Обратная сторона медали — античиты. Системы защиты в онлайн-играх (всякие BattlEye, Easy Anti-Cheat, Vanguard) люто ненавидят, когда кто-то подменяет системные библиотеки. Для них любой левый dxgi.dll в папке с игрой — это потенциальный Wallhack, ESP или Aimbot.

Логика античита проста: Ты подменил системный файл, перехватываешь рендеринг? Значит, можешь рисовать квадратики вокруг голов врагов. В БАН!. Поэтому любители сделать картинку поконтрастнее в мультиплеерных шутерах (например, в PUBG или Apex Legends) часто улетают в перманентный бан, после чего бегут на форумы рассказывать прохладные истории о том, что я ничего не юзал, это просто Решейд, разбаньте, админы козлы.

Хотя некоторые игры официально разрешают ReShade (вайтлистят подпись файла), любое обновление античита может превратить вас из честного графодрочера в грязного читера за секунду.

Техническая порнография[править]

Если заглянуть под капот через IDA Pro, то dxgi.dll экспортирует кучу функций с зубодробительными названиями вроде `CreateDXGIFactory2`, `IDXGISwapChain::Present1` и прочую COM-ересь. Самая мякотка заключается во взаимодействии с драйверами.

DXGI эволюционировал вместе с Windows:

  • DXGI 1.0 (Vista): База. Умел создавать Swap Chain и перечислять адаптеры. Часто вызывал BSOD при кривых драйверах.
  • DXGI 1.1 (Win 7): Добавили `Synchronized Shared Surfaces`. Теперь Direct3D 10 и 11 могли дружить.
  • DXGI 1.2 (Win 8): Появился Flip Model. Это революция. Раньше использовался `BitBlt` (тупое копирование памяти), что было медленно и жрало батарею. Flip Model позволяет просто перебрасывать указатели на видеопамять. Меньше задержка, больше FPS, меньше тиринга в оконном режиме.
  • DXGI 1.3 — 1.6 (Win 8.1 — Win 10/11): Поддержка Multi-plane Overlays (MPO), переменной частоты обновления (VRR, G-Sync, FreeSync), HDR (High Dynamic Range) и широкого цветового охвата. Теперь черный цвет действительно черный, а белый выжигал сетчатку, если у тебя есть монитор за 100500 денег.

TDR[править]

DXGI тесно связан с механизмом TDR (Timeout Detection and Recovery). Когда драйвер видеокарты зависает (потому что ты переразгнал свою GTX 1060, надеясь получить производительность RTX 5090), DXGI это видит. Если драйвер не отвечает 2 секунды, DXGI говорит ядру винды: Шеф, всё пропало!. Раньше (в XP) это был синий экран смерти (BSOD). Теперь экран гаснет, потом мигает, и появляется сообщение: Видеодрайвер перестал отвечать и был успешно восстановлен. Скажите спасибо DXGI, что вам не пришлось жать кнопку Reset и терять несохраненный курсовик.

App.png Весьма полезная вещь, позволяет машинам работать с помощью коммандычей
МетаПрограммаDRM (SecuROMStarForceАналоговая дыра) • БагБот (Автоответчик) • Варез (Repack) • ГлюкГуйДонатКопирайт (By design) • ЛогНюкРут (Не работай под рутом) • Спортивное программированиеМегапиксельКомпьютерВерсия 2.0КодОбфускацияСкриншотДатамайнПлагинТекстовый файлБольшие данныеАльфа и бета-тестыТаймстампКэшШаблоныHello WorldНейросетиФайлИнсталляцияВидеоМощный сбой Microsoft 19 июля 2024 годаCrowdStrikeПроект GNUUserscriptDxvkVkd3dБратан хорош давай давай впередКонечный автоматLumenЗаступник (приложение)NeeUnreal MCPОптимизацияДрайверТестированиеТройная буферизацияQBitTorrentСинтезаторОбрыв загрузки файла на 99%Polycount.comГрок написал программу о себеВредоносTamTamАппликацио
ФичиБагрепорт12309BSODCookiesEmbrace, extend and extinguishFL StudioSheep.exeWinlogon.exeБубенЗащита от дуракаКостыльМашинный переводПасхальное яйцоСвистелки и перделкиСм. рис. 1Съешь ещё этих мягких французских булокTermuxGNU MetroИндусский кодНескучные обои • Сжатие (За сжатие ДжипегаШакалШкала) • Работает — не трогайРандомайзерPDF (Распознавание PDF) • Дело Google в ФАСЧат-ботXMLМакросКритическая ошибкаФреймворкСинонимайзерSourceТрёхмерное отслеживаниеТрассировка фотоновHZB OcclusionДаунгрейд RTX 4070TressFXАвтопереводчикVSCodiumThorium BrowserShovelwareФайл подкачкиTea Dating AdviceSingle-Page ApplicationАптаймSafenSoft SysWatchМолния (мессенджер)C SharpОбновлениеOneDriveChatGPT AtlasVoice Over Translation
ВредоносноеБотнетБрутфорсВинлокЗвонилкаКитайские пингвиныПиксель смертиТроянЧервь МоррисаBonziBuddyMediaGetBrowser hijackingTinderМиссис МажорУтечка буфера обменаWin 10 TweakerОпараш Mozilla FirefoxЯндекс.МузыкаКрэкерБезопасность через умолчаниеGrifter.aviTrojan.Winlock.DeathМиссис МажорСредаDirectStorageDriverpackГенератор случайных чиселDisable Core 0РомхакингDDrawCompatWingetCreateWinGetCoowonЯндекс МессенджерVCPkgSELinuxXfireYouTube Auto-ResumeTape OperatorBotFatherMTProtoSignalDoubleClickFixGiteeБотофермаMalwareCeno BrowserLagoFastYouareanidiot
КомпанииApple / Apple (AppleScript) • GoogleMicrosoftSAPЯндексExiled Exchange 2BraveAdNauseamСкурвление FirefoxCafe BazaarAMD FEMFXPPSSPPАвтохукQuick machine recoveryПутинский мессенджер MAXBypassNROWizTreeJTubeGallium NineFalconRu-WireGuardМобильное приложениеWebRenderСмс-бомберInstaller-SHProton GEProcess LassoParkControlDolby AccessDevToolsDxWrapperБойкот мессенджера MaxFirejailLenzaБезопасность мессенджера MAXЦифровое гетто ГабенаQuasarRATGame MakerБрайан ЛандукСтарые форматы видеофайловMAX в школахdom.storage.default_quotaVirtualBoxArdourFluttereXpress
ЛюдиВеб-мастерLovinGODБалмерГейтсГенерал ФейлорДжобсМитникПоттерингде РаадтСпольскиСтоллманТорвальдсШахиджанянAche666Марк ЦукербергЕвгений ПоповДенис КумпонМассовая компьютерная безграмотностьKomet ClientРеверс-инжинирингКроссплатформенностьDKMSАмигоAURWhiteMAXHyPrismСферумJiraTampermonkeyTauriSoroush PlusWondershareOpenCutВзлом Denuvo через гипервизорHex-редакторГипервизорX64dbgЮникодNiri
Команды^H^WAlt+F4Ctrl+Alt+Delman/me/quitrm -rfRubikaГовнософтШпионское ПОАрхиваторДемон (программа)ClickHouseImo.imСкрытые функции мессенджера МаксBuildin.AIRoot (программа)VLC Media PlayerSpacebarTeamSpeakSlackWeeekNotionDxgi.dllFluxerPinokioТелега (программа)AnytypeВиртуальная машинаSaaSВсирание ИИ в программыAdobe AcrobatAdobe Premiere Pro