работа с памятью в NDIS драйвере.
От: donkombat  
Дата: 25.12.09 11:25
Оценка:
Всем участникам форума добрый день
В NDIS драйвере работаю с ANSI строками (ANSI_STRING). Заметил некоторые тормоза, работа со строками это нормальная практика для NDIS?
Re: работа с памятью в NDIS драйвере.
От: A.Pastukhov  
Дата: 25.12.09 12:55
Оценка: -1
D>В NDIS драйвере работаю с ANSI строками (ANSI_STRING).
Вообще-то в ядре всегда лучше использовать UNICODE_STRING и лишние телодвижения по переводу ANSI в UNICODE не есть лучшее решение. Это касается и NDIS — в ndis.h определен псевдоним для UNICODE_STRING — это NDIS_STRING, правильней использовать его
Re[2]: работа с памятью в NDIS драйвере.
От: TarasCo  
Дата: 25.12.09 14:10
Оценка: +1 -1
AP>Вообще-то в ядре всегда лучше использовать UNICODE_STRING и лишние телодвижения по переводу ANSI в UNICODE не есть лучшее решение. Это касается и NDIS — в ndis.h определен псевдоним для UNICODE_STRING — это NDIS_STRING, правильней использовать его
-1

Вот допустим я смотрю на DNS пакеты. Я хочу сравнить имя хоста с некой константой. Зачем мне тут юникод стринг? Это касается практически всех сетевых протоколов — повсеместно используются однобайтовые символы.
Да пребудет с тобою сила
Re[3]: работа с памятью в NDIS драйвере.
От: A.Pastukhov  
Дата: 25.12.09 14:31
Оценка: 1 (1) -1
Здравствуйте, TarasCo, Вы писали:
TC>Вот допустим я смотрю на DNS пакеты. Я хочу сравнить имя хоста с некой константой. Зачем мне тут юникод стринг? Это касается практически всех сетевых протоколов — повсеместно используются однобайтовые символы.

Не хочется подвергать сомнению ваш авторитет, Александр, я безгранично вас уважаю, НО, во-первых: тот ли случай с dns имеет ввиду автор? Или как вы изволили выразиться, использование однобайтных символов?
Во-вторых, ответьте, зачем нужно было переопределять UNICODE_STRING в ndis? Для удобства? Или все-таки для того что ядро Win изначально "приспособлено" для работы с юникодом и юникод является своего рода "родной" структурой для ядра?
Я не говорю о том, что автор где-то ошибся, потому что не вижу кода. В данном конкретном случае я хотел показать автору (ЕЩЕ РАЗ ПЕРЕЧИТАЙТЕ МОЙ ПОСТ), что речь идет о моветоне программирования в ядре, с моей точки зрения.
Разочарован. Минус, короче
Re[4]: работа с памятью в NDIS драйвере.
От: donkombat  
Дата: 25.12.09 15:33
Оценка: 1 (1)
Здравствуйте, A.Pastukhov, Вы писали:

AP>НО, во-первых: тот ли случай с dns имеет ввиду автор? Или как вы изволили выразиться, использование однобайтных символов?

Я передаю в драйвер однобайтовую строку, которая описывает что мне надо проверять в приходящих пакетах unicode мне неудобен
AP>Во-вторых, ответьте, зачем нужно было переопределять UNICODE_STRING в ndis? Для удобства? Или все-таки для того что ядро Win изначально "приспособлено" для работы с юникодом и юникод является своего рода "родной" структурой для ядра?
AP>Я не говорю о том, что автор где-то ошибся, потому что не вижу кода. В данном конкретном случае я хотел показать автору (ЕЩЕ РАЗ ПЕРЕЧИТАЙТЕ МОЙ ПОСТ), что речь идет о моветоне программирования в ядре, с моей точки зрения.
AP>Разочарован. Минус, короче
Спасибо Вам что отреагировали на мой вопрос, я поставил плюс. равновесие
Re: работа с памятью в NDIS драйвере.
От: donkombat  
Дата: 25.12.09 17:18
Оценка:
ANSI_STRING strCommand;
PCHAR pCursor;
...
pCursor = strCommand.Buffer;
if(*pCursor == '(') //здесь падает с ошибкой IRQL_NOT_LESS_OR_EQUAL, IRQL при падении равен 2
    ++pCursor;

до этого был вызов strlen и все проходило нормально. проблема в операторе * ?
Re[5]: работа с памятью в NDIS драйвере.
От: Свиридов Роман Россия  
Дата: 25.12.09 18:50
Оценка: 1 (1)
Здравствуйте, donkombat, Вы писали:

[skip]
AP>>Во-вторых, ответьте, зачем нужно было переопределять UNICODE_STRING в ndis? Для удобства? Или все-таки для того что ядро Win изначально "приспособлено" для работы с юникодом и юникод является своего рода "родной" структурой для ядра?
AP>>Я не говорю о том, что автор где-то ошибся, потому что не вижу кода. В данном конкретном случае я хотел показать автору (ЕЩЕ РАЗ ПЕРЕЧИТАЙТЕ МОЙ ПОСТ), что речь идет о моветоне программирования в ядре, с моей точки зрения.
AP>>Разочарован. Минус, короче
D>Спасибо Вам что отреагировали на мой вопрос, я поставил плюс. равновесие

Замечу — тут обычная арифметика не работает. Один просто высказал свое мнение не учтя что другой может так обидется и в итоге видим как накинулся с "критикой" в ответ на самим придуманное "оскорбление". Так что вечный дивгатель на лицо возмущение намного выше затраченной силы.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[2]: работа с памятью в NDIS драйвере.
От: gear nuke  
Дата: 25.12.09 21:20
Оценка:
Здравствуйте, donkombat, Вы писали:

D>
D>ANSI_STRING strCommand;
D>PCHAR pCursor;
D>...
D>pCursor = strCommand.Buffer;
D>if(*pCursor == '(') //здесь падает с ошибкой IRQL_NOT_LESS_OR_EQUAL, IRQL при падении равен 2
D>    ++pCursor;
D>

D>до этого был вызов strlen и все проходило нормально. проблема в операторе * ?

Проблема в нечитании MSDN:

This indicates that Microsoft Windows or a kernel-mode driver accessed paged memory at DISPATCH_LEVEL or above


Еще хочу добавить, что использовать strlen и "однобайтовую строку, которая описывает что мне надо проверять в приходящих пакетах" — может и не моветон, но корень и тормозов, и остальных проблем.
.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.