Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Вниз

Неправильные параметры при вызове WinApi функций   Найти похожие ветки 

 
Kerk ©   (2005-01-22 20:46) [40]

AlterEgo of WondeRu ©   (22.01.05 20:46) [39]

заметано!


 
Piter ©   (2005-01-22 21:34) [41]

AlterEgo of WondeRu ©   (22.01.05 19:54) [35]
сейчас буду материться!!!


получишь R/O

if (dwExceptionCode == EXCEPTION_ACCESS_VIOLATION)

Ага. То есть, ты сейчас прилюдно хочешь сказать, что  EAccessViolation и EXCEPTION_ACCESS_VIOLATION одно и тоже?


 
Kerk ©   (2005-01-22 21:38) [42]

Piter ©   (22.01.05 21:34) [41]
EAccessViolation


А при чем тут оно вообще?


 
AlterEgo of WondeRu ©   (2005-01-22 21:46) [43]

Piter ©   (22.01.05 21:34) [41]
Ага. То есть, ты сейчас прилюдно хочешь сказать, что  EAccessViolation и EXCEPTION_ACCESS_VIOLATION одно и тоже?


скажу что ДААА!!!  А если меня прилюдно опустят, то признаю свою ошибку, если мне приведут аргументы обратного!


 
Piter ©   (2005-01-22 21:46) [44]

Kerk ©   (22.01.05 20:34) [37]
Ты тупой, да? В Platform SDK оно тоже в связи с дельфями упоминается?


Где в SDK упоминается EAccessViolation? Цитату в студию, плиз

Умей признать свою ошибку

почему ты себе это не говоришь?

Kerk ©   (22.01.05 20:34) [37]
LMD


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


 
Piter ©   (2005-01-22 21:48) [45]

Kerk ©   (22.01.05 21:38) [42]
А при чем тут оно вообще?


проблема в том, что ты вступаешься постоянно за AlterEgo of WondeRu. А ты вообще читаешь, что он пишет? Если ты этого не читаешь - может тебе разуть глаза и прочитать всю ветку заново?
Да вот прям сейчас он написал:

AlterEgo of WondeRu ©   (22.01.05 21:46) [43]
Ага. То есть, ты сейчас прилюдно хочешь сказать, что  EAccessViolation и EXCEPTION_ACCESS_VIOLATION одно и тоже?

скажу что ДААА!!!  


 
Kerk ©   (2005-01-22 21:53) [46]

Piter ©   (22.01.05 21:46) [44]
Где в SDK упоминается EAccessViolation? Цитату в студию, плиз


Млять! Покажи где я про EAccessViolation говорил. Цитату в студию плиз.

Де-факто WondeRu прав. EAccessViolation - это обертка для EXCEPTION_ACCESS_VIOLATION.

Piter ©   (22.01.05 21:46) [44]
ты маленький еще, чтобы кидаться такими словами.


LOL. В свою анкету загляни.


 
Kerk ©   (2005-01-22 21:56) [47]

Piter ©   (22.01.05 21:48) [45]

Это ты тут брызгая слюной втираешь, что AV - чисто дельфовское изобретение. Признай уже ошибку.. пора.


 
Piter ©   (2005-01-22 22:35) [48]

Kerk ©   (22.01.05 21:53) [46]
LOL. В свою анкету загляни


я не про возвраст говорю, причем здесь он? Я говорю про внутреннюю зрелость что ли. Не будет взрослый человек кидаться налево и направо такими аббревиатурами, как LMD. Это вообще зачастую прием тех же самых ламеров, когда человек не способен к аргументированному спору - он просто говорит LMD, и типа разговор исчерпан. О чем говорить с ламерами?

Kerk ©   (22.01.05 21:56) [47]
Это ты тут брызгая слюной втираешь, что AV - чисто дельфовское изобретение


Во-первых, я слюной не брызгаю.
Во-вторых - да, EAccessViolation чисто дельфовое изобретение.

Хорошо, насколько я понимах у нас просто различается терминология. Я под AV понимаю EAccessViolation, ты под AV понимаешь вообще ошибку доступа к памяти.
Если это принять - то твои слова верны, мои - тоже.

Но что тогда тебе не нравится? Я ведь вообще разговаривал с AlterEgo of WondeRu, который под AV понимает именно EAccessViolation, как и я. И говорит, что AV (то есть EAccessViolation) возникнет при работе WinApi функций. Я ему указал, что такого быть не может. После чего была развернута какая-то непонятная дискуссия с приведением почему-то Рихтера (какое он имеет отношения к EAccessViolation?).

Да еще вмешался ты, хотя под AV понимаешь совсем другое. Ну и как ты можешь защищать AlterEgo of WondeRu? Он, спору нет, был бы прав, если бы считал как ты. Но он то считает по другому.

Почему ты наезжаешь на меня? Если ты процитируешь предложение, где я сказал НЕПРАВДУ - цитируй.


 
Kerk ©   (2005-01-22 22:42) [49]

Piter ©   (22.01.05 22:35) [48]
будет взрослый человек кидаться налево и направо


Приведи список из более, чем двух человек кому я это сказал. :-)


> Да еще вмешался ты, хотя под AV понимаешь совсем
> другое.

А еще как понимать? Разговор про WinAPI идет или где?


 
Piter ©   (2005-01-22 22:47) [50]

Kerk ©   (22.01.05 22:42) [49]
Приведи список из более, чем двух человек кому я это сказал


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

А еще как понимать? Разговор про WinAPI идет или где?

ха, так и я тут с тобой согласен. Я не понимаю, почему завели разговор об EAccessViolation, но его завели! Я то здесь причем?

Я устал повторять, но например AlterEgo of WondeRu утверждал, что при работе WinApi функций возникнет EAccessViolation. На что я ему ответил, ЧТО ТАКОГО БЫТЬ НЕ МОЖЕТ.
После чего почему-то понеслась дикая дискуссия, в том числе и с тобой. И кто здесь не прав? Я?


 
Kerk ©   (2005-01-22 22:49) [51]

Piter ©   (22.01.05 22:47) [50]
почему завели разговор об EAccessViolation, но его завели!


так его ты завел!

> AlterEgo of WondeRu утверждал, что при работе WinApi
> функций возникнет EAccessViolation.


он этого не говорил


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


нет. у меня это давно. :Р
те, кто меня хорошо знает, подтвердят :)


 
AlterEgo of WondeRu ©   (2005-01-22 22:50) [52]

Piter ©   (22.01.05 22:35) [48]
под AV понимает именно EAccessViolation

откуда взял???

Про EAccessViolation  я упомянал лишь единожды [43]!!!

если честно, то мне Ваша привязка к конкретному языку программирования оочень удивляет!!! Вы полагаете, что если в делфе Вы отловили EAccessViolation, то ОС подумала: "это делфовое приложение Piter"a, поэтому в нем тока делфовые исключения, а EXCEPTION_ACCESS_VIOLATION, ненужная хрень, и тока для приложения WondeRu, написанного на VC++" !!! ))))

А Рихтера я буду цитировать и впредь, т.к. он принимал участие в разработке компонентов винды и допущен к "телу" ОС)))


 
AlterEgo of WondeRu ©   (2005-01-22 22:53) [53]

а какого хуя я оправдываюсь??? перед кем???


 
GuAV ©   (2005-01-22 23:22) [54]


>GuAV ©   (22.01.05 3:14) [11]
>
> ты как-то некорректно все делаешь. В твоих примерах, я
> так подозреваю, дело даже до вызова WinApi функций не
> доходит. Ошибка происходит еще на стадии
> разыименовывания указателя


Разыменования указателя как такового нет. var параметр откомпилируется в тот же код что и параметр - указатель. Потом, в случае с MMF получаем вполне корректный указатель.
Передача переменной по ссылке или указателя на переменную по значению произведёт один и тот же код.


>  и произойти оно может только с откомпилированным
> Дельфовым кодом

Когда вообще бывает EAccessViolation ? При недопустимой операции с памятью. Типа так MOV EAX, [0]. Так вот этот код соверешнно одинаково выполнится в приложении и библиотеке и приведет к AV. Исключение EAccessViolation или runtime error 216 - это уже результат обработки критических ошибок  дельфовской rtl с sysutils и без соответсвенно.


> это зависит, видимо, от того, защищена ли эта область
> от чтения/записи или под эту виртуальную область
> вообще не выделена память

Нет, дорогой, это зависит от реализации конкретной функции, которую я вызываю. параметр-то тот же.


>  Ну ПОДУМАЙ

А самому слабо ?


 
Piter ©   (2005-01-23 00:16) [55]

Kerk ©   (22.01.05 22:49) [51]
почему завели разговор об EAccessViolation, но его завели!

так его ты завел!


цитируй

Kerk ©   (22.01.05 22:49) [51]
он этого не говорил


как это не говорил? Он сказал, что AV будет по любому, а потом дал понять, что он понимает под AV в посте [15]

AlterEgo of WondeRu ©   (22.01.05 22:53) [53]

предлагаю умерить эмоции

GuAV ©   (22.01.05 23:22) [54]
Разыменования указателя как такового нет. var параметр откомпилируется в тот же код что и параметр - указатель. Потом, в случае с MMF получаем вполне корректный указатель.
Передача переменной по ссылке или указателя на переменную по значению произведёт один и тот же код.


а к чему ты это сказал? Я тебе привел пример в пику твоему:

procedure TForm1.Button1Click(Sender: TObject);
var
VI: TOSVersionInfo;
begin
VI := TOSVersionInfo(Pointer($88888888)^); // ЗДЕСЬ БЛИН БУДЕТ AV!
//Хотя здесь нет никакого вызова функции
end;


Твой пример был таким:

GetVersionEx(TOSVersionInfo(Pointer($88888888)^));

Я говорил про передачу неправильных параметров WinApi функциям, а тут никакой передачи параметров то и нету. Причем здесь вообще WinApi функции? Ты ведь понимаешь, что исключение вызвано не вызовом GetVersionEx, до вызова этой функции даже дело не доходит.
Поэтому и непонятно к чему ты привел этот пример, коли мы говорим про WinApi?

GuAV ©   (22.01.05 23:22) [54]
Нет, дорогой, это зависит от реализации конкретной функции, которую я вызываю. параметр-то тот же


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

Ты говоришь, что это завист от реализации конкретной функции? Ты имеешь в виду от реализации конкретной WinApi функции, да?

А ты вообще в курсе, что в твоих примерах никакая WinApi функция ВООБЩЕ НЕ ВЫЗЫВАЕТСЯ?

GuAV ©   (22.01.05 23:22) [54]
А самому слабо ?


не слабо. Только ты скажи - над чем мне надо подумать?

P.S. Как же удивляет поведение людей. Вроде нормальные люди, а мигом переходят на "Вы", "Молодой человек", "Дорогой" и т.д.
Какая фамильярность... ужас


 
GuAV ©   (2005-01-23 00:37) [56]

Piter ©   (23.01.05 0:16) [55]

На фамилиярность, ты уж извини сам провоцируешь. Как и на LMD нарываешся.

Вызов функции есть. Может тебе сейчас неочевидно, попробуй примеры в [20] - некоторые, те что не генерят AV таки даже результат возвращают.
Причины для AV в коде в [20] уже тем более нет, указатель корректный.
Ты можешь написать свою функцию с var параметром и вызвать её как я вызываю - и увидишь, что пока нет обращения к var параметру, AV нет. (Для чистоты эксперимента сделай его с упорядоченными типами).
Ещё можешь заменить PAGE_READONLY и FILE_MAP_READ на значения разрешающие запись и увидеть что всё работает, т.е. с указателями было всё корректно, только они указывали на защищенную от записи область.

Над чем думать - когда и как вообще поднимается исключение EAccessViolation. и какая разница между ехе, dll на дельфи и системной dll в даном случае.


 
GuAV ©   (2005-01-23 00:38) [57]

Пардон, не [20], а [17]


 
GuAV ©   (2005-01-23 00:42) [58]

Да, вот что, посмотри в окно CPU. Дави F7 до CALL <Имя_Функции>. К AV приводит именно этот CALL я, т.е. параметры уже успешо помещены в стек. Теперь веришь, что они ВЫЗЫВАЮТСЯ ?


 
Piter ©   (2005-01-23 00:57) [59]

GuAV ©   (23.01.05 0:37) [56]
Вызов функции есть


ладно, здесь я соглашусь. У меня на W2k нет никаких вызовов, все разыменовывания твоих указателей приводят к AV. Видимо, на 9x память не так защищена или что-то там еще...

GuAV ©   (23.01.05 0:37) [56]
Ты можешь написать свою функцию с var параметром и вызвать её как я вызываю - и увидишь, что пока нет обращения к var параметру, AV нет


Я писал:

Piter ©   (23.01.05 0:16) [55]
procedure TForm1.Button1Click(Sender: TObject);
var
VI: TOSVersionInfo;
begin
 VI := TOSVersionInfo(Pointer($88888888)^); // ЗДЕСЬ БЛИН БУДЕТ AV!
//Хотя здесь нет никакого вызова функции
end;


как ты объяснишь возникновение AV в данном куске кода?

Ведь по твоему выходит, что когда передается TOSVersionInfo(Pointer($88888888)^) никакого AV не происходит, а только где-то там внутри WinApi функци. Но вот пример, в нем возникает AV. И во всех твоих примерах в [11] тоже самое (в W2k)

GuAV ©   (23.01.05 0:37) [56]
Как и на LMD нарываешся.


ну коли Kerk проигнорировал - обращусь к тебе. Процитируй плиз предложения, где я сказал что-то неверное. Если таких предложений нету - то в чем мой нарыв?


 
Piter ©   (2005-01-23 00:59) [60]

GuAV ©   (23.01.05 0:42) [58]
Да, вот что, посмотри в окно CPU. Дави F7 до CALL <Имя_Функции>.


ты про какой свой пример?

GuAV ©   (23.01.05 0:38) [57]
.е. параметры уже успешо помещены в стек. Теперь веришь, что они ВЫЗЫВАЮТСЯ ?


причем здесь вера/не вера? Не считай, что я буду что-то говорить без веских на то причин.


 
GuAV ©   (2005-01-23 01:13) [61]

Piter ©   (23.01.05 0:57) [59]
как ты объяснишь возникновение AV в данном куске кода?


В отличии от куска где вызов функции тут есть чтение из памяти по этому адресу. в случае вызова функций чтения нет.


>  У меня на W2k нет никаких вызовов, все
> разыменовывания твоих указателей приводят к AV.
> Видимо, на 9x память не так защищена или что-то там
> еще...

Никакой разницы. твой код и у меня даст AV , а функции и у тебя вызываются.


> Ведь по твоему выходит, что когда передается
> TOSVersionInfo(Pointer($88888888)^) никакого AV не
> происходит, а только где-то там внутри WinApi функци

Именно так. Более того, именно эта ф-ция GetVersionInfo не приводит к AV вообще к AV смотри ещё раз мои посты.


> Но вот пример, в нем возникает AV. И во всех твоих
> примерах в [11] тоже самое (в W2k)

Не во всех же.


> ну коли Kerk проигнорировал - обращусь к тебе.
> Процитируй плиз предложения, где я сказал что-то
> неверное.

Уже сказал
Piter ©   (22.01.05 18:08) [23]

>  дело даже до вызова WinApi функций не доходит.

Доходит.

>  и произойти оно может только с откомпилированным
> Дельфовым кодом

С любым кодом, делающем недопустимое обращение к памяти.


>  в чем мой нарыв?

В следующем:

> если ты вообще понимаешь что такое AV.


> ну от тебя не ожидал. Как может произойти AV при
> работе WinApi функций?!


> и ты туда же! Ну ПОДУМАЙ, как может произойти AV,


 
GuAV ©   (2005-01-23 01:14) [62]

Piter ©   (23.01.05 0:59) [60]
ты про какой свой пример?

Про любой пример вызова ф-ции, хоть [11], хоть [17].


 
Piter ©   (2005-01-23 01:37) [63]

GuAV ©   (23.01.05 1:13) [61]
В отличии от куска где вызов функции тут есть чтение из памяти по этому адресу. в случае вызова функций чтения нет


Нда... Я видел как люди тупят, но чтобы так ступить...
Блин, ведь происходит копирование структуры в моем примере. Эх, посыпаю голову пеплом...

GuAV, извини, я осознал всю глубину своей неправоты :(...


 
Piter ©   (2005-01-23 01:38) [64]

Остается в общем два вопроса:

1) основной - есть ли функции, которые будут работать в таком режиме, что могут перезаписать недоступные области?

2) почему WinApi функции ведут себя по разному? Кто-то из них проверяет возможность записи, а кто-то просто пытается тупо писать?


 
GuAV ©   (2005-01-23 02:01) [65]

Почему GetVersionEx не приводит к AV понятно - не заполнен size поэтому ничего писать туда не будет.

Почему GetSystemTime не приводит к AV ?

Не уверен, но моя догадка (псевдокод):

function GetSystemTime(var SystemTime);
begin
 try
   SystemTime := ST;
   Result := OK;
 except
   Result := INVALID_PARAMETER;
 end;
end;


По основному вопросу - не знаю.


 
jack128 ©   (2005-01-23 02:13) [66]

Э-э-э может опаздал к обсуждению, но все таки
EAccessViolation = class(EExternal);
EExternal is the ancestor of all exception classes that can represent Win32 exception codes. EExternal has a public data structure, ExceptionRecord


 
Piter ©   (2005-01-23 02:18) [67]

GuAV ©   (23.01.05 2:01) [65]
Почему GetVersionEx не приводит к AV понятно


у меня приводит

GuAV ©   (23.01.05 2:01) [65]
Почему GetSystemTime не приводит к AV ?


у меня приводит


 
Cobalt ©   (2005-01-23 02:20) [68]

2 Piter ©   (23.01.05 01:38) [64]
по 1)
Очень сомневаюсь. Цитата:
Систему по С2 лохи сертифицировали, да?
Понимаешь ли, структура ОС Виндовс - многоуровневая.
"У неё есть слои" © Шрек :)
Программист обычного приложения работает с первым слоем - внешним. Этот слой уже (в случае необходимости) обращается к внутреннему слою - применить права доступа, провести имперсонацию, загрузить библиотеку, файл открыть и т.п.
И этому первому слою нет нужды (и прав соответственно) менять права. Это не его компетенция.

Краткое резюме всего написанного - вряд ли такие функции есть. Ибо они - суть недосмотр, ошибка.


 
Piter ©   (2005-01-23 02:23) [69]

Cobalt ©   (23.01.05 2:20) [68]
Понимаешь ли, структура ОС Виндовс - многоуровневая


ну ладно, ладно. Я лоханулся, но не совсем же дебил я

вряд ли такие функции есть

я тоже так думаю... но все же...


 
GuAV ©   (2005-01-23 02:33) [70]

Piter ©   (23.01.05 2:18) [67]
Проверил под ХР.
Да, там AV, которое я хотел.
Теперь для ответа на 2) ищи другие неправильные функции.

Кстати, интересно, а касается ли [68] 9х ?


 
Piter ©   (2005-01-23 02:40) [71]

GuAV ©   (23.01.05 2:33) [70]
Кстати, интересно, а касается ли [68] 9х ?


что именно?


 
GuAV ©   (2005-01-23 02:43) [72]

То, что никакая функция доступная разработчику приложения не в состоянии перезаписать эти самые "некоторые области", а если такая функция есть, то это баг.


 
Piter ©   (2005-01-23 02:56) [73]

ну думаю так оно и должно быть, в идеале


 
Piter ©   (2005-01-23 02:56) [74]

я думаю


 
default ©   (2005-01-23 04:14) [75]

в посте [14] же написано что защита АППАРАТНАЯ
поэтому даже если что-то и напишется в коде системной функции не туда куда надо это будет ошибка того кто писал этот код, НО опять же написать можно при соответствующих условиях, то есть когда страница памяти не будет защищена
защищённая страница по определению не доступна для того отчего она защищена


 
AlterEgo of WondeRu ©   (2005-01-23 10:02) [76]

Piter признает свои ошибки - прогресс!!! Можно сказать: "Растем" :)


 
Kerk ©   (2005-01-23 12:14) [77]

Piter ©   (23.01.05 0:16) [55]
Kerk ©   (22.01.05 22:49) [51]
он этого не говорил

как это не говорил? Он сказал, что AV будет по любому, а потом дал понять, что он понимает под AV в посте [15]


Он все правильно сказал. Или в твоем клиенте не бывает EXCEPTION_ACCESS_VIOLATION ?

AlterEgo of WondeRu ©   (23.01.05 10:02) [76]

Перестанет быть таким упертым, может и LMD ему перестанут писать.. :)


 
AlterEgo of WondeRu ©   (2005-01-23 15:26) [78]

Kerk ©   (23.01.05 12:14) [77]
Перестанет быть таким упертым, может и LMD ему перестанут писать.. :)


отстань от мальчика, мне уже жалко его стало)


 
Piter ©   (2005-01-23 15:27) [79]

default ©   (23.01.05 4:14) [75]
в посте [14] же написано что защита АППАРАТНАЯ


да причем здесь это? Ведь есть уровень Windows, который МОЖЕТ писать в эти области, 100% есть. Иначе зачем эта память вообще нужна, если туда вообще писать/читать нельзя?

AlterEgo of WondeRu ©   (23.01.05 10:02) [76]
Piter признает свои ошибки - прогресс!!!


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

Можно сказать: "Растем"

да, можно сказать. Но не тебе.

Kerk ©   (23.01.05 12:14) [77]
Перестанет быть таким упертым, может и LMD ему перестанут писать


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


 
default ©   (2005-01-23 15:40) [80]

Piter ©   (23.01.05 15:27) [79]
это ответ на первый вопрос из поста [64]
могут если ошибка кодировщика системной функции, что не понятно?



Страницы: 1 2 3 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.65 MB
Время: 0.038 c
4-1103708142
lexis
2004-12-22 12:35
2005.02.13
Какому Process принадлежит ForegroundWindow?


1-1107033676
Denya
2005-01-30 00:21
2005.02.13
Оформление текста в TMemo


6-1099675291
tati
2004-11-05 20:21
2005.02.13
Xp, 98 и Server2003


3-1105961991
denis24
2005-01-17 14:39
2005.02.13
как правильно заливать картинку из таблицы в таблицу


1-1106828861
WhiteGuy
2005-01-27 15:27
2005.02.13
FreeDiskSpace?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский