ntdll vs. kernel32

Тема в разделе "WASM.WIN32", создана пользователем mix_mix, 29 июн 2006.

  1. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Мне интересно, есть вообще смысл писать приложения (без GUI естесно) используя исключительно функции ntdll.dll, структуры UNICODE_STRING etc. вместо вместо всем известных функций из kernel32.dll, advapi32.dll etc.

    Вообще повысившаяся скорость (и намного она повысится?) оправдает чрезвычайную трудность разработки :) ?

    З.Ы. Ну не приходят мне в голову нормальные топики, только дурацкие лезут :)
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine


    Обычно в таких случаях возникает вопрос о совместимости, а трудностей никаких я и близко не вижу. Также не ясно почему "без GUI естесно".
     
  3. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва


    Трудность я вижу только в том, что надо запомнить всяки nt zw перед названиями функций, да и функций поболее =)

    И ответь сам себе на вопрос: "как измениться производительность, если я напишу прогу 'Hello, world!' на Delphi, а потом тоже самое на MASM32?"
     
  4. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    Трудностей особых нет, но в большинстве случаев нет смысла, потому что обычные неNative функции не такие медленные, если их отдизасмить и посмотреть последовательность вызовов. В большистве случаев неNative функции сделаны как раз для удобства программирования. А вот передти с ASCII на UNICODE - это реально даст прирост в скорости, потому что в NT/2000/XP все ASCII параметры перекодируются в UNICODE(за исключением некоторых, например GetProcAddress). И как сказал Quantumпроблемы с совместимостью действительно могут появиться, так что лучше не рисковать или сразу ориенироваться на возможные проблемы. Но эта действительно дает хорошие результаты при реализации техник системного программирования(например узнать информацию об описателе).
     
  5. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640


    Моно поподробне? A то у мя тут прога написано почти на чистом ntdll, могут быть проблемы на других версиях NT ?

    Собственно я и взялся написать на ntdll, чтоб пахала на всех NT виндах.
     
  6. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    Flasher

    Дело в том, что Microsoft официально через свою документацию поддерживает интерфейс Windows API. Но иначе обстоит дело с Native API - ntdll.dll - так как Microsoft не документирует эти функции, то автоматически она оставляет за собой право модифицировать их - менять параметры или вообще исключить функцию из Native API. В одим прекрастных момент ваша программа скажет "Не найденная указанная процедура в библиотеке NTDLL.DLL"
     
  7. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Вот с UNICODE - это да, это может дать прирост быстродействия.

    А как же, например, NtQueryDirectoryFile вместо FindFirstFile/FindNextFile - нативная гораздо быстрее выполнится.

    А насчет совместимости - у меня есть html-ка с адресами всех функий всех NT-систем. Тоесть если в какой-то системе этой функции не было, то это там показано.

    [​IMG] 412240491__syscalls.rar
     
  8. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    mix_mix



    Конечно, даст. Если ориентироваться только на NT, то имеет смысл переходить на юникод. В вижуале для этого специально глобальная директива предусмотрена.





    Почему это гораздо быстрее???, ведь FindFirstFileExW именно NtQueryDirectoryFile и вызывает. А если файл уже найден, то не вызывает, так что в лучшем случае может оказаться даже быстрее.





    Ну и что? В MS могут наплевать на эту html-ку и в следующей NT что-нибудь поменять.
     
  9. d4rkeagle

    d4rkeagle Алексей Шпунсель

    Публикаций:
    0
    Регистрация:
    3 мар 2006
    Сообщения:
    66
    Адрес:
    Тайланд
    mix_mix:



    на счет использования native api, то тут широкие возможности, нежели с Windows API, советую почитать книгу Undocumented Windows 2000 Secrets. в ней описано многое. а на счет совместимости, то это "больной" вопрос действительно.
     
  10. win32_kernel

    win32_kernel New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    23
    Адрес:
    Russia
    Чтобы небыло проблем с совместимостью, можно проверять версию ОС, и в соответствии с ней решать использовать Native-оптимизацию или нет.
     
  11. The_Lord_Impaler

    The_Lord_Impaler New Member

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    3
    Адрес:
    Russia
    Ну нет смысла забивать гвозди микроскопом. w32 api все-равно в итоге вызывает соответсвующие процедуры из ntdll.

    Обратная совместимость, все дела.

    Но если уж так хочется, вариант в стиле "садомазо" - sysenter\int 2eh, ага. :)
     
  12. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    The_Lord_Impaler

    :)))

    Короче, как я понял основные функции - не стоит, всякие вкусности, вроде NtShutdownSystem - можно, а из основных функций использовать только юникод варианты.
     
  13. win32_kernel

    win32_kernel New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    23
    Адрес:
    Russia
    Бывают случаи, когда сами гвозди микроскопические. И чем их тогда забивать?



    To mix_mix:

    Если функции недокументированы, то MS в следующей версии может вообще засунуть их в другую dll. Это вспомогательные функции, и никто не должен о них знать :) .
     
  14. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Или пользователю просто не положено о них знать, пример - NtLoadDriver. Сразу обходит все защиты, менеджеры, понаставленные всюду МракоСофт.

    Что засунут в другую dll - врядли, как была ntdll, так ею и останется (не может изменится на какую-нибудь dotnetkernel.dll)
     
  15. The_Lord_Impaler

    The_Lord_Impaler New Member

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    3
    Адрес:
    Russia
    mix_mix

    Да да, правильно понял. :)



    win32_kernel

    Про микроскопические гвозди речи не шло. :)
     
  16. geroin.vxd

    geroin.vxd New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2006
    Сообщения:
    11
    Господа, может кто нибудь привести аналогию NtQuerySystemInformation из неNativeAPI? Что то затрудняюсь. Вот к примеру преимущество. На счет UNICODE тоже большой прирост, системе не приходится тратить время на бесполезные преобразования. Да и вообще должно быть понятно - чем глубже - тем быстрее. А ntdll.dll по идее функции практически не экспортирует, как известно она являет собой переходники к NativeAPI ядра, из чего можно сделать недвусмысленный вывод...
     
  17. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    У NtQuerySystemInformation нет прямого аналога из обычных апи.
    К этой функции обращается целая толпа апи, собирающих системную информацию, и являющихся обертками для вызова NtQuerySystemInformation с тем или иным классом информации. Например, Module32First/Next, Process32First/Next и т.д.
     
  18. geroin.vxd

    geroin.vxd New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2006
    Сообщения:
    11
    О том и речь, единственный минус Native - M$ может поменять что либо и не сказать об этом. А в остальном лично я предпочитаю использовать именно NativeAPI, т.к. это более рационально, а местами и более удобно. Кстати, привыкнув к UNICODE, ANSI будет казаться недоделанным атавизмом.
     
  19. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Более удобно - вызвать FindFirstFile вместо NtQueryDirectoryFile с тучей параметров :)