информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медЗа кого нас держат?Spanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[Win32] Есть ли в kernel'е аналоги функций GetShortPathName() and GetLongPathName() ? 29.05.02 22:33  Число просмотров: 1136
Автор: 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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach