powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Кто хозяин-создатель HANDLE ?
10 сообщений из 10, страница 1 из 1
Кто хозяин-создатель HANDLE ?
    #38930413
cpp2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приложение создаёт файл в памяти через CreateFileMapping. Другое приложение подключается к этому участку памяти с помощью OpenFileMapping. Получает его HANDLE и работет с ним.
Вопрос. Можно ли как-то по этому полученному HANDLE Memory Mapping File узнать PID или HANDLE процесса - создателя файла в памяти ? Просто при работе с файлом в памяти я хочу узнать о завершении процесса, создавшего файл. Не прибит ли он уже через диспетчер задач ? А для этого мне нужен HANDLE процесса создателя.
...
Рейтинг: 0 / 0
Кто хозяин-создатель HANDLE ?
    #38930449
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай мапинг на 4 байта больше и запиши в них PID процесса его создавшего.
...
Рейтинг: 0 / 0
Кто хозяин-создатель HANDLE ?
    #38930450
cpp2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
собственно, так и собирался сделать. Но думал может есть какие-то стандартные API функции
...
Рейтинг: 0 / 0
Кто хозяин-создатель HANDLE ?
    #38930466
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет таких функций, если не путаю.

В виндовсе устроено примерно так: каждый объект имеет счетчик ссылающихся на него хэндлов. Хэндлы хранятся в окружении процесса, при завершении процесса хэндл закрывается, счетчик уменьшается, как доходит до 0 - уничтожается объект. Т.е. виндовс понятия не имеет кто создал, он только отслеживает кто использует.
...
Рейтинг: 0 / 0
Кто хозяин-создатель HANDLE ?
    #38930468
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обломись.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кто хозяин-создатель HANDLE ?
    #38930479
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tзапиши в них PID процесса его создавшего.
....а потом бейся головой об стенку, когда Windows отдаст освободившийся PID совершенно
другому процессу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кто хозяин-создатель HANDLE ?
    #38930507
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov....а потом бейся головой об стенку, когда Windows отдаст освободившийся PID совершенно
другому процессу.

Чтоб голову поберечь: сразу получи по PID хэндл процесса и проверяй его завершения по хэндлу.
...
Рейтинг: 0 / 0
Кто хозяин-создатель HANDLE ?
    #38930538
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tсразу получи по PID хэндл процесса и проверяй его завершения по хэндлу.

Пофиг:
1) Главный процесс создал файл
2) Дочерний подключился, получил хэндл, проверил, счастлив, работает
3) Главный процесс умер
4) Левый процесс получил тот же PID
5) Второй дочерний процесс подключился, получил хэндл нового "главного" процесса,
счастлив, работает.

Для проверки живости главного процесса надо использовать что-то автоматически уничтожаемое
при его смерти. Например, мутекс.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кто хозяин-создатель HANDLE ?
    #38930563
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПофиг:
1) Главный процесс создал файл
2) Дочерний подключился, получил хэндл, проверил, счастлив, работает
3) Главный процесс умер
4) Левый процесс получил тот же PID
5) Второй дочерний процесс подключился, получил хэндл нового "главного" процесса,
счастлив, работает.
Думаю так не будет пока есть незакрытые хэндлы на умерший процесс, т.е. для виндовса процесс окончательно не умер пока есть хэндлы на него ссылающиеся.
А если все дочерние закроют хэндл маппинга вместе с хэндлом родительского процесса, то новый не подключится.

Dimitry SibiryakovДля проверки живости главного процесса надо использовать что-то автоматически уничтожаемое
при его смерти. Например, мутекс.
Согласен, именованный мутекс проще и удобнее.
...
Рейтинг: 0 / 0
Кто хозяин-создатель HANDLE ?
    #38930881
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpp2015 Можно ли как-то по этому полученному HANDLE Memory Mapping File узнать PID или HANDLE процесса - создателя файла в памяти ?
GetFileInformationByHandleEx function
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364953(v=vs.85).aspx

FILE_INFO_BY_HANDLE_CLASS enumeration
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364228(v=vs.85).aspx

PS: Это конечно не то что ты хотел, но все же.
Как вариант:
- посмотри утилиты Руссиновича /одно время и исходники их были в inet/.

- исходники wine http://sourceforge.net/projects/wine/files/Source/
git clone git://wine.git.sourceforge.net/gitroot/wine/wine (read-only)

- исходники ReactOS /кстати многие не понимают, что она дает .../
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Кто хозяин-создатель HANDLE ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]