ntdll.dll и kernel32.dll - Реальные примеры работы на vb6

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

ntdll.dll и kernel32.dll - Реальные примеры работы на vb6

Сообщение Rody66 » 17.09.2011 (Сб) 1:20

Копался, копался по форуму и наткнулся на всевозможные вызовы апифункций из недокументированной дллки ntdll.dll. Учитывая то, что эта длл непосредственно связанна с ядром (или и есть ядро, точно я так и не выяснил, в инете четких определений этой библиотеки я не нашел, кстати был бы рад услышать), и используя функции оной, можно совершать определенные действия на так сказать "самом низком уровне", то есть действовать на уровне ядра (я так понимаю, антивирусы, фаерволлы, крутые мониторы процессов как раз с этой дллкой в основном и работают). В той же теме, где я узнал о существовании ntdll.dll и ее недокументированных ф-ций, была и парочка линков на сайты, на которых большинство этих функций и описано, а также кто-то выложил несколько модулей для вб6, в которых объявляется не малое количество функций, видимо, для последующих манипуляций с ними. Но проблема в том, что в вышеупонятых исходниках нет ни одного примера работы с Native API, а на сайтах, описывающих функции ntdll.dll , примеры использования представлены на Си, который для меня как китайский, и понять оттуда что-либо для меня не представляется возможным. В итоге, как объявлять большинство ф-ций мне известно, а вот как использовать - нет. В идеале хотелось бы увидеть готовый проект с неоднократным использованием Native API, либо же лицезреть несколько примеров использования, например таких функций:
NtCreateKey, NtOpenKey, NtCreateFile, NtReadFile, NtWaitForSingleObject

Коды объявления большинства вышеуказанных функций:
Код: Выделить всё
'NtCreateKey
Private Declare Function NtCreateKey Lib "ntdll.dll" (KeyHandle As Long, ByVal DesiredAccess As Long, _
                ObjectAttributes As OBJECT_ATTRIBUTES, ByVal TitleIndex As Long, Class As Any, _
                ByVal CreateOptions As Long, Disposition As Long) As Long
'NtOpenKey
Private Declare Function NtOpenKey Lib "ntdll.dll" (KeyHandle As Long, ByVal DesiredAccess As Long, _
                ObjectAttributes As OBJECT_ATTRIBUTES) As Long
'NtCreateFile
Public Declare Function NtCreateFile Lib "ntdll.dll" (ByRef hFile As Long, _
                ByVal dwDesiredAccess As Long, _
                objAttr As OBJECT_ATTRIBUTES, _
                ByVal pPIO As Long, _
                ByVal pAllocSize As Long, _
                ByVal fileAttr As Long, _
                ByVal shareAttr As Long, _
                ByVal Disposition As Long, _
                ByVal Options As Long, _
                pEABuvver As Long, _
                ByVal EaLenght As Long) As Long
' Объявление NtReadFile и NtWaitForSingleObject у меня, к сожалению, не имеется.

Инет я на эту тему, разумеется, облазил, и именно по бейсику ничего не нашел.
Заранее благодарен за помощь.
Последний раз редактировалось Rody66 17.09.2011 (Сб) 1:28, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: ntdll.dll и kernel32.dll - Реальные примеры работы на vb

Сообщение Хакер » 17.09.2011 (Сб) 1:28

Rody66 писал(а):связанна с ядром (или и есть ядро, точно я так и не выяснил, в инете четких определений этой библиотеки я не нашел, кстати был бы рад услышать

Это в основном сборник переходников, которые переводят выполнение в режим ядра.

Rody66 писал(а): использую функции оной, можно совершать определенные действия на так сказать "самом низком уровне", то есть действовать на уровне ядра

Не на низком уровне, не на уровне ядра, а просто без посредников.

Rody66 писал(а):я так понимаю, антивирусы, фаерволлы, крутые монитры процессов как раз с этой дллкой в основном и работают

Нет, крутые не работают с ntdll.dll, крутые имеют непосредственно свой драйвер в ядерном пространстве.

Rody66 писал(а):на Си, который для меня как китайский

Вот эту проблему и нужно исправлять.

Rody66 писал(а):ибо же лицезреть несколько примеров использования, например таких функций:

NtCreateKey, NtOpenKey, NtCreateFile, NtReadFile, NtWaitForSingleObject

Ну и в чём, блин, смысл использовать все те Native-функции, для которых есть Windows-аналоги, замечательно отдокументированные и с кучей примеров? Разве что в спортивном интересе. Я понимаю, если используешь такие Native-функции, к которым нет Windows-переходников, вот это интересно, вот это полезно, да, но потенциально непереносимо.

Вопрос-то в чём? «Возьмите и напишите мне примеры»?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: ntdll.dll и kernel32.dll - Реальные примеры работы на vb

Сообщение Rody66 » 17.09.2011 (Сб) 1:54

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

В будущем планирую этим заняться, а пока с горем пополам, буду совершенствовать бейсик.
Вопрос-то в чём? «Возьмите и напишите мне примеры»?

Я конечно понимаю, что Вы обычно яростно против того, чтобы мы, глупые новички просили готовые примеры, но учитывая ситуацию, и то, что реальных примеров использования Native API на вб6 в инете найти крайне проблематично (если они вообще имеются), и в итоге все упирается именно в пример реального использования функций, то я думаю, в данном случае, сам Бог велел сделать исключение. И да, пока что, дело в спортивном интересе, но делается не просто так, ибо у будущем я планирую активное применение Native API. Хотя нет, вру.. даже сейчас имеется задача - создание невидимого ключа в реестре посредством Native API, Win API кстати этого делать не умеет, о чем Вам должно быть известно. И вообще, я уверен если копнуть, то выяснется что использование Win API по своей функциональность будет во многом отставать от, как Вы сказали, работы программы "без посредников". Дело в том, что учитывая уровень знаний программистов, которые здесь частенько бывают, я уверен, что кто-то из них (хоть даже и из спортивного интереса) обязательно пользовался Native API, и велика вероятность того, что примеры таких действий остались.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: ntdll.dll и kernel32.dll - Реальные примеры работы на vb

Сообщение Хакер » 17.09.2011 (Сб) 2:06

Rody66 писал(а):Во-вторых, рад что в этот раз, мне все-таки повезло увидеть от Хакер'а не только критику, но и реальную помощь, не часто такое увидишь.

После таких предложений больше даже не хочется отвечать. Во-первых, отвечать лучше только за себя, а с тобой я имел общение пока довольно мало. Так что о часто/нечасто лучше помолчать. Во-вторых, критика или реальная помощь проследует от меня, зависит не от моего настроения, а от предмета вопроса. Если спрашивают что-то абстрактное, то разумно, что идёт нормальный ответ, а если описывают намерение сделать какую-нибудь дурость, то справедливо, что следует критика. В третьих, слово «Хакер» написано русскими буквами и давно вошло в русский язык. Чтобы его склонять, не нужно использовать апостроф.

Rody66 писал(а):Я конечно понимаю, что Вы обычно яростно против того, чтобы мы, глупые новички просили готовые примеры, но учитывая ситуацию, и то, что реальных примеров использования Native API на вб6 в инете найти крайне проблематично (если они вообще имеются),

Кому нужны примеры? Это уже скомпилированные данные, это вред. Нужны исходные. Как вызывать API-функцию (любую) — раз, как вызывать и что передавать конкретной функции — два. На основе этих двух исходныз знаний каждый сам должен порождать для себя пример.

Rody66 писал(а):ибо у будущем я планирую активное применение Native API.

Microsoft не рекомендует делать этого. Хотя часто так делают, и ничего криминального ещё не произошло (никаких функций не убрали и не переименовали), лагерь Реймонда Чена, который на стороне сохранения обратной совместимости, как известно, теряет былую сильную позицию. Так что сейчас всё что угодно может произойти: если будут преднамеренно разрушать обратную совместимость, Native API подпадут под зачистку уж точно раньше, чем Windows API.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: ntdll.dll и kernel32.dll - Реальные примеры работы на vb

Сообщение ger_kar » 17.09.2011 (Сб) 17:47

Rody66 писал(а):Во-вторых, рад что в этот раз, мне все-таки повезло "услышать" от Хакер'а не только критику
Ну вообще, Хакер обычно и занимается тем, что помогает, мне по крайней мере очень помог и причем неоднократно, а уж сколько полезной информации я благодаря ему узнал, даже и не сосчитать.
Rody66 писал(а):но учитывая ситуацию, и то, что реальных примеров использования Native API на вб6 в инете найти крайне проблематично (если они вообще имеются)
Имеются viewtopic.php?f=1&t=43242#p6756289 , там во вложении как раз ark привел пример использования NativeAPI для работы с реестром. Когда изучал этот вопрос, то в нете также натыкался на несколько примеров использования NativeAPI, правда на англоязычных ресурсах. Я кстати тоже в английском не силен, но сами примеры кода вполне понятны что-бы разобраться что к чему, кроме этого переводчик гугла неплохо помогает. Он конечно переводит не идеально, но вполне сносно.
Rody66 писал(а):Я конечно понимаю, что Вы обычно яростно против того, чтобы мы, глупые новички просили готовые примеры
Ну вообще на своем примере могу сказать следующее, что конечно, что-либо изучать по готовым примерам несомненно легче и быстрее и если требуется быстро разрешить возникшую проблему. Но с другой стороны (у меня по крайней мере) то что быстро пришло, то так-же быстро и ушло (забывается). Типа пример посмотрел, вроде все понятно, применил но в голове особо ничего не остается. Но когда сам бывает помучаешься (бывает даже очень долго), то и результат совершенно иной. Я тоже не являюсь профессионалом, и единственное что могу посоветовать в этой ситуации, это начать этот вопрос изучать самостоятельно, по крупицам. Как правило, по названиям передаваемых параметров, можно понять, что передается. Разобраться со всеми структурами, что они из себя представляют и т.д. И потихоньку в голове начинает складываться цельная картинка, как из пазлов. Есть конечно много непонятных моментов, когда ну никак не получается, а вот тут и на форуме самый раз вопрос задать. Таким образом начнешь сам делать эти примеры, и обязательно найдешь поддержку на форуме, да и в плане обучения это будет очень полезно.
Хакер писал(а):Microsoft не рекомендует делать этого.... если будут преднамеренно разрушать обратную совместимость, Native API подпадут под зачистку уж точно раньше, чем Windows API.
Интересно, и зачем может понадобиться преднамеренно разрушить совместимость? Да еще и от WinAPI отказаться, по моему в здравом уме этого делать не будут. Разве, что всех на .Net принудительно пересадить. Т.е. что-бы все взаимодействие с системой было только через framework. Но наверное это вряд-ли. Хотя тут на днях прочитал, что Microsoft планируют сделать единую систему для всех платформ и даже отказаться от названия Windows.
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 17.09.2011 (Сб) 22:49

ger_kar писал(а):Да еще и от WinAPI отказаться, по моему в здравом уме этого делать не будут. Разве, что всех на .Net принудительно пересадить.

Кстати, мне интересно, почему WinApi не всегда корректно работает с контролами .NET?

[Хакер] :: В рамках этой темы и этого раздела, данное сообщение и дальнейшая возникшая между тобой и Fakk2 дискуссия — злостный оффтопик. Замечание. Сообщения отделены сюда.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList