Всем доброго!!! Хотелось бы получить помощь или разъяснение, что и почему. Я пытаюсь переписать чужой драйвер, я новичек в этом деле, даже более, многие вещи для меня "темный лес", но все же... Суть проблемы такова, функция ObQueryNameString на определенном шагу подвисает, т.е. не возарашет никакого результат, в частности это происходит при попытвке получить данные с SERVICES.EXE; 0264: Thread SERVICES.EXE(000000E8)00000388) 0268: Token 026C: Event 0270: File в чем может быть проблема?
http://www.wasm.ru/forum/index.php?action=vthread&forum=4&topic=2133 http://www.wasm.ru/forum/index.php?action=vthread&forum=4&topic=7728
Four-F, я обзательно просмотрю данные ссылки, но прежде хотел кинуть часть кода, быть сожет у тебя будут предложения, каким образом можно было бы получить тот же рузультат иным способом, и так вот они(на С++ оригинал, на дельфи мой вариант адаптации): С++, Delphi
На дельфи драйвер лучше не пробуй писать, куда проще это делать на си. З.Ы А где ты DDK для дельфи взял? или сам переписывал?
Да, можно по разному извращаться, я например писал плагин для Иды на fasm Главное что на VB дрова ещё не начали писать
<font color="gray][ LuckyDevil</font><!--color--><font color="gray]: ...каким образом можно было бы получить тот же рузультат иным способом... ]</font><!--color--> ???
Four-F,Asterix,Ms Rem, да я знал, что услышу что-то подобное ))), вот почему в первом посте я промолчал о дельфи )))). Вообщем, я просто пытаюсь написать на дельфи более менее серьезный драйвер, пусть и не свой, но сейчас для главное знать и быть уверенным, что это реально ))). Из потраченного месяца, на все это дело, можно сказать что писать драйверы можно, но... не все так просто. В большей степени из-за моих кривых ручек и не знания С++. И конечно же я не думаю что в Дельфи удасться написать сложный драйвер, все-таки существуют проблемы и это проблемы представлений типов в самом дельфи (((. Это лирика, а вопрос остается открытым, я предлогаю отбросить Ваши возмущения по поводу как и на чем, а просто помочь мне разобраться, с данным кодом, потому как повторюсь , скорей всего я сделал ошибки, но самому разобраться сложно, все-что я смог сделать я выложил на все общее обозрение. Ms Rem, коммерческая весия ДДК для дельфи.... скажу так, я общался с человеком , который этим занимается в серьез, просто так он никому ничего не даст, потому как, потрать не один месяц на перенос всех структур ДДК...., не очень простое дело. То, на чем я пишу, это моего собственного изготовления, по ходу тестирования, обнаруживаю ошибки в описании структур, правлю на лету. Хочу сразу же всех предупредить, не стоит возмущаться и клеймить меня ))), в первую очеред я это делаю, для себя. Кстати особый фэнкс создателям сайта и не посредственно Four-F за статьи, так же я тут нашел много не документированных структур. Если у когто-то есть более свежие и полные недокументированные описания структур и функций ядра и вам не жалко этим поделиться, кинте на мыло lucky.devul@mail.ru.
LuckyDevil Раньше, когда я начинал писать драйвера то тоже шел твоим путем, но потом понял что это ужасный гимор. Забей на это дело и учи с++, так как если занялся дровами то все равно придется. А коммерческий ддк для дельфи имхо никто не купит, так как смысла в нем нет.
LuckyDevil, присоединяясь к мнению Ms Rem, скажу, что ты делаешь бесполезную работу. Если бы ты портировал DDK для делфистов как коммерческий проект, в этом ещё был бы какой-то смысл, но перекладывать из пустого в порожнее... Посмотри на приведенный тобой код... Код (Text): = -> := {} -> begin/end 0x70 -> $70 и т.д и т.п. Ну и какой в этом смысл? Изменения чисто косметические и говорить о незнании С не приходится. Ты же смог портировать эту функцию. Значит основы есть, а месяца тебе за глаза и за уши хватить, чтоб с деталями разобраться. Прибавь к этому огромное кол-во готового дровяного кода на С, который можно просто прикручивать + оф. поддержка ms + все инструменты/утилиты/библиотеки заточены под С. Короче, бросай ты это гнилое занятие. Касательно вопроса. Ответ на него содержится в самом конце по второй ссылке, которую я привёл выше. У тебя же всё виснет на объекте "файл". Из принципиально других способов я вижу только ручное прохождение по структурам ядра. Если это нужно только для объектов одного типа, то можно попарится. Если же нужно общее решение, то флаг тебе в руки и исходники системы на винт
Four-F, mdya... Ya vse ponimayu, prosto zaciklilo. Po povodu <font color="red]Касательно вопроса. Ответ на него содержится в самом конце по второй ссылке, которую я привёл выше. У тебя же всё виснет на объекте "файл".</font><!--color--> , u menya to visnet, a vot v origenal'noi versii net, otsyuda vivod ya ne pravilno chto-to sdelal. Jalko chto nikto ne vsyalsya za analiz moego koda (((((
<font color="gray][ LuckyDevil</font><!--color--><font color="gray]: u menya to visnet, a vot v origenal'noi versii net, otsyuda vivod ya ne pravilno chto-to sdelal ]</font><!--color--> Из вопроса совершенно не понятно, что оригинал не виснет, а твой код виснет. Это несколько меняет дело. Тебе нужно выяснить, а пытается ли вообще оригинальный код вызывать ObQueryNameString на том хендле, на котором обламывается твой код. Очень может быть, что клиент драйвера каким-то образом определяет потенциально опасные хендлы и не дергает для них драйвер. Если твой код всё таки работает для других хендлов, значит портирование правильно сделано. Хотя работать он не может... Код (Text): // // тут у меня вообщем облом при попытке выполнить // KrRtlUnicodeStringToAnsiString появляется синий экран // {if(NT_SUCCESS(KrRtlUnicodeStringToAnsiString( <font color="red]@(PDOB_NAME_STRING(out_buffer)^.name.Buffer),</font><!--color--> PUNICODE_STRING(buffer),FALSE))) Читай внимательно доку и см. оригинал. Первый параметр д.б. указателем на ANSI_STRING, но не на ANSI_STRING.Buffer! Откуда код то? С Rootkit.com ? <font color="gray][ LuckyDevil</font><!--color--><font color="gray]: Jalko chto nikto ne vsyalsya za analiz moego koda ]</font><!--color--> Тут по-китайского мало кто балакает К тому же код довольно тяжело читается. Постоянное приведение типов - глазам больно. А в сутках всего 24 часа.
Four-F, vot imenno chto on rabotaet, no pri oprose services.exe visnet <font color="red]Читай внимательно доку и см. оригинал. Первый параметр д.б. указателем на ANSI_STRING, но не на ANSI_STRING.Buffer!</font><!--color-->, skorei vsego ya prosto metodom tika pitalsya dobit'sya resul'tata, v pervonachal'noi moei versii bilo tak : KrRtlUnicodeStringToAnsiString(@(PDOB_NAME_STRING(out_buffer)^.name),P UNICODE_STRING(buffer),FALSE) BSOD taje voznikal (((( a kod deistvitel'no s Rootkit.com
Mne kak raz i nujno znat' mnenye o tom, pravil'no li ya delayu prvidenya tipov, esli net to kak eto mojno sdelat' pravil'no. ((( samomu ne razobrat'sya
С первого взгляда правильно. ... @(PDOB_NAME_STRING(out_buffer)^.name.Buffer) Скорее всего Buffer указатель?? Зачем еще его смещение брать?? Второй вариант @PDOB_NAME_STRING(out_buffer)^.name Как я могу что-то сказать, если я не знаю что с себя представляет PDOB_NAME_STRING?? ... Поработай отладчиком, ... подампь выше наведеные строчки и все проясниться.
wish3, вот: Код (Text): type DIB_NAME_STRING = record pid: ULONG; hwnd: HANDLE; end; PDIB_NAME_STRING = ^DIB_NAME_STRING; type DIB_TOKEN_HANDLE = record hwnd: HANDLE; end; PDIB_TOKEN_HANDLE = ^DIB_TOKEN_HANDLE; type DOB_UNKNOWN = record status: ULONG; end; PDOB_UNKNOWN = ^DOB_UNKNOWN; type DOB_NAME_STRING = record status: ULONG; name: ANSI_STRING; end; PDOB_NAME_STRING = ^DOB_NAME_STRING; type DOB_TOKEN_HANDLE = record status: ULONG; hwnd: HANDLE; end; PDOB_TOKEN_HANDLE = ^DOB_TOKEN_HANDLE; а какой отладчик надо использовать?