| 
 
 
 
 Легенда:
  новое сообщение 
  закрытая нитка 
  новое сообщение 
  в закрытой нитке 
  старое сообщение   | 
Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
Новичкам также крайне полезно ознакомиться с данным документом.
| [ntddk]почему так происходит? (ntcreatefile)  10.07.02 09:33 Автор: NeuronViking Статус: Незарегистрированный пользователь
 |  
| Перехватываю вызовы NtCreateFile и при необходимости блокирую их. Если вызовы локальные(т.е. приложение и файл на той же машине) то все ок, но если скажем расшарена папка и удаленный клиент открывает файл то несмотря на болкировку вызова NtCreateFile - файл открывается. В этом случае NtCreateFile вызывается, я вижу что за файл и что его пытается открыть удаленный клиент, я просто возвращаю управление из функции !не! вызывая оригинальную NtCreateFile, НО! пользователь серавно может открыть этот файл! Че за нафиг? Локально все замечательно работает, а вот с удаленными клиентами что-то непонятное творится. Неужели для открытия используются какие-то другие функции?!
 
 
 |  
|  | [ntddk]почему так происходит? (ntcreatefile)  10.07.02 10:17 Автор: cb <cb> Статус: Member
 |  
| могу предположить что т.к. файл открывается редиректором то он использует не вызов Zw/NtCreateFile а посылку соответствующего IRP нужному устройству, или вызывает IoCreateFile. 
 cb.
 |  
|  |  | [ntddk]почему так происходит? (ntcreatefile)  10.07.02 13:52 Автор: NeuronViking Статус: Незарегистрированный пользователь
 |  
| > могу предположить что т.к. файл открывается редиректором то > он использует не вызов Zw/NtCreateFile а посылку
 > соответствующего IRP нужному устройству, или вызывает
 > IoCreateFile.
 >
 > cb.
 
 Есть у меня предположение что система при получении сетевого запроса на открытие/чтение файла от редиректора клиента не использует "по назначению" Zw/NtCreateFile(тогда нафиг их вообще использовать), а использет связку TDI(сервера) -> FSD(сервера) судя по протоколу CIFS. Т.е. при получении сетевого запроса от клиента транспорт TDI напрямую вызывает функции FSD(и соответственно не использует Zw/NtCreateFile). Либо другая возможность - TDI использует ИРПы, имхо это маловероятно.
 Единственная непонятность - нафига при этом система использует вызовы Zw/NtCreateFile ?!!
 Наверное я что-то где-то упустил.... все это весьма странно :(
 
 Забыл еще добавить, что та же самая петрушка происходить при вызове Zw/NtReadFile, Zw/NtWriteFile ....
 
 |  
|  |  |  | [ntddk]почему так происходит? (ntcreatefile)  10.07.02 16:42 Автор: cb <cb> Статус: Member
 |  
| > Есть у меня предположение что система при получении > сетевого запроса на открытие/чтение файла от редиректора
 > клиента .... использет связку
 > TDI(сервера) -> FSD(сервера) судя по протоколу CIFS.
 > Т.е. при получении сетевого запроса от клиента транспорт
 > TDI напрямую вызывает функции FSD(и соответственно не
 > использует Zw/NtCreateFile).
 
 Это маловероятно, т.к. если бы это было так то filemon загруженный после старта tdi & FS drivers не перехватывал бы IRP на открытие файла. А filemon их прекрасно ловит (проверил пару часов назад)
 
 >Либо другая возможность - TDI
 > использует ИРПы, имхо это маловероятно.
 
 вот это как раз наиболее вероятно...
 
 > Единственная непонятность - нафига при этом система
 > использует вызовы Zw/NtCreateFile ?!!
 
 что значит использует? тебе приходит вызов Zw/NtCreateFile с тем именем файла который пытаешься закрыть?
 
 > Забыл еще добавить, что та же самая петрушка происходить
 > при вызове Zw/NtReadFile, Zw/NtWriteFile ....
 
 странно все это... однако факт остается фактом - при перехвате доступа к FS через IoAttachDeviceToDeviceStack/IoAttachDevice или путем подмены обработчиков в DRIVER_OBJECT ты можешь контролировать все запросы.... (у меня это работает)
 
 cb.
 |  
|  |  |  |  | [ntddk]почему так происходит? (ntcreatefile)  10.07.02 17:02 Автор: NeuronViking Статус: Незарегистрированный пользователь
 |  
| > > Т.е. при получении сетевого запроса от клиента > транспорт
 > > TDI напрямую вызывает функции FSD(и соответственно не
 > > использует Zw/NtCreateFile).
 >
 > Это маловероятно, т.к. если бы это было так то filemon
 > загруженный после старта tdi & FS drivers не перехватывал
 > бы IRP на открытие файла. А filemon их прекрасно ловит
 > (проверил пару часов назад)
 
 Да, filemon перехватывает ИРПы, согласен.
 
 > >Либо другая возможность - TDI
 > > использует ИРПы, имхо это маловероятно.
 >
 > вот это как раз наиболее вероятно...
 Я уже начинаю в это верить...
 
 > > Единственная непонятность - нафига при этом система
 > > использует вызовы Zw/NtCreateFile ?!!
 >
 > что значит использует? тебе приходит вызов Zw/NtCreateFile
 > с тем именем файла который пытаешься закрыть?
 Да, мне прриходят эти вызовы когда удаленный клиент открывает файл.
 Я их глушу(не вызываю оригинальную функцию), но тем не менее файл клиентом серавно открывается. То же самое для функций чтения/записи.
 
 > странно все это... однако факт остается фактом - при
 > перехвате доступа к FS через
 > IoAttachDeviceToDeviceStack/IoAttachDevice или путем
 > подмены обработчиков в DRIVER_OBJECT ты можешь
 > контролировать все запросы.... (у меня это работает)
 
 так и будет работать ибо ниже ИРПов ничего нету ;) ... просто не хочется мне с ними трахаться... а видно все таки придется :(
 |  
 
 
 |  |