Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 7
1

Как узнать какой процесс какой файл использует?

29.03.2011, 10:07. Просмотров 5298. Ответов 6
Метки нет (Все метки)

Здравствуйте, подскажите как можно узнать какой процесс какой файл использует? Преподаватель предложил использовать хуки, но пока не получается понять, как они могут помочь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2011, 10:07
Ответы с готовыми решениями:

Как узнать, какой функции какой файл *.a соответсвует?
Друзья! Работаю с mingw, вот там надо так: если, допустим, вызываешь API- функцию, то надо...

Как в WM_COMMAND узнать, по какой из кнопок произошел клик?
Если у меня в клиентской области расположены девять дочерних окон("Button"), как в WM_COMMAND...

Какой самый простой способ передачи числа в процесс?
Есть главное приложение. В нём запускается дочерний процесс "push.exe" которое должно от...

Как узнать, использует окно DirectX или OpenGL?
Подскажите, можно ли узнать по дескриптору, использует окно DirectX или OpenGL? Или для этого...

6
65 / 53 / 4
Регистрация: 06.09.2010
Сообщений: 254
29.03.2011, 13:12 2
Хуки позволяют подгрузить свою динамическую библиотеку в адресное пространство всех запущенных (и запускаемых) процессов. Работая в контексте другого процесса, можно перечислить его хэндлы, узнать, какие из них соответствуют файлам и получить информацию о файлах. Альтернативный вариант - написать драйвер и проанализировать структуры ядра ОС. Но если опыта в написании драйверов нет, лучше использовать хуки

Примеров использования хуков в сети много, попробуйте погуглить хотя бы на тему "как написать кейлогер".
1
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 7
29.03.2011, 21:10  [ТС] 3
А как именно можно перечислить хендлы процесса и соотнести их с файлами? Просто все что получилось найти для поиска хэндлов открытых фалов, это примеры с ZwQueryInformationProcess, GetInfoTable(SystemHandleInfor mation). Но вроде как это не то.
0
65 / 53 / 4
Регистрация: 06.09.2010
Сообщений: 254
29.03.2011, 21:17 4
Первая строка в гугле по запросу "winapi enumerate handles"

http://stackoverflow.com/questions/2...e-handles-in-c
1
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 7
29.03.2011, 22:36  [ТС] 5
Насколько я поняла, получится через NtQuerySystemInformation
0
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 7
03.04.2011, 21:02  [ТС] 6
Насколько я поняла, хуки помогут только с процессами у которых есть окна, а что делать с остальными?
0
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 7
07.04.2011, 12:37  [ТС] 7
Предыдущий вопрос уже не важен.
Пытаюсь разобраться с хуками. По тому, что прочитала вот, что получилось:
hmon.cpp (dll)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<Windows.h>
#include <iostream>
using namespace std;
 
HHOOK hook;
HINSTANCE hin;
 
#pragma  data_seg(".shardata")
static int i=0;
#pragma data_seg();
extern "C" __declspec(dllexport) 
 
 
LRESULT CALLBACK CallWndProc( int nCode, WPARAM wParam,LPARAM lParam)
{
    if (nCode==HC_ACTION)
    {
        i++;
            cout<<"Action"<<endl;
            return CallNextHookEx(hook, nCode, wParam, lParam);
    }
    else{
        cout<<"no Action"<<endl;
    return CallNextHookEx(hook, nCode, wParam, lParam);
    }
}
extern "C" __declspec(dllexport) int End()
{
    int a;
    a=i;
    return a;
}
 
extern "C" __declspec(dllexport) bool Begin()
{
    cout<<"Hook ON"<<endl;
    hook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc,hin, NULL);
    return true;
}
и mon.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <windows.h>
#include <iostream>
#include <conio.h>
using namespace std;
 
bool(*Begin)();
int (*End)();
int main()
{
    HINSTANCE h;
int a;
    h = LoadLibrary(L"hmon");
    if( h != NULL )
        cout<<"Loaded"<<endl;
    else
    {
        cout<<"Cannot load"<<endl;
        exit(0);
    }
 
    Begin = (bool (*)())GetProcAddress(h, "Begin");
    End=(int (*)())GetProcAddress(h,"End");
    Begin();
    getch();
    a=End();
    printf("a=%d",a);
    FreeLibrary(h);
    return 0;
}
но хук ничего не отлавливает. Подскажите, что не так?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2011, 12:37

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Есть исходники браузера, на С++, где найти информацию или как определить какой файл, за что отвечает?
доброго времени, форумчане. Есть исходники браузера, на С+. Файлов немерено. Где найти информацию...

Как определить, какой процесс в данный момент использует файл? Хочу написать бесплатный аналог Unlocker
Просто Unlocker требует установки и он платный:(

Как узнать, какой процесс блокирует файл?
Перед открытием файла необходимо проверить его &quot;занятость&quot;. Если таковая имеется, то CreateFile...

Как можно посмотреть, кто использует сеть, какой процесс?
Заметил что при закачке, скорость с 1 мб падает до 0.67 мб (когда я его не трогаю), открыл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.