Здравствуйте Андрей, Вы писали:
А>Здравствуйте old Dutchman, Вы писали:
А>skip
А>Вообще-то в User32.dll полно таких функций и к тому же документированных (см., например CharLower), так что не стоит огород городить
Ты не прав. В ntdll.dll содержится огромное кол-во прекрасных функций. Там практически вся CRT. Я даже пытался сравнивать код из msvcrt.dll.
Я не виду практической ценности в использовании функций ntdll.dll вместо msvcrt.dll, хотя полазить, посмотреть, конечно, очень было интересно.
Здравствуйте old Dutchman, Вы писали:
OD>Эта дрянь скорее всего будет медленно работать, но для тех задач, где необходимо отказаться от CRT и всякой дрянь вполне сгодится
Вызов функции tolower выполняется за время от 600 до 1100 тактов. Что есть довольно много.
Для тесктовой работы не годится, но вполне годится для того, чтоб разобрать командную строку
skip
А>Ты не прав. В ntdll.dll содержится огромное кол-во прекрасных функций. Там практически вся CRT. Я даже пытался сравнивать код из msvcrt.dll.
Ну, содержится, и дальше что? Сегодня они там есть, завтра — нет. Никто не гарантирует, что в следующей версии Windows все будет точно также как сейчас. А>Я не виду практической ценности в использовании функций ntdll.dll вместо msvcrt.dll, хотя полазить, посмотреть, конечно, очень было интересно.
Здесь я с тобой отчасти согласен. Если ты пишешь большой продукт, состоящий из кучи компонентов, то лишняя пара-тройка мегов роли не играет, а если ты пишешь мааааленькую утилитку, совсем не хочется тащить за собой половину CRT из-за двух-трех функций. Но для обхода этих трудностей есть более элегантные пути, чем использование недокументированных функций из NTDLL и иже с ней.
хъ
А>Ну, содержится, и дальше что? Сегодня они там есть, завтра — нет. Никто не гарантирует, что в следующей версии Windows все будет точно также как сейчас.
[]
ntdll.dll такая же библиотека как и все остальные. Просто не документированная. Ею можно пользоваться совершенно спокойно. MS наврядли будет менять в ней что-нибудь, т.к. это вызвало бы перепись огромных масс кода.
Здравствуйте Андрей, Вы писали:
А>Вообще-то в User32.dll полно таких функций и к тому же документированных (см., например CharLower), так что не стоит огород городить
Да дело не в CharLower. Мне нужны ВСЕ функции строковые !
Задача — написать на С программу под NT размером в 10К максимум.
Здравствуйте Алекс, Вы писали:
А>>Вообще-то в User32.dll полно таких функций и к тому же документированных (см., например CharLower), так что не стоит огород городить
А>Ты не прав. В ntdll.dll содержится огромное кол-во прекрасных функций. Там практически вся CRT. Я даже пытался сравнивать код из msvcrt.dll.
А>Я не виду практической ценности в использовании функций ntdll.dll вместо msvcrt.dll, хотя полазить, посмотреть, конечно, очень было интересно.
Здравствуйте Андрей, Вы писали:
OD>>Задача — написать на С программу под NT размером в 10К максимум.
А>Как вариант (copyright VladD2) — использовать Automation API
skip
А>>Как вариант (copyright VladD2) — использовать Automation API
OD>А это как ?
А это через VARIANT (типа VariantChangeType и т.п.) — геморрой тот еще и тоже довольно медленно, зато избавишься от CRT
Но я лично рассматриваю это как шутку
Здравствуйте Алекс, Вы писали:
А>Здравствуйте old Dutchman, Вы писали:
А>хъ
OD>>А на NT40 без сервис паков есть такое ? Я просто не знаю, и нет возможности проверить
А>90% что есть.
А как насчет ее версии? Никто ведь не гарантирует, что там не старая версия — так что лучше ее с собой таскать
Здравствуйте Алекс, Вы писали:
OD>>А на NT40 без сервис паков есть такое ? Я просто не знаю, и нет возможности проверить
А>90% что есть.
Было бы 100 — я бы не потел над этим
Здравствуйте Андрей, Вы писали:
OD>>>А на NT40 без сервис паков есть такое ? Я просто не знаю, и нет возможности проверить
А>>90% что есть.
А>А как насчет ее версии? Никто ведь не гарантирует, что там не старая версия — так что лучше ее с собой таскать
skip
А>>А как насчет ее версии? Никто ведь не гарантирует, что там не старая версия — так что лучше ее с собой таскать
OD>!!! Опаньки... OD>Мне это не надо !
Здравствуйте Андрей, Вы писали:
А>А это через VARIANT (типа VariantChangeType и т.п.) — геморрой тот еще и тоже довольно медленно, зато избавишься от CRT А>Но я лично рассматриваю это как шутку
А>А лучше почитай статью Виталия Брусенцева
OD>Эта дрянь скорее всего будет медленно работать, но для тех задач, где необходимо отказаться от CRT и всякой дрянь вполне сгодится
Тогда тебе прямая дорога к книге Свен Шрайбер "Недокументированные возможности Windows 2000" — к стати о возможности экспорта этих функций там написанно
#pragma comment(linker,"defaultlib:ntdll.lib")
к статит в этой книге есть специальный заголовочный фал для этого w2k_def.h давай мыло вышлю, если будушь юзать его в режиме user-mode ставь
#define _USER_MODE
Здравствуйте old Dutchman, Вы писали:
OD>Да дело не в CharLower. Мне нужны ВСЕ функции строковые !
OD>Задача — написать на С программу под NT размером в 10К максимум.
В ntdll.dll нет по понятным причинам printf, так что ее использование может обломиться, если это надо.
В остальном — тот же самый CRT, причем, это есть во всех NT-системах, а msvcrt только вроде с sp3 или sp4.
И нифига они не меняются и не пропадают, короче, решайте сами, и ничуть они не медленнее чем в msvcrt.
Но на самом деле, я их обычно не использую, если задача не стоит обойтись только ntdll.dll, а юзаю msvcrt, если у юзера стоит система без нее — значит он виноват только сам, что вовремя не проапгрейдился до нужного sp, и это значит, что еще бог знает какие глюки у него будут, рабочей NT-ей советую считать машину с sp5 и выше.
А, в принципе, если указать юзать именно msvcrt.lib, то уложиться в 10 кил абсолютно реально, у меня есть набор своих мелких утилиток, они порядка 3-х кил занимают, ну пять, но в них прямо линкуется msvcrt (собственно, для printf-а).
Например, прога, которая устанавливает любого владельца файла, она и файл открывает/закрывает, и привилегии себе нужные берет (RtlAdjustPrivilege), и LookupAccountName вызывает, и две Rtl-функции из ntdll.dll юзает (чтоб в SD SID воткнуть и чтоб создать его) и ZwSetSecurityObject для самой установки — короче, все в одном флаконе — и пожалуйста, 3584 байта.
Прога, которая вырубает NT-систему, около 2 кил вообще получилась, естественно, и та и другая используют printf (без него они совсем крошечные бы были).
W>Тогда тебе прямая дорога к книге Свен Шрайбер "Недокументированные возможности Windows 2000" — к стати о возможности экспорта этих функций там написанно W>#pragma comment(linker,"defaultlib:ntdll.lib")
W>к статит в этой книге есть специальный заголовочный фал для этого w2k_def.h давай мыло вышлю, если будушь юзать его в режиме user-mode ставь W>#define _USER_MODE W>
Здравствуйте Andrew S, Вы писали:
AS>Кстати, для того, чтобы была ntdll.lib, надо поставить NT DDK (2000) или натравить на ntdll.dll implib.
AS>А книжечку Свена Шрайбера очень рекомендую. СтОящая вещь. AS>Успехов.
Здравствуйте masta, Вы писали:
M>Здравствуйте Andrew S, Вы писали:
AS>>Кстати, для того, чтобы была ntdll.lib, надо поставить NT DDK (2000) или натравить на ntdll.dll implib.
AS>>А книжечку Свена Шрайбера очень рекомендую. СтОящая вещь. AS>>Успехов.
M>А где её можно купить ???
В любом магазине — называется "Недокументированные возможности Windows 2000"
Здравствуйте vasketsov, Вы писали:
V>Здравствуйте old Dutchman, Вы писали:
OD>>Да дело не в CharLower. Мне нужны ВСЕ функции строковые !
OD>>Задача — написать на С программу под NT размером в 10К максимум.
Я делал так:
1) компиляем прогу в asm файл. (ключ Fa если я не ошибаюсь)
2) компиляем получившийся asm файл в obj.
3) линкуем его со всеми либами. при этом, надо использовать link 5-ой версии. (это самый простой способ)
после этого размер проги очень сильно уменьшается. кроме того можно посмотреть на опцию линкера /align она тоже позволит уменьшить размер файла. правда после этого будут проблемы с запуском проги под win9x, но это уже детали.
Здравствуйте Whisperer, Вы писали:
W>Здравствуйте old Dutchman, Вы писали:
OD>>Привет !
OD>> OD>>Обнаружил, что в NTDLL есть масса функций полезных, особенно строковых
OD>>
OD>>Эта дрянь скорее всего будет медленно работать, но для тех задач, где необходимо отказаться от CRT и всякой дрянь вполне сгодится
W>Тогда тебе прямая дорога к книге Свен Шрайбер "Недокументированные возможности Windows 2000" — к стати о возможности экспорта этих функций там написанно W>#pragma comment(linker,"defaultlib:ntdll.lib") W>к статит в этой книге есть специальный заголовочный фал для этого w2k_def.h давай мыло вышлю, если будушь юзать его в режиме user-mode ставь W>#define _USER_MODE W>
Здравствуйте RS, Вы писали:
OD>>Обнаружил, что в NTDLL есть масса функций полезных, особенно строковых
RS>Да там нестроковые гораздо интереснее. Я там как-то обнаружил аналог OpenThread (та, что только в Win2K) — так в ntdll она есть уже в NT4!