Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.27;
Скачать: CL | DM;

Вниз

Кто держит файл   Найти похожие ветки 

 
GROL ©   (2003-09-15 22:49) [0]

Пытаюсь в программе удалить папку с файлами, но те могут быть кем то заняты, к примеру, doc-и вордом, и соответственно не удалятся. Есть ли способ определить, какая программа "держит" файл?


 
NightAngel ©   (2003-09-15 23:00) [1]

Есть, и даже не один. Всё зависит от того под какую платформу это нужно сделать.


 
GROL ©   (2003-09-15 23:20) [2]

Под все Win


 
GROL ©   (2003-09-16 20:15) [3]

Ну и че, типа можно, но как, ни кто не в курсе?


 
NightAngel ©   (2003-09-16 22:49) [4]

Способ номер раз:
При помощи ф-ции ZwQuerySystemInformation получить SystemHandleInformation, далее пройтись по всем полученным handle, отобразить их в свой процесс и исследовать (не забывая их закрывать, а то таблица описателей разрастётся, а также будет заблокирована на время работы своего процесса возможность уничтожения объектов).

Способ номер два:
Более трудный, но более быстрый. Надо написать свой драйвер, получить через handle указатель на объект (ObReferenceObjectByHandle), далее получить указатель на заголовок объекта (по смещению - 0x18 ниже адреса объекта).
typedef struct _OBJECT_HEADER
{
/*000*/ DWORD PointerCount; // number of references
/*004*/ DWORD HandleCount; // number of open handles
/*008*/ POBJECT_TYPE ObjectType;
/*00C*/ BYTE NameOffset; // -> OBJECT_NAME
/*00D*/ BYTE HandleDBOffset; // -> OBJECT_HANDLE_DB
/*00E*/ BYTE QuotaChargesOffset; // -> OBJECT_QUOTA_CHARGES
/*00F*/ BYTE ObjectFlags; // OB_FLAG_*
/*010*/ union
{ // OB_FLAG_CREATE_INFO ? ObjectCreateInfo : QuotaBlock
/*010*/ PQUOTA_BLOCK QuotaBlock;
/*010*/ POBJECT_CREATE_INFO ObjectCreateInfo;
/*014*/ };
/*014*/ PSECURITY_DESCRIPTOR SecurityDescriptor;
/*018*/ }
OBJECT_HEADER,
* POBJECT_HEADER,
**PPOBJECT_HEADER;
Далее по смещению HandleDBOffset от указателя на объект (по моему от него все отсчитывают, но это легко проверить или самому, или у Шрайбера почитать) в сторону уменьшения адресов получить указатель на структуру _OBJECT_HANDLE_DB, в этой структуре если счетчик == 1 то в объединении указатель на процесс владелец, если больше единицы - указатель на структуру _OBJECT_HANDLE_DB_LIST которая содержит массив структур OBJECT_HANDLE_DB с указателями на процессы. Утиочнить все это можно в книге C. Шрайбер "Недокументированные возможности Windows 2000". У меня её под рукой сейчас нет.


 
Е-Моё имя ©   (2003-09-17 09:54) [5]


> NightAngel ©

респекты



Страницы: 1 вся ветка

Текущий архив: 2003.11.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.019 c
1-89860
Сергей Петров
2003-11-16 04:55
2003.11.27
Как открыть файл, зарегистрированный в системе (mp3,m3u,avi,...)


1-89855
Боян Георгиев
2003-11-16 14:33
2003.11.27
Функция Read для стрингов


14-90103
PavelSin
2003-11-04 10:40
2003.11.27
Просмоторщик дайджестов


4-90161
andre
2003-10-03 01:55
2003.11.27
Зеркальный битмап


6-90051
Дмитрий В. Белькевич
2003-09-16 23:42
2003.11.27
Ping из-под НЕ админа