Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.01 c
1-89869
Ламер
2003-11-16 01:56
2003.11.27
Тэг кнопки


14-90088
ИМХО
2003-11-04 00:57
2003.11.27
gsdll32.dll


4-90179
ARTEMKA
2003-10-06 02:55
2003.11.27
Регион в движении


1-89947
mmmaloy
2003-11-18 01:05
2003.11.27
TreeView программно


3-89790
jonni
2003-11-05 18:57
2003.11.27
kak dobavit pole v tablice?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский