mykola » 28.05.2006 (Вс) 11:42
ответы походу были очень "по теме". Получил много полезной инфы, спасибо модераторам.
Суть проблемы была насколько я понял в следующем:
Задача: удалить файл, дескриптор которого был открыт другим процессом.
По странному стечению обстоятельств тоже столкнулся с этой проблемой. Первое что сделал - полез в гугл. В отвте получил три листа ссылок на форумы с такого рода флудом. Уже конечно немного поздно, но опишу как это сделать:
После того как мы определились к какому конкретно файлу необходимо получить доступ (с целью удалить, модифицировать, закрыть все связанные с этим файлом дескрипторы) рекомендую пользовать следующим api: (если кто подскажет способ получше - пишите не, стесняйтесь)
NtQuerySystemInformation - для получения списка процессов и списка открытых дескрипторов всеми процессами системы.
NtQueryObject - для получения информации от менеджера объектов системы.
OpenProcess - для получения дескриптора выбранного процесса.
DuplicateHandle - для получения копии дескриптора открытого выбранным процессом объекта.
CloseHandle - для освобождения дескриптора объекта.
GetLogicalDrives - для трансляции внутреннего имени файла в имя вида "диск:\путь\имя.тип".
QueryDosDevice - для трансляции внутреннего имени файла.
OpenProcessToken, GetTokenInformation, LookupAccountSid - для получения имени пользователя, запустившего процесс.
PS. win2000 в чистом виде весит 160мб. Это с эксплорером и xml. навесьте дрова, net и jre - 400 мб с большим запасом на полноценно рабочую систему. Правда хелпа там не будет. А тут похоже он кое кому нужен.