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

Вниз

DeviceIoControl,METHOD_BUFFERED и данные по поинтеру Win32,   Найти похожие ветки 

 
Ihor Osov'yak   (2003-04-21 20:15) [0]

идущие вглубь драйвера.

То есть, в драйвер передаются не сами данные, а поинтер на них.
Драйвер потом успешно эти данные получает. Примерно по такой же схеме данные возвращаются, только там не METHOD_BUFFERED, а METHOD_NEITHER.. Область данных, на которые смотрят эти поинтера распределяются конечео в win32 и на время выполнения DeviceIoControl живы и нкуда не исчезают - DeviceIoControl выполняется в синхронном режиме.

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

Это дело проверялось под W2K.

То есть получается, что из kernel mode можно работать по поинтеру, который передан из пользовательского режима?
Насколько така техника безопасна?

Зы - я в общеи то заинтересован доказать, что так работать плохо...

Зы2. А причем здесь делфи? Да притом, что win32 app на делфи нарисовано...


 
Кто же ещё   (2003-04-21 22:35) [1]

Для METHOD_BUFFERED выделяется промежуточный буфер, для METHOD_NEITHER нет.
Здесь фишка в скорости, и только. Там, где гоняют большие объёмы данных, используют METHOD_NEITHER.
Разумеется, второй метод потенциально опасней :)


 
Ihor Osov'yak   (2003-04-22 11:43) [2]

2 Кто же ещё (21.04.03 22:35)

Спасибо за внимание, но Вы не очень внимательно читали описание ситуации. Дело в том, что поинтер указывает на данные, лежащие за пределами пользовательского буфера обмена. Собственно в самом буфере - только значение поинтера.. То есть, совершенно не важно, перейдет это значение напрямую или через промежуточный буффер.


.. Зы. Как я представляю себе, эта ситуация более-менее работоздатна, если запрос будет выполнятся в контексте процесса вызывающего приложения. Если нет - то будет кырдык. В смысле, по поинтерах мы ничего не получим. Когда это может произойти? Да к примеру кто-то навесил фильтрирующий драйвер, который обработку соотв. запроса передаст нам не сразу, а через механизм отложенного вызова процедур... Или другой пример - более извратный - другой поток в пользовательском приложении уничтожает буфер, на который смотрят наши указатели.. Конечно, здесь имеет место явная ошибка в пользовательском приложенни, но это говорит о наличии того обстоятельства, что драйвер может стать жертвой ошибки в win32, что очень не хорошо...

Да, еще - пример для фильтрируещего драйвера с отложенным вызовом процедур и METHOD_NEITHER ввиду приведенных выше рассуждений о контексте процесса наверно также есть потенциально опасным? C METHOD_NEITHER я в своих изделиях не работал..

Спасибо за внимние..



 
Ihor Osov'yak   (2003-04-22 12:19) [3]

Удалено модератором


 
Кто же ещё   (2003-04-22 13:03) [4]

Удалено модератором


 
Digitman   (2003-04-22 15:11) [5]


> получается, что из kernel mode можно работать по поинтеру,
> который передан из пользовательского режима?


а почему бы и нет ? что в этом механизме есть нонсенс ?


> Насколько така техника безопасна?


Настолько же, imho, насколько безопасен сам по себе синхронный (блокирующий) механизм вызовов/исполнения ф-ций ядра


 
Ihor Osov'yak   (2003-04-22 17:39) [6]

2 Digitman © (22.04.03 15:11)

Ну, ньюансов много..

Начиная от того, что обработка должна выполнятся в контексте того процесса, который сделал запрос.. И это условие ножет просто нарушитть некий драйвер-фильтр... Он вряд-ли сделает это, когда идет IOCTL с METHOD_NEITHER.. Но для METHOD_BUFFERED этот фильтр имеет полное право сделать такой финт, в смысле сменить контекст процесса, в котором будет идти обработка запроса, наивно полагая, что все нужные данные находятся в системном буфере копий (к примеру, запустить отложенную обработку процедуры). И тогда по нашему указателю мы ничего хорошего не получим..

Еще момент - область памяти, на которую смотрит указатель, может уйти в своп.. Как быть с такой ситуацией?...


Да, еще. Я не говорю, что я много чего видел на тему сабжа, но немного смотрел всякие решения. Там везде данные для обмена лежали в пределах штатных буфферов, а не торчали неизвестно где, а в буффере - только указатель... Это меня и насторожило...
Не могли бы Вы привести пример использования такой техники в источниках, заслуживающих на доверие, к примеру в самплах от DDK, или в том=же сисинтерналс, они некоторые вещи снабжают исходниками...
Спасибо за внимание..




 
Ihor Osov'yak   (2003-04-22 17:55) [7]

Удалено модератором



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

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

Наверх





Память: 0.47 MB
Время: 0.012 c
3-7347
Sedunov Vitaly
2003-06-10 13:54
2003.07.03
ClientDataSet.Locate


7-7736
LexusU
2003-04-23 12:33
2003.07.03
Как можно получить текст из окна?


14-7635
Кен
2003-06-14 06:11
2003.07.03
Где в сети можно БЫСТРО получить бесплатный мэйл и не древовидный


14-7633
Knight
2003-06-13 21:14
2003.07.03
Обязательное страхование транспорта...


3-7358
Alexsus
2003-06-10 13:54
2003.07.03
Подскажите пожалуйста, как настроить DBGrid так





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский