информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Есть ли в kernel'е аналоги функций GetShortPathName() and GetLongPathName() ? 29.05.02 22:33  Число просмотров: 1055
Автор: vim Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > >
> > > 
> > > NTSYSAPI
> > > NTSTATUS
> > > NTAPI
> > > ZwQueryInformationFile(
> > >	 IN HANDLE FileHandle,
> > >	 OUT PIO_STATUS_BLOCK IoStatusBlock,
> > >	 OUT PVOID FileInformation,
> > >	 IN ULONG Length,
> > >	 IN FILE_INFORMATION_CLASS
> FileInformationClass
> > >	 );
> > > 

---
> >
> > Не, это я знаю. Не подходит. Для этой функции нужен
> > FileHandle, т.е. файл предварительно должен быть
> открыт. А
> > мне наоборот, по имени файла нужно решить разрешать ли
> его
> > открывать или нет.
> >
> > Исходные данные - это строка текста с именем файла.
> > Из-за того, что у файла может быть два имени - длинное
> и
> > короткое, их оба нужно проверить. В этом вся проблема.
> Voobche to GetShortFielNAme()/GetLongFileNAme() otkryvet
> file, queryinfo, zakryvaet file, tak chto drugogo puti net
>
> FILEMONITOR TRACE dlia:
>
> char sz[200];
> ::GetShortPathName("c:\\Program Files",sz, 200);
> 

---
>
> 10:25:20 AM	temp.exe:245	IRP_MJ_CREATE	C:\Program
> Files	     SUCCESS Attributes: Any Options: Open   
> 10:25:20 AM	temp.exe:245	IRP_MJ_QUERY_INFORMATION   
>     C:\Program Files	    SUCCESS
> FileAlternateNameInformation	
> 10:25:20 AM	temp.exe:245	IRP_MJ_CLEANUP	C:\Program
> Files	     SUCCESS	     
> 10:25:20 AM	temp.exe:245	IRP_MJ_CLOSE	C:\Program
> Files	     SUCCESS	     
> 

---

Да, в принципе так она и должна работать.
Но проблема в том что это делается в user mode, а не в kernel.
<programming>
[Win32] Есть ли в kernel'е аналоги функций GetShortPathName() and GetLongPathName() ? 25.05.02 01:41  
Автор: vim Статус: Незарегистрированный пользователь
<"чистая" ссылка>

Нужно по имени файла получить его длинное и/или короткое имя
В Windows API это делается просто:

GetShortPathName(...)
GetLongPathName(...)

а в kernel'e подобных функций не нашел
но очень нужно

Подскажите может кто сталкивался с этим ?
[Win32] Есть ли в kernel'е аналоги функций GetShortPathName() and GetLongPathName() ? 25.05.02 03:47  
Автор: + <Mikhail> Статус: Elderman
Отредактировано 25.05.02 04:09  Количество правок: 2
<"чистая" ссылка>

NTSYSAPI
NTSTATUS
NTAPI
ZwQueryInformationFile(
    IN HANDLE FileHandle,
    OUT PIO_STATUS_BLOCK IoStatusBlock,
    OUT PVOID FileInformation,
    IN ULONG Length,
    IN FILE_INFORMATION_CLASS FileInformationClass
    );

---
[Win32] Есть ли в kernel'е аналоги функций GetShortPathName() and GetLongPathName() ? 25.05.02 11:01  
Автор: vim Статус: Незарегистрированный пользователь
<"чистая" ссылка>
>
> 
> NTSYSAPI
> NTSTATUS
> NTAPI
> ZwQueryInformationFile(
>     IN HANDLE FileHandle,
>     OUT PIO_STATUS_BLOCK IoStatusBlock,
>     OUT PVOID FileInformation,
>     IN ULONG Length,
>     IN FILE_INFORMATION_CLASS FileInformationClass
>     );
> 

---

Не, это я знаю. Не подходит. Для этой функции нужен FileHandle, т.е. файл предварительно должен быть открыт. А мне наоборот, по имени файла нужно решить разрешать ли его открывать или нет.

Исходные данные - это строка текста с именем файла.
Из-за того, что у файла может быть два имени - длинное и короткое, их оба нужно проверить. В этом вся проблема.
[Win32] Есть ли в kernel'е аналоги функций GetShortPathName() and GetLongPathName() ? 29.05.02 21:18  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
> >
> > 
> > NTSYSAPI
> > NTSTATUS
> > NTAPI
> > ZwQueryInformationFile(
> >	 IN HANDLE FileHandle,
> >	 OUT PIO_STATUS_BLOCK IoStatusBlock,
> >	 OUT PVOID FileInformation,
> >	 IN ULONG Length,
> >	 IN FILE_INFORMATION_CLASS FileInformationClass
> >	 );
> > 

---
>
> Не, это я знаю. Не подходит. Для этой функции нужен
> FileHandle, т.е. файл предварительно должен быть открыт. А
> мне наоборот, по имени файла нужно решить разрешать ли его
> открывать или нет.
>
> Исходные данные - это строка текста с именем файла.
> Из-за того, что у файла может быть два имени - длинное и
> короткое, их оба нужно проверить. В этом вся проблема.
Voobche to GetShortFielNAme()/GetLongFileNAme() otkryvet file, queryinfo, zakryvaet file, tak chto drugogo puti net

FILEMONITOR TRACE dlia:
char sz[200];
::GetShortPathName("c:\\Program Files",sz, 200);

---
10:25:20 AM	temp.exe:245	IRP_MJ_CREATE	C:\Program Files	SUCCESS	Attributes: Any Options: Open 	
10:25:20 AM	temp.exe:245	IRP_MJ_QUERY_INFORMATION	C:\Program Files	SUCCESS	FileAlternateNameInformation	
10:25:20 AM	temp.exe:245	IRP_MJ_CLEANUP	C:\Program Files	SUCCESS		
10:25:20 AM	temp.exe:245	IRP_MJ_CLOSE 	C:\Program Files	SUCCESS		

---
[Win32] Есть ли в kernel'е аналоги функций GetShortPathName() and GetLongPathName() ? 29.05.02 22:33  
Автор: vim Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > >
> > > 
> > > NTSYSAPI
> > > NTSTATUS
> > > NTAPI
> > > ZwQueryInformationFile(
> > >	 IN HANDLE FileHandle,
> > >	 OUT PIO_STATUS_BLOCK IoStatusBlock,
> > >	 OUT PVOID FileInformation,
> > >	 IN ULONG Length,
> > >	 IN FILE_INFORMATION_CLASS
> FileInformationClass
> > >	 );
> > > 

---
> >
> > Не, это я знаю. Не подходит. Для этой функции нужен
> > FileHandle, т.е. файл предварительно должен быть
> открыт. А
> > мне наоборот, по имени файла нужно решить разрешать ли
> его
> > открывать или нет.
> >
> > Исходные данные - это строка текста с именем файла.
> > Из-за того, что у файла может быть два имени - длинное
> и
> > короткое, их оба нужно проверить. В этом вся проблема.
> Voobche to GetShortFielNAme()/GetLongFileNAme() otkryvet
> file, queryinfo, zakryvaet file, tak chto drugogo puti net
>
> FILEMONITOR TRACE dlia:
>
> char sz[200];
> ::GetShortPathName("c:\\Program Files",sz, 200);
> 

---
>
> 10:25:20 AM	temp.exe:245	IRP_MJ_CREATE	C:\Program
> Files	     SUCCESS Attributes: Any Options: Open   
> 10:25:20 AM	temp.exe:245	IRP_MJ_QUERY_INFORMATION   
>     C:\Program Files	    SUCCESS
> FileAlternateNameInformation	
> 10:25:20 AM	temp.exe:245	IRP_MJ_CLEANUP	C:\Program
> Files	     SUCCESS	     
> 10:25:20 AM	temp.exe:245	IRP_MJ_CLOSE	C:\Program
> Files	     SUCCESS	     
> 

---

Да, в принципе так она и должна работать.
Но проблема в том что это делается в user mode, а не в kernel.
[Win32] Есть ли в kernel'е аналоги функций GetShortPathName() and GetLongPathName() ? 29.05.02 22:57  
Автор: + <Mikhail> Статус: Elderman
Отредактировано 29.05.02 23:35  Количество правок: 2
<"чистая" ссылка>
> > > >
> > > > 
> > > > NTSYSAPI
> > > > NTSTATUS
> > > > NTAPI
> > > > ZwQueryInformationFile(
> > > >	 IN HANDLE FileHandle,
> > > >	 OUT PIO_STATUS_BLOCK IoStatusBlock,
> > > >	 OUT PVOID FileInformation,
> > > >	 IN ULONG Length,
> > > >	 IN FILE_INFORMATION_CLASS
> > FileInformationClass
> > > >	 );
> > > > 

---
> > >
> > > Не, это я знаю. Не подходит. Для этой функции
> нужен
> > > FileHandle, т.е. файл предварительно должен быть
> > открыт. А
> > > мне наоборот, по имени файла нужно решить
> разрешать ли
> > его
> > > открывать или нет.
> > >
> > > Исходные данные - это строка текста с именем
> файла.
> > > Из-за того, что у файла может быть два имени -
> длинное
> > и
> > > короткое, их оба нужно проверить. В этом вся
> проблема.
> > Voobche to GetShortFielNAme()/GetLongFileNAme()
> otkryvet
> > file, queryinfo, zakryvaet file, tak chto drugogo puti
> net
> >
> > FILEMONITOR TRACE dlia:
> >
> > char sz[200];
> > ::GetShortPathName("c:\\Program Files",sz, 200);
> > 

---
> >
> > 10:25:20 AM	temp.exe:245	IRP_MJ_CREATE  
> C:\Program
> > Files	     SUCCESS Attributes: Any Options: Open   
> > 10:25:20 AM	temp.exe:245   
> IRP_MJ_QUERY_INFORMATION   
> >	 C:\Program Files	    SUCCESS
> > FileAlternateNameInformation	
> > 10:25:20 AM	temp.exe:245	IRP_MJ_CLEANUP 
> C:\Program
> > Files	     SUCCESS	     
> > 10:25:20 AM	temp.exe:245	IRP_MJ_CLOSE   
> C:\Program
> > Files	     SUCCESS	     
> > 

---
>
> Да, в принципе так она и должна работать.
> Но проблема в том что это делается в user mode, а не в
> kernel.

Voobche to vsia rabota s filami delaetsia v kernel mode! (ring0)

I kogda ta function vyzyvaetsia proishodit perekluchenie v ring0 dlia kazdoi API raboty s failomi i tam vyzyvaetsi to chto nado , v dannom sluchae open file, query info, close.

P.S. Tak chto sozdai svoi functions GetShortfileName()/GetLongfileAme() i vnutri ih otkryvai file query info i t.d...
[Win32] Есть ли в kernel'е аналоги функций GetShortPathName() and GetLongPathName() ? 29.05.02 23:32  
Автор: vim Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > > > >
> > > > > 
> > > > > NTSYSAPI
> > > > > NTSTATUS
> > > > > NTAPI
> > > > > ZwQueryInformationFile(
> > > > >	 IN HANDLE FileHandle,
> > > > >	 OUT PIO_STATUS_BLOCK
> IoStatusBlock,
> > > > >	 OUT PVOID FileInformation,
> > > > >	 IN ULONG Length,
> > > > >	 IN FILE_INFORMATION_CLASS
> > > FileInformationClass
> > > > >	 );
> > > > > 

---
> > > >
> > > > Не, это я знаю. Не подходит. Для этой
> функции
> > нужен
> > > > FileHandle, т.е. файл предварительно должен
> быть
> > > открыт. А
> > > > мне наоборот, по имени файла нужно решить
> > разрешать ли
> > > его
> > > > открывать или нет.
> > > >
> > > > Исходные данные - это строка текста с именем
> > файла.
> > > > Из-за того, что у файла может быть два имени
> -
> > длинное
> > > и
> > > > короткое, их оба нужно проверить. В этом вся
> > проблема.
> > > Voobche to GetShortFielNAme()/GetLongFileNAme()
> > otkryvet
> > > file, queryinfo, zakryvaet file, tak chto drugogo
> puti
> > net
> > >
> > > FILEMONITOR TRACE dlia:
> > >
> > > char sz[200];
> > > ::GetShortPathName("c:\\Program Files",sz, 200);
> > > 

---
> > >
> > > 10:25:20 AM	temp.exe:245	IRP_MJ_CREATE  
> > C:\Program
> > > Files      SUCCESS Attributes: Any Options: Open   
> > > 10:25:20 AM	temp.exe:245   
> > IRP_MJ_QUERY_INFORMATION	
> > >	 C:\Program Files	    SUCCESS
> > > FileAlternateNameInformation	
> > > 10:25:20 AM	temp.exe:245	IRP_MJ_CLEANUP 
> > C:\Program
> > > Files      SUCCESS	     
> > > 10:25:20 AM	temp.exe:245	IRP_MJ_CLOSE   
> > C:\Program
> > > Files      SUCCESS	     
> > > 

---
> >
> > Да, в принципе так она и должна работать.
> > Но проблема в том что это делается в user mode, а не в
> > kernel.
>
> Voobche to vsia rabota s filami delaetsia v kernel mode!
> (ring0)
>
> I kogda ta function vyzyvaetsia proishodit perekluchenie v
> ring0 dlia kazdoi API raboty s failomi i tam vyzyvaetsi to
> chto nado , v dannom sluchae open file, query info, close.
>
> P.S. Tak chto sozdai svoi functions
> GetShortfileName()/GetLongfileAme() i vnutri ih otkryvai
> file query info i t.d...

Точно, я что-то сразу не въехал :-((
Ок, попробую, спасибо
[Win32] нет, так не работает, но нашел другой способ 30.05.02 23:22  
Автор: vim Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > > > > >
> > > > > > 
> > > > > > NTSYSAPI
> > > > > > NTSTATUS
> > > > > > NTAPI
> > > > > > ZwQueryInformationFile(
> > > > > >	 IN HANDLE FileHandle,
> > > > > >	 OUT PIO_STATUS_BLOCK
> > IoStatusBlock,
> > > > > >	 OUT PVOID FileInformation,
> > > > > >	 IN ULONG Length,
> > > > > >	 IN FILE_INFORMATION_CLASS
> > > > FileInformationClass
> > > > > >	 );
> > > > > > 

---
> > > > >
> > > > > Не, это я знаю. Не подходит. Для этой
> > функции
> > > нужен
> > > > > FileHandle, т.е. файл предварительно
> должен
> > быть
> > > > открыт. А
> > > > > мне наоборот, по имени файла нужно
> решить
> > > разрешать ли
> > > > его
> > > > > открывать или нет.
> > > > >
> > > > > Исходные данные - это строка текста с
> именем
> > > файла.
> > > > > Из-за того, что у файла может быть два
> имени
> > -
> > > длинное
> > > > и
> > > > > короткое, их оба нужно проверить. В
> этом вся
> > > проблема.
> > > > Voobche to
> GetShortFielNAme()/GetLongFileNAme()
> > > otkryvet
> > > > file, queryinfo, zakryvaet file, tak chto
> drugogo
> > puti
> > > net
> > > >
> > > > FILEMONITOR TRACE dlia:
> > > >
> > > > char sz[200];
> > > > ::GetShortPathName("c:\\Program Files",sz,
> 200);
> > > > 

---
> > > >
> > > > 10:25:20 AM	temp.exe:245   
> IRP_MJ_CREATE  
> > > C:\Program
> > > > Files	  SUCCESS Attributes: Any Options:
> Open   
> > > > 10:25:20 AM	temp.exe:245   
> > > IRP_MJ_QUERY_INFORMATION	
> > > >	 C:\Program Files	    SUCCESS
> > > > FileAlternateNameInformation	
> > > > 10:25:20 AM	temp.exe:245   
> IRP_MJ_CLEANUP 
> > > C:\Program
> > > > Files	  SUCCESS	     
> > > > 10:25:20 AM	temp.exe:245   
> IRP_MJ_CLOSE   
> > > C:\Program
> > > > Files	  SUCCESS	     
> > > > 

---
> > >
> > > Да, в принципе так она и должна работать.
> > > Но проблема в том что это делается в user mode, а
> не в
> > > kernel.
> >
> > Voobche to vsia rabota s filami delaetsia v kernel
> mode!
> > (ring0)
> >
> > I kogda ta function vyzyvaetsia proishodit
> perekluchenie v
> > ring0 dlia kazdoi API raboty s failomi i tam
> vyzyvaetsi to
> > chto nado , v dannom sluchae open file, query info,
> close.
> >
> > P.S. Tak chto sozdai svoi functions
> > GetShortfileName()/GetLongfileAme() i vnutri ih
> otkryvai
> > file query info i t.d...
>
> Точно, я что-то сразу не въехал :-((
> Ок, попробую, спасибо
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Попробовал, не работает
ZwQueryInformationFile() возвращает точно такое же имя файла, которое ты задал при его открытии по ZwCreateFile().

Нашел другую функцию, которая вроде бы должна возвращать оба имени -
Zw(Nt)QueryDirectoryFile() с параметром FileBothDirectoryInformation.

Только работы много получается: придется самому разбивать имя файла на составляющие поддиректории и каждую из них открывать и сканировать на поиск нужного элемента.

vim
[Win32] нет, так не работает, но нашел другой способ 31.05.02 09:29  
Автор: cb <cb> Статус: Member
<"чистая" ссылка>
> Только работы много получается: придется самому разбивать
> имя файла на составляющие поддиректории и каждую из них
> открывать и сканировать на поиск нужного элемента.


IMHO - может быть все это лучше проделать заранее т.е. добавить в список все возможные варианты имени?

cb.
[Win32] нет, так не работает, но нашел другой способ 31.05.02 10:21  
Автор: vim Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > Только работы много получается: придется самому
> разбивать
> > имя файла на составляющие поддиректории и каждую из
> них
> > открывать и сканировать на поиск нужного элемента.
>
>
> IMHO - может быть все это лучше проделать заранее т.е.
> добавить в список все возможные варианты имени?
>
> cb.

Да, тоже вариант
Для имени файла с N поддиректориями это будет 2^N возможных имен
Вряд ли N будет превышать глубину в несколько директорий

vim
[Win32] Есть ли в kernel'е аналоги функций GetShortPathName() and GetLongPathName() ? 29.05.02 11:11  
Автор: cb <cb> Статус: Member
<"чистая" ссылка>
> Исходные данные - это строка текста с именем файла.
> Из-за того, что у файла может быть два имени - длинное и
> короткое, их оба нужно проверить. В этом вся проблема.

если список файлов для фильтрации передается драйверу из usermode то как вариант можно сделать следующее:

в usermode получить оба имени - длинное и короткое - и добавить оба

cb.

btw
я так понимаю речь идет про winnt/2k/xp?
[Win32] Есть ли в kernel'е аналоги функций GetShortPathName() and GetLongPathName() ? 29.05.02 22:26  
Автор: vim Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > Исходные данные - это строка текста с именем файла.
> > Из-за того, что у файла может быть два имени - длинное
> и
> > короткое, их оба нужно проверить. В этом вся проблема.
>
> если список файлов для фильтрации передается драйверу из
> usermode то как вариант можно сделать следующее:
>
> в usermode получить оба имени - длинное и короткое - и
> добавить оба
>
> cb.
>
> btw
> я так понимаю речь идет про winnt/2k/xp?


Нет, немного не так.
У меня есть список файлов, которые должны быть ReadOnly.
При попытке открытия файла я проверяю его наличие в списке R/O файлов, и если он там есть, то делаю access denied.
Задавать оба имени сразу – нельзя, так как помимо первых двух вариантов (длинное или короткое), может быть и третий – часть имени длинная, часть короткая, а это уже ни под какую заранее составленную маску не подходит.

Похоже единственный вариант который я вижу это сделать некий сервис в usermode и ему из драйвера посылать на проверку имя файла (к примеру через shared memory). Тогда он будет вызывать GetLongPathName() и возвращать в драйвер полученное имя.
Не очень красиво, но другой способ не просматривается.
Теоретически на быстродействии сказаться не должно. Операция открытия файла на запись довольно редкая, поэтому задержка на n-милисекунд вроде бы не должна сильно тормозить. По крайне мере в теории.

vim
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach