Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   ntdll.h (http://forum.oszone.net/showthread.php?t=30690)

Lood 28-01-2003 13:55 209712

Помогите найти хидер ntdll.h под W2k DDK - его нет в стандартной поставке DDK, а все экзамплы ссылаются на него... :((

В DDK я ни разу не программирвал, теперь вот нужно наваять утилитку для сноса блокирующих ресурсы процессов...
В общем, беда.

Lood 28-01-2003 18:02 209713

:up:
Спасибо Билли Поттеру - всё получилось. Чёртов хидер сваял руками. :)

vasketsov 28-01-2003 18:27 209714

Lood
Если чего надо конкретно - пиши, вроде разбираемся в меру сил в этом. :shuffle:

Lood 28-01-2003 19:36 209715

Спасибо, надо :)

ZwQueryObject возвращает мне имя открытого файла в виде "\Device\HarddiskVolume2\TEMP\~DFA514.tmp" :o

Как мне получить соответствие "\Device\HarddiskVolume" его DosDevice ?
Рою DDK, зарылся уже поуши, а света пока нет... :(

vasketsov 28-01-2003 20:17 209716

Lood
1) ZwQueryinformationFile(что-то типа FileNameInformation) вернет тебе его сразу, если это возможно.

2) Это соответствие не всегда однозначно, так что вопрос ставишь некорректно. Примеры - subst и net use (кстати, имя будет \Device\LanmanRedirector\..) Если надо все - задача решается от обратного. Перечисляются все диски в виде DosDevice, для каждого строится имя в Native-формате и потом построчно они сравниваются, везде где совпало - потенциально возможное имя, выбирай любое.

Lood 28-01-2003 20:38 209717

Да, я неверно поставил вопрос.

Именно из-за возможных subst мне нужно получать имя в формате \Device\... (Я так понимаю, мапировка subst глубоко по-барабану в данном варианте).  :up:
А вот насчёт возможности "net use" на локальный путь я забыл... Гм... придётся думать, как это обойти  :(

Я делаю небольшую консольную утилитку, которая будет сносить процессы, удерживающие файлы в определённых каталогах. С проблемой врагов, пролезших через сеть, я разобрался достаточно просто. А вот те, кто сидит в терминальных сессиях (имеет место быть терминальный сервер с кучей народу на нём) - из за этих гм... нехороших людей пришлось лезть в DDK.  :gigi:

Затык у меня вот какой - как мне перевести имя логического диска из Dos формата в этот самый \Device\HarddiskVloume# ? :o

vasketsov 28-01-2003 21:01 209718

Lood
Пример такой функции (а их даже 2 будет) я приведу через пару дней на zw.nightmail.ru. Как время будет - залью ее туда.

Цитата:

А вот насчёт возможности "net use" на локальный путь я забыл... Гм... придётся думать, как это обойти  
Проблемы на самом деле нет. Эти файлы открываются на клиенте, у них префикс \Device\LanmanRedirector как я написал. А на сервере они открываются в процессе System с локальным именем.

Lood 28-01-2003 21:11 209719

vasketsov
Большое спасибо за помощь! :)

С net use действительно проблем нет - я их ловлю через NetApi.

А вот насчёт соответствия DosName-Device - не подскажешь хоть примерно, где рыть? Имя функции, дальше я сам разгребу... Нашел в реестре ключ HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices - но кажется это не совсем то, что надо...

vasketsov 29-01-2003 17:07 209720

Lood
http://zw.nightmail.ru/_filenam.htm
Толькопервая часть, но я так понял, у тебя проблем с получением имени файлв по хэндлу нет и с перечислением загруженных библиотек - тоже.

Lood 29-01-2003 20:33 209721

Огромное спасибо, всё прекрасно работает.  :up:  :oszone:

Но вот вопрос: при ZwQueryObject(..., ObjectNameInformation, ...) на некоторые процессы, а так же подвисшие приложения - моя прога тут же затягивает узел на той же вешалке.
В доке написано, что так и должно быть:
Цитата:

If the object to which the handle refers is a file object and the handle was opened for synchronous access (by specifying FILE_SYNCHRONOUS_IO_ALERT or FILE_SYNCHRONOUS_IO_NONALERT as CreateOptions), queries of this information class will be synchronized with other file operations on the handle.
Нет ли другого пути получить то же инфо?
Сейчас я отказался от анализа процессов, запущенных под SYSTEM account, чтобы не налететь на службы. Но любой подвешенный процесс вешает так же и мой...

vasketsov 29-01-2003 20:44 209722

Lood
А, все таки грабли нащупал! Напишу скоро продолжение, как правильно по hFile получить его имя. Жди.

Принципиально другого пути, чтоб не блокировался запрос, нет.

vasketsov 30-01-2003 16:58 209723

Lood
В статье нашлась необльшая ошибочка в нижней функции, сейчас она уже исправлена. Функция переписана так, чтоб работать на всех NT4 и 2000. Так что прими к сведению.

Lood 30-01-2003 17:13 209724

Ок, спасибо.

В верхней функции я в вызове ZwQuerySymbolicLinkObject добавил третий параметр - без него она глючила - возвращала мусор хвосте строки. :o

vasketsov 30-01-2003 18:31 209725

Lood
как это?
просто длину она тоже устанавливает.
вообще у меня ни разу это не глючило.


Время: 13:05.

Время: 13:05.
© OSzone.net 2001-