Помогите найти хидер ntdll.h под W2k DDK - его нет в стандартной поставке DDK, а все экзамплы ссылаются на него... :((
В DDK я ни разу не программирвал, теперь вот нужно наваять утилитку для сноса блокирующих ресурсы процессов... В общем, беда. |
:up:
Спасибо Билли Поттеру - всё получилось. Чёртов хидер сваял руками. :) |
Lood
Если чего надо конкретно - пиши, вроде разбираемся в меру сил в этом. :shuffle: |
Спасибо, надо :)
ZwQueryObject возвращает мне имя открытого файла в виде "\Device\HarddiskVolume2\TEMP\~DFA514.tmp" :o Как мне получить соответствие "\Device\HarddiskVolume" его DosDevice ? Рою DDK, зарылся уже поуши, а света пока нет... :( |
Lood
1) ZwQueryinformationFile(что-то типа FileNameInformation) вернет тебе его сразу, если это возможно. 2) Это соответствие не всегда однозначно, так что вопрос ставишь некорректно. Примеры - subst и net use (кстати, имя будет \Device\LanmanRedirector\..) Если надо все - задача решается от обратного. Перечисляются все диски в виде DosDevice, для каждого строится имя в Native-формате и потом построчно они сравниваются, везде где совпало - потенциально возможное имя, выбирай любое. |
Да, я неверно поставил вопрос.
Именно из-за возможных subst мне нужно получать имя в формате \Device\... (Я так понимаю, мапировка subst глубоко по-барабану в данном варианте). :up: А вот насчёт возможности "net use" на локальный путь я забыл... Гм... придётся думать, как это обойти :( Я делаю небольшую консольную утилитку, которая будет сносить процессы, удерживающие файлы в определённых каталогах. С проблемой врагов, пролезших через сеть, я разобрался достаточно просто. А вот те, кто сидит в терминальных сессиях (имеет место быть терминальный сервер с кучей народу на нём) - из за этих гм... нехороших людей пришлось лезть в DDK. :gigi: Затык у меня вот какой - как мне перевести имя логического диска из Dos формата в этот самый \Device\HarddiskVloume# ? :o |
Lood
Пример такой функции (а их даже 2 будет) я приведу через пару дней на zw.nightmail.ru. Как время будет - залью ее туда. Цитата:
|
vasketsov
Большое спасибо за помощь! :) С net use действительно проблем нет - я их ловлю через NetApi. А вот насчёт соответствия DosName-Device - не подскажешь хоть примерно, где рыть? Имя функции, дальше я сам разгребу... Нашел в реестре ключ HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices - но кажется это не совсем то, что надо... |
Lood
http://zw.nightmail.ru/_filenam.htm Толькопервая часть, но я так понял, у тебя проблем с получением имени файлв по хэндлу нет и с перечислением загруженных библиотек - тоже. |
Огромное спасибо, всё прекрасно работает. :up: :oszone:
Но вот вопрос: при ZwQueryObject(..., ObjectNameInformation, ...) на некоторые процессы, а так же подвисшие приложения - моя прога тут же затягивает узел на той же вешалке. В доке написано, что так и должно быть: Цитата:
Сейчас я отказался от анализа процессов, запущенных под SYSTEM account, чтобы не налететь на службы. Но любой подвешенный процесс вешает так же и мой... |
Lood
А, все таки грабли нащупал! Напишу скоро продолжение, как правильно по hFile получить его имя. Жди. Принципиально другого пути, чтоб не блокировался запрос, нет. |
Lood
В статье нашлась необльшая ошибочка в нижней функции, сейчас она уже исправлена. Функция переписана так, чтоб работать на всех NT4 и 2000. Так что прими к сведению. |
Ок, спасибо.
В верхней функции я в вызове ZwQuerySymbolicLinkObject добавил третий параметр - без него она глючила - возвращала мусор хвосте строки. :o |
Lood
как это? просто длину она тоже устанавливает. вообще у меня ни разу это не глючило. |
Время: 13:05. |
Время: 13:05.
© OSzone.net 2001-