1. Си / Говнокод #21840

    −107

    1. 1
    2. 2
    https://msdn.microsoft.com/en-us/library/windows/desktop/hh802935(v=vs.85).aspx
    https://ru.wikipedia.org/wiki/MinWin

    Что вы думаете за Windows API Sets?

    tl;tr; таков:
    В виндуосе Win32API было раскидано по куче всяких DLL совершенно безумно (гуевые и не гуевые функции, всё вперемешку). Было решено отрефакторить всё, но чтобы не сломались программы которые динамически линковались на всякие Kernel32.dll, было решено нахучить фейковых .DLLок, название которых отражает конкретный API.

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

    Например GetTempPathW теперь нужно искать в api-ms-win-core-file-l1-2-0.dll
    На моей винде она реально лежит в kernel32.GetTempPathW , но на другой может и переехать.

    Охуенно же, нет?

    <Exports Table>:
    Name: api-ms-win-core-file-l1-2-0.dll
    Characteristics: 00000000
    TimeDateStamp: 5642BABF -> Wed Nov 11 06:49:19 2015
    Version: 0.00
    Ordinal base: 00000001
    # of functions: 00000004
    # of Names: 00000004

    Entry Pt Ordn Name
    000010DC 1 CreateFile2 (forwarder -> kernel32.CreateFile2)
    000010FE 2 GetTempPathW (forwarder -> kernel32.GetTempPathW)
    00001136 3 GetVolumeNameForVolumeMountPointW (forwarder -> kernel32.GetVolumeNameForVolumeMountPointW)
    00001182 4 GetVolumePathNamesForVolumeNameW (forwarder -> kernel32.GetVolumePathNamesForVolumeNameW)

    Запостил: bayan, 15 Декабря 2016

    Комментарии (19) RSS

    • seoпост: #виндуос, #сишечка, #API,
      Ответить
    • Близится конец света, вот и майкрософт тоже подгнивает...
      Последняя годная винда была под номером семь. Дальше - приглушенный свет в конце тоннеля.
      Посту -плюс.
      Ответить
    • Так же можно пакетный менеджер для сишки нахерачить!
      Ответить
      • 5 uv_run (forwarder -> https://github.com/libuv/libuv:uv_run)
        Ответить
        • forwarder -> http://rapidshare.de/I/forgot/that/fucking/scheme/
          Ответить
          • Сенсация! Win32 написана на хаск На самом деле это ImpEx -- плагин такой к фару их так рисует
            Ответить
    • > В виндуосе Win32API было раскидано по куче всяких DLL совершенно безумно (гуевые и не гуевые функции, всё вперемешку).

      например?

      вынь апи всегда линковалось через kernel32/user32/gdi32. кернел был кернел. юзвер - гуи (окна и контролы). гди - графика (DC и друзья). для доп функций были нужны другие библиотеки - shell, ole, crypto - но они к "Win32API" как бы и не относились.
      Ответить
      • давно тебя не видно было, я скучал
        Ответить
        • ... забыл пароль - на новом лэптопе в офисе залогинится не могу.
          Ответить
      • Неверно выразился: не столько "в кучу", сколько огромными бандлами.

        Например у меня Kernel32.dll экспортирует GetDllDirectory -- то-есть как-бы не зависит от юзеринтерфейса (функция то чисто утилитарная) а еще она экспортирует Console API, включая GetNumberOfConsoleMouseButtons, что немного не из той области.

        А user32.dll экспортирует функции для DDE (DDE abadon transaction) и функцию CharLowerA (строки) и WindowFromDC (окна).

        Тоже самое творится в Advapi32 который экспортит функции для ACL и для (внезапно) WMI.

        Или вот есть циклическая зависимость:
        RPC4RT (remote procedure call) импортит sspicli.dll (всякие GetUser), а тот импортит его обратно !

        на XP User32 и GDI32 импортируют ДРУГ ДРУГА (хочешь user32? а вот тебе GDI в довесок)

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

        Именно так и появился MinWin, в рамках которого и начался рефакторинг.
        Ответить
        • > Или вот есть циклическая зависимость:

          эти библиотеки это по большей часит интерфейс к кернелу/апи - а не его реализация. ты же не думаешь что вся графика помещается в 200к - или сколько она там сегодня весит - gdi32?

          точно так же и с кернел32: да, какие-то функции он реализует (напирмер принтф, лол), он все остально форвадится кернелу (локи, управление памятью), драйверам, файловой системе и прочему.

          > на XP User32 и GDI32 импортируют ДРУГ ДРУГА (хочешь user32? а вот тебе GDI в довесок)

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

            >>напирмер принтф, лол
            При том что у винды есть ОТДЕЛЬНАЯ сирантайм, которых еще 15 видов: по одному из каждой студии, и у меня они все стоят, потому что каждая нужна какой-то программе.

            Правда в десятке они сделали вроде единую (ucrtbase) которая не меняется (слава богу printf не сильно зависит от компилятора)

            >>и отделить окна от графики почти не возможно.
            Ну вот есть же Server Core. Подозреваю что там работают только консольные приложения (хотя это конечно тоже GUI, не текстовый режим же). Админы там фигачат в павершеле, и все это сильно меньше весит, и сильно меньше глючит (ну, во всяком случае так говорит Microsoft).

            Без API Sets могло бы такое и не получиться.
            Ответить
        • > По-этому даже самая маленькая программа обычно зависела от всех этих чудесных библиотек, и собрать "маленькую винду без всего лищнего" было очень сложно.

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

          или другими словами: уже 10+ лет никто на сыром вынь апи ничего серьёзного не пишет. мелкие тулзы еще можно - все остальное - это просто пустая трата времени.
          Ответить
          • >>глупости.
            Это не ко мне, это к Руссиновичу и авторам Core Server и концепции MinWin.

            >>и кроме как мазохизмом
            Дада, WinProc, WM_ENABLE, вот это всё.

            >>уже 10+ лет никто на сыром вынь апи
            Согласен. Не понятно только как это связано с предыдущей фразой
            Ответить

    Добавить комментарий