переопределение NtDeviceIoControlFile
От: Denwer Россия  
Дата: 16.11.06 08:14
Оценка:
Короче заменил я данную функцию на свою, ну это в таблице системных вызовов, а потом в своей тупо вызываю уже виндовскую. И вот тут то собака и порылась. Винда не зависает, не перегружается, но уже не так работает, некторые процессы не запускаются, DbgView вообще глючит. Хотя данная техника перехвата нейтив функций применяласб уже не раз, везде работала, а тут обломс. В чем может быть трабла? Может где то нада подшаманить как то?
Re: переопределение NtDeviceIoControlFile
От: TarasCo  
Дата: 16.11.06 08:38
Оценка:
Здравствуйте, Denwer, Вы писали:

D>Короче заменил я данную функцию на свою, ну это в таблице системных вызовов, а потом в своей тупо вызываю уже виндовскую. И вот тут то собака и порылась. Винда не зависает, не перегружается, но уже не так работает, некторые процессы не запускаются, DbgView вообще глючит. Хотя данная техника перехвата нейтив функций применяласб уже не раз, везде работала, а тут обломс. В чем может быть трабла? Может где то нада подшаманить как то?


Вы что, из перехватчика прямо экспорт NtDeviceIoControlFile зовете? Если так, то вообще удивительно что хоть что то работает. Вам надо определить адрес точки входа по смещению, указанному в SDT и вызвать процедуру по этому адресу. NtDeviceIoControlFile можно звать только из контекста системных потоков.
Да пребудет с тобою сила
Re: переопределение NtDeviceIoControlFile
От: Злость Россия  
Дата: 16.11.06 08:53
Оценка:
Здравствуйте, Denwer, Вы писали:

D>Короче заменил я данную функцию на свою, ну это в таблице системных вызовов, а потом в своей тупо вызываю уже виндовскую. И вот тут то собака и порылась. Винда не зависает, не перегружается, но уже не так работает, некторые процессы не запускаются, DbgView вообще глючит. Хотя данная техника перехвата нейтив функций применяласб уже не раз, везде работала, а тут обломс. В чем может быть трабла? Может где то нада подшаманить как то?


Купил я себе пальто а цвет мне не нравится, может я цвет взял не тот, а как скажите какой мне подойдет.

Это я так, а на деле надо смотреть что-вы делаете в процессе перехвата. А насчет DbgView — так он часто глючит, так как при любых операциях, открытия файла и так далее в самом DbgView, и если системой будет вызвана функция которую перехватывает его драйвер, получим дедлок — так как она на это время блокирует процесс выборки.
Пусто
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[2]: переопределение NtDeviceIoControlFile
От: Denwer Россия  
Дата: 16.11.06 08:54
Оценка:
Здравствуйте, TarasCo, Вы писали:

TC>Здравствуйте, Denwer, Вы писали:


D>>Короче заменил я данную функцию на свою, ну это в таблице системных вызовов, а потом в своей тупо вызываю уже виндовскую. И вот тут то собака и порылась. Винда не зависает, не перегружается, но уже не так работает, некторые процессы не запускаются, DbgView вообще глючит. Хотя данная техника перехвата нейтив функций применяласб уже не раз, везде работала, а тут обломс. В чем может быть трабла? Может где то нада подшаманить как то?


TC> Вы что, из перехватчика прямо экспорт NtDeviceIoControlFile зовете? Если так, то вообще удивительно что хоть что то работает. Вам надо определить адрес точки входа по смещению, указанному в SDT и вызвать процедуру по этому адресу. NtDeviceIoControlFile можно звать только из контекста системных потоков.


Естественно перед изменением в SDT я запомнил старый адрес, и вот его то и вызываю.
Re[3]: переопределение NtDeviceIoControlFile
От: Denwer Россия  
Дата: 16.11.06 08:56
Оценка:
TC>> Вы что, из перехватчика прямо экспорт NtDeviceIoControlFile зовете? Если так, то вообще удивительно что хоть что то работает. Вам надо определить адрес точки входа по смещению, указанному в SDT и вызвать процедуру по этому адресу. NtDeviceIoControlFile можно звать только из контекста системных потоков.

D>Естественно перед изменением в SDT я запомнил старый адрес, и вот его то и вызываю.


Приблизительно все так.

NTSTATUS NewNtDeviceIoControlFile (...)
{
 retunr OldNtDeviceIoControlFile (...);
}


Т.е. там даже и грешить то неначто.
Re[2]: переопределение NtDeviceIoControlFile
От: Denwer Россия  
Дата: 16.11.06 09:01
Оценка:
Здравствуйте, Злость, Вы писали:

З>Это я так, а на деле надо смотреть что-вы делаете в процессе перехвата. А насчет DbgView — так он часто глючит, так как при любых операциях, открытия файла и так далее в самом DbgView, и если системой будет вызвана функция которую перехватывает его драйвер, получим дедлок — так как она на это время блокирует процесс выборки.


Кстати да, он стервец НОТ РЕСПОНДЕД. А как же тогда отлаживаться без DbgView?
Re[2]: переопределение NtDeviceIoControlFile
От: Злость Россия  
Дата: 16.11.06 09:16
Оценка:
Здравствуйте, TarasCo, Вы писали:

TC>Здравствуйте, Denwer, Вы писали:


D>>Короче заменил я данную функцию на свою, ну это в таблице системных вызовов, а потом в своей тупо вызываю уже виндовскую. И вот тут то собака и порылась. Винда не зависает, не перегружается, но уже не так работает, некторые процессы не запускаются, DbgView вообще глючит. Хотя данная техника перехвата нейтив функций применяласб уже не раз, везде работала, а тут обломс. В чем может быть трабла? Может где то нада подшаманить как то?


TC> Вы что, из перехватчика прямо экспорт NtDeviceIoControlFile зовете? Если так, то вообще удивительно что хоть что то работает. Вам надо определить адрес точки входа по смещению, указанному в SDT и вызвать процедуру по этому адресу. NtDeviceIoControlFile можно звать только из контекста системных потоков.


Не вижу разници для перехватчика (принимаю к вниманию что больше ее никто не хукает), что он будет вызывать функцию по адресу который лежал в таблице SDT или укажет вызов просто NtDeviceIoControlFile. (так как там именно этот адрес — если конечно кто-то уже не осуществил перехват.) Еще я предпологаю что зовет именно NtDeviceIoControlFile а не ZwDeviceIoControlFile — если это не так то 100% ошибка.

Маленький пример.

lkd> ln NtDeviceIoControlFile
(8057800e) nt!NtDeviceIoControlFile | (80578042) nt!NtFsControlFile
Exact matches:
nt!NtDeviceIoControlFile = <no type information>
lkd> ln ZwDeviceIoControlFile
(804ff5c8) nt!ZwDeviceIoControlFile | (804ff5dc) nt!ZwDisplayString
Exact matches:
nt!ZwDeviceIoControlFile = <no type information>
lkd> ln KeServiceDescriptorTable
(8055b6e0) nt!KeServiceDescriptorTable | (8055b720) nt!KeLicensedProcessors
Exact matches:
nt!KeServiceDescriptorTable = <no type information>
lkd> dd 8055b6e0
8055b6e0 80503734 00000000 0000011c 80503ba8
8055b6f0 00000000 00000000 00000000 00000000
8055b700 00000000 00000000 00000000 00000000
.........
lkd> dds 80503734 L11C
............
8050383c 8057800e nt!NtDeviceIoControlFile
............

Пусто
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[3]: переопределение NtDeviceIoControlFile
От: Злость Россия  
Дата: 16.11.06 09:18
Оценка:
Здравствуйте, Denwer, Вы писали:

[skip]

З>>Это я так, а на деле надо смотреть что-вы делаете в процессе перехвата. А насчет DbgView — так он часто глючит, так как при любых операциях, открытия файла и так далее в самом DbgView, и если системой будет вызвана функция которую перехватывает его драйвер, получим дедлок — так как она на это время блокирует процесс выборки.


D>Кстати да, он стервец НОТ РЕСПОНДЕД. А как же тогда отлаживаться без DbgView?


Очень просто — для отладки включи в список доверяемых процессов его — большенство дедлоков исключишь.
Пусто
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[4]: переопределение NtDeviceIoControlFile
От: Denwer Россия  
Дата: 16.11.06 11:02
Оценка:
Здравствуйте, Злость, Вы писали:

З>Здравствуйте, Denwer, Вы писали:


З>[skip]


З>>>Это я так, а на деле надо смотреть что-вы делаете в процессе перехвата. А насчет DbgView — так он часто глючит, так как при любых операциях, открытия файла и так далее в самом DbgView, и если системой будет вызвана функция которую перехватывает его драйвер, получим дедлок — так как она на это время блокирует процесс выборки.


D>>Кстати да, он стервец НОТ РЕСПОНДЕД. А как же тогда отлаживаться без DbgView?


З>Очень просто — для отладки включи в список доверяемых процессов его — большенство дедлоков исключишь.


А это как делается?
Re[5]: переопределение NtDeviceIoControlFile
От: Злость Россия  
Дата: 16.11.06 11:23
Оценка:
Здравствуйте, Denwer, Вы писали:

[skip]

З>>Очень просто — для отладки включи в список доверяемых процессов его — большенство дедлоков исключишь.


D>А это как делается?


Добавляешь себе в код функцию которая будет по имени процесса (инициатора вызова) возвращать что он в доверяемом списке. И вставляешь во все функции с начала эту проверку. Для отладки этого хватит.
Пусто
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[4]: переопределение NtDeviceIoControlFile
От: TarasCo  
Дата: 16.11.06 11:54
Оценка:
Здравствуйте, Denwer, Вы писали:

D>Т.е. там даже и грешить то неначто.


А что за система? Я SDT практически не трогал, тока созерцал А вот когда изучал XP x64, то наблюдал, что в SDT храняться не смещения в чистом виде. При получении адреса функции нужно было еще младшие 4 бита сбрасывать. Может на 32 битных системах тоже что-то подобное и вот выплыло?
Да пребудет с тобою сила
Re[5]: переопределение NtDeviceIoControlFile
От: Denwer Россия  
Дата: 16.11.06 12:12
Оценка:
Здравствуйте, TarasCo, Вы писали:

TC>Здравствуйте, Denwer, Вы писали:


D>>Т.е. там даже и грешить то неначто.


TC>А что за система? Я SDT практически не трогал, тока созерцал А вот когда изучал XP x64, то наблюдал, что в SDT храняться не смещения в чистом виде. При получении адреса функции нужно было еще младшие 4 бита сбрасывать. Может на 32 битных системах тоже что-то подобное и вот выплыло?


XP SP2 — 32 битная
C другими функциями все работает как часы, вот только с одной этой выплыли траблы.
Re: переопределение NtDeviceIoControlFile
От: Denwer Россия  
Дата: 17.11.06 09:11
Оценка:
Здравствуйте, Denwer, Вы писали:

D>Короче заменил я данную функцию на свою, ну это в таблице системных вызовов, а потом в своей тупо вызываю уже виндовскую. И вот тут то собака и порылась. Винда не зависает, не перегружается, но уже не так работает, некторые процессы не запускаются, DbgView вообще глючит. Хотя данная техника перехвата нейтив функций применяласб уже не раз, везде работала, а тут обломс. В чем может быть трабла? Может где то нада подшаманить как то?


Что называется сам дурак, после работы драйвера восстанавливал указатель в таблице SDT совсем другой функцией. Вообще странно почему не падало.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.