|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 2, 2004 19:08:16 У меня trabl. FileName from handle Всем привет.У меня проблема.Мне нужно получить имя файла имея его handle.Вообще насколько это реально я не знаю.Сейчас ковыряю в таком направлении: ZwQueryInformationFile(FileHandle,&IoStatusBlockQ,&FileInformation,\ sizeof(FILE_NAME_INFORMATION),FileNameInformation); text_2 = (PCHAR)ExAllocatePool(NonPagedPool ,FileInformation.FileNameLength+1); if(text_2 != NULL) { // memset(text_2,0,FileInformation.FileNameLength+1); RtlFillMemory(text_2,FileInformation.FileNameLength+1,0); // memcpy(text_2,FileInformation.FileName,FileInformation.FileNameLen gth); RtlCopyMemory(text_2,FileInformation.FileName,FileInformation.FileNa meLength); DbgPrint("\nHookReadFile:\n\tPID:%lu\nFileName:%s\n",PsGetCurrentPro cessId(),text_2); ExFreePool(text_2); } ... typedef struct _FILE_NAME_INFORMATION { ULONG FileNameLength; WCHAR FileName[1]; } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; Принт text_2 выводит только первый символ.(%s или %S->тоже фигня). Подскажите че не так или какие есть еще методы. Заранее большое спасибо. |
|
|
Дата: Сен 2, 2004 19:56:50 VOOrDOOluck Чем тебя не устраивает функция GetModuleFileName ?? |
|
|
Дата: Сен 2, 2004 21:48:55 Наверное тем, что это kernel mode :) |
|
|
Дата: Сен 2, 2004 22:47:43 volodya В вопросе про ядро не упоминалось.. |
|
|
Дата: Сен 2, 2004 22:56:57 ExAllocatePool/ExFreePool - вот тебе и ответ. |
|
|
Дата: Сен 3, 2004 00:50:46 А разве GetModuleFileName подойдет для хендла открытого файла? Это же для подгруженного модуля? К тому же, кажется, у человека проблема скорее с выводом имени файла, а не с его получением. |
|
|
Дата: Сен 3, 2004 01:40:50 Попробуй ObReferenceObjectByHandle/ObQueryNameString [ VOOrDOOluck: Принт text_2 выводит только первый символ.(%s или %S->тоже фигня). ] Так ты пытаешься unicode-строку как ansi выводить! Юзай % |
|
|
Дата: Сен 3, 2004 01:41:52%ws |
|
|
Дата: Сен 3, 2004 04:46:51 Кроме ObReferenceObjectByHandle, если не хочешь лишний раз reference этот самый файл можешь поизвращаться с ZwQuerySystemInformation класс SystemHandleInformation. |
|
|
Дата: Сен 3, 2004 15:41:04 В принципе связка ObReferenceObjectByHandle/ObQueryNameString работает получше но она если срабатывает то выводит инфо наподобие device\#hex(или путь к hardvolium_num...polices...). Это лучше чем ничего но немного не то. Я делаю так: nt = ObReferenceObjectByHandle(FileHandle,/*MAXIMUM_ALLOWED*/0,0,UserMode,&Object,NULL); ... nt = ObQueryNameString(Object,DestinationStringW,1024,&i); Может я в ObReferenceObjectByHandle что то не то прописал. И еще вопрос в данном направлении.После ObReferenceObjectByHandle как я понимаю Object является в принципе объектом на файл.Попробовал pF = (PFILE_OBJECT)Object; pF->FileName; Но результата вообще нет.(или "" или(null)).Почему так получается. Four-F(MSDN) %s - (String) When used with printf functions, specifies a single-byte–character string; %S - (String) When used with printf functions, specifies a wide-character string; Результат ObQueryNameString вывожу через %S нормально (через %s "\"). |
|
|
Дата: Сен 3, 2004 16:27:47 Не вспомню чево сразу не пахало(частично)но так пашет. nt = ObReferenceObjectByHandle(FileHandle,0,0,UserMode,&pF,NULL); if (nt == STATUS_SUCCESS) { DbgPrint("\nnHookReadFile PID:%lu\nObReferenceObjectByHandle FileObject name:%S\nLength:%lu\n\n",\ PsGetCurrentProcessId(),pF->FileName.Buffer,pF->FileName.Length); ObDereferenceObject(&pF); } Всем большое спасибо |
|
|
Дата: Сен 3, 2004 17:03:59 [ VOOrDOOluck: выводит инфо наподобие device\#hex(или путь к hardvolium_num...polices...) ] RtlVolumeDeviceToDosName |
|
|
Дата: Сен 3, 2004 17:23:04 Four-F Не знаю поможет ли RtlVolumeDeviceToDosName но что такое manifest,polices и тд я пока вообще не знаю.Наврят ли так имена файлов будут называться или нет? |
|
|
Дата: Сен 8, 2004 01:06:12 2 VOOrDOOluck: А не не получится. Я тоже пытался это узнать. В результате маего ислодования я узнал что при создании файла ядро находит файл на диске и сохраняет информацию о его место расположение, потом строка и названием пути к файлу освобождается. :(((( |
|
|
Дата: Сен 10, 2004 14:15:00 Songoku А можеш както поподробнее свои наблюдения. То что мне нужно у меня получилось.При использовании ObReferenceObjectByHandle в вых параметре FILE_OBJECT содержится имя файла,если это файл, а если это не файл а какойто device то имя файла равно нулю и тогда нужно смотреть объект DEVICE_OBJECT в FILE_OBJECT .Я все понял именно так и то что мне нужно было у меня получилось.Наврядли это было совпадением. И помойму сама система при запросах подобного рода делает именно так. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.087 |