Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / winapi / 25 сообщений из 28, страница 1 из 2
22.01.2017, 22:58
    #39389201
alanez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
Помогите, плиз новичку. Очень нужен код, который возвращает handle к файлу, созданный в другом процессе.Входные параметры - имя файла и/или имя процесса.
...
Рейтинг: 0 / 0
22.01.2017, 23:10
    #39389206
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
RTFM CreateFile.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.01.2017, 23:42
    #39389213
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
alanezПомогите, плиз новичку. Очень нужен код, который возвращает handle к файлу, созданный в другом процессе.Входные параметры - имя файла и/или имя процесса.

что создано в другом процессе, файл или хендл к нему?
...
Рейтинг: 0 / 0
23.01.2017, 14:24
    #39389512
alanez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
MasterZiv,

handle к нему. Другой процесс при запуске забирает монопольно файл и не отдает.
...
Рейтинг: 0 / 0
23.01.2017, 14:28
    #39389516
alanez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
Dimitry Sibiryakov,

CreateFile вернет handle в моем процессе, инкрементируя количество пользователей ресурса. Вызвав closehandle я просто декрементирую свою ссылку на handle. А мне нужно закрыть все хэндлы к файлу...
...
Рейтинг: 0 / 0
23.01.2017, 14:55
    #39389534
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
Никак не закроешь. Только как-то дать команду тому процессу чтобы закрыл, но это в случае если там прописан какой-то способ приема таких команд. Или закрывать/убивать тот процесс.
...
Рейтинг: 0 / 0
23.01.2017, 15:42
    #39389589
alanez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
Dima TНикак не закроешь. Только как-то дать команду тому процессу чтобы закрыл, но это в случае если там прописан какой-то способ приема таких команд. Или закрывать/убивать тот процесс.
ProcessExplorer, Handle.exe как-то это делают...
...
Рейтинг: 0 / 0
23.01.2017, 16:32
    #39389640
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
alanezDima TНикак не закроешь. Только как-то дать команду тому процессу чтобы закрыл, но это в случае если там прописан какой-то способ приема таких команд. Или закрывать/убивать тот процесс.
ProcessExplorer, Handle.exe как-то это делают...

Посмотри тут
...
Рейтинг: 0 / 0
23.01.2017, 16:50
    #39389662
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
Пример со страницы выше
uploads/26792/handles.zip
...
Рейтинг: 0 / 0
24.01.2017, 00:51
    #39389962
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
alanezMasterZiv,

handle к нему. Другой процесс при запуске забирает монопольно файл и не отдает.

Хендл специфичен для процесса, если тот процесс не предпринял особых усилий к обратному.
Если файл открыт монопольно, то его никаким образом в другом процессе не откроешь.
...
Рейтинг: 0 / 0
24.01.2017, 07:57
    #39390005
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
MasterZivalanezMasterZiv,

handle к нему. Другой процесс при запуске забирает монопольно файл и не отдает.

Хендл специфичен для процесса, если тот процесс не предпринял особых усилий к обратному.
Если файл открыт монопольно, то его никаким образом в другом процессе не откроешь.
Он хочет закрыть хэндл в том процессе, который его открыл. ИМХО очень нездоровая идея.
alanezProcessExplorer, Handle.exe как-то это делают...
Затестил ProcessExplorer, он действительно показывает какие файлы открыл процесс и есть "Close handle" по правой кнопке. Если изначально запускать "От имени Администратора" то закрывает, если просто запустить - пишет прав не хватает.
...
Рейтинг: 0 / 0
24.01.2017, 14:12
    #39390277
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
MasterZivalanezMasterZiv,

handle к нему. Другой процесс при запуске забирает монопольно файл и не отдает.

Хендл специфичен для процесса, если тот процесс не предпринял особых усилий к обратному.
Если файл открыт монопольно, то его никаким образом в другом процессе не откроешь.

Кто нибудь читал ссылку, которую я привел? Там черным по белому написано, и даже пример есть.
Код: plaintext
1.
2.
3.
4.
5.
To close handles opened by other processes, you simply call DuplicateHandle with DUPLICATE_CLOSE_SOURCE (1) specified in the
options parameter (it's documented on the MSDN page for DuplicateHandle, so go read it). 
You can specify NULL for the target process handle and target handle parameters. For example:

DuplicateHandle(handleToTheRemoteProcess, theRemoteHandle, NULL, NULL, 0, FALSE, 0x1);
...
Рейтинг: 0 / 0
24.01.2017, 16:19
    #39390428
alanez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
Dima T,

Администратор в наличие
...
Рейтинг: 0 / 0
24.01.2017, 16:21
    #39390432
alanez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
[quot __Avenger__]MasterZivпропущено...


To close handles opened by other processes, you simply call DuplicateHandle with DUPLICATE_CLOSE_SOURCE (1) specified in the options parameter (it's documented on the MSDN page for DuplicateHandle, so go read it). You can specify NULL for the target process handle and target handle parameters. For example:

DuplicateHandle(handleToTheRemoteProcess, theRemoteHandle, NULL, NULL, 0, FALSE, 0x1);

читал, основной вопрос в поиске параметра theRemoteHandle
...
Рейтинг: 0 / 0
24.01.2017, 16:42
    #39390457
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
alanezосновной вопрос в поиске параметра theRemoteHandle
Там же все расписано
Код: plaintext
1.
Step 1: Enumerating handles
Call NtQuerySystemInformation with SystemHandleInformation (16). ...

изучай NtQuerySystemInformation()
...
Рейтинг: 0 / 0
25.01.2017, 14:07
    #39391127
alanez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
__Avenger__Пример со страницы выше
uploads/26792/handles.zip
у меня ругаеться такими словами:
cannot convert from 'PVOID' to '_NtQuerySystemInformation'. Conversion from 'void*' to pointer to non-'void' requires an explicit cast

на строчках 3-х строчках:
_NtQuerySystemInformation NtQuerySystemInformation = GetLibraryProcAddress("ntdll.dll","NtQuerySystemInformation");
_NtDuplicateObject NtDuplicateObject = GetLibraryProcAddress("ntdll.dll", "NtDuplicateObject");
_NtQueryObject NtQueryObject = GetLibraryProcAddress("ntdll.dll", "NtQueryObject");

Что не так?
...
Рейтинг: 0 / 0
25.01.2017, 14:12
    #39391134
alanez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
еще на это:
if (!NT_SUCCESS(NtDuplicateObject(
processHandle,
handle.Handle,
GetCurrentProcess(),
&dupHandle,
0,
0,
0
)))
со словами:
error C2664: 'NTSTATUS (HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG)' : cannot convert parameter 2 from 'USHORT' to 'HANDLE'
...
Рейтинг: 0 / 0
25.01.2017, 14:13
    #39391138
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
Это код на С, в С++ надо тип явно приводить
Код: plaintext
1.
2.
  _NtQuerySystemInformation NtQuerySystemInformation =  (_NtQuerySystemInformation)GetLibraryProcAddress("ntdll.dll","NtQuerySystemInformation");
...
...
Рейтинг: 0 / 0
25.01.2017, 14:25
    #39391156
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
Dima TЭто код на С, в С++ надо тип явно приводить
Код: plaintext
1.
2.
  _NtQuerySystemInformation NtQuerySystemInformation =  (_NtQuerySystemInformation)GetLibraryProcAddress("ntdll.dll","NtQuerySystemInformation");
...



Аналогично
Код: plaintext
1.
handle.Handle -> (HANDLE)handle.Handle
...
Рейтинг: 0 / 0
25.01.2017, 15:04
    #39391219
alanez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
это нормально, что в win10 !NT_SUCCESS(status)==true
...
Рейтинг: 0 / 0
29.01.2017, 21:34
    #39394216
alanez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
__Avenger__Пример со страницы выше
uploads/26792/handles.zip
из этого примера- не закрывает CloseHandle(dupHandle) оригинальные handls
...
Рейтинг: 0 / 0
29.01.2017, 23:11
    #39394264
alanez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
закрытие оригинального handle CloseHandle((HANDLE)handle.Handle) - выбрасывает исключение...
...
Рейтинг: 0 / 0
30.01.2017, 09:18
    #39394365
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
alanez__Avenger__Пример со страницы выше
uploads/26792/handles.zip
из этого примера- не закрывает CloseHandle(dupHandle) оригинальные handls

CloseHandle(dupHandle) и не должен закрывать хэндл в чужом процессе.
...
Рейтинг: 0 / 0
30.01.2017, 09:19
    #39394367
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
alanezзакрытие оригинального handle CloseHandle((HANDLE)handle.Handle) - выбрасывает исключение...

Тему то читали? Еще раз:
Код: plaintext
1.
2.
3.
4.
5.
To close handles opened by other processes, you simply call DuplicateHandle with DUPLICATE_CLOSE_SOURCE (1) specified in the
options parameter (it's documented on the MSDN page for DuplicateHandle, so go read it). 
You can specify NULL for the target process handle and target handle parameters. For example:

DuplicateHandle(handleToTheRemoteProcess, theRemoteHandle, NULL, NULL, 0, FALSE, 0x1);
...
Рейтинг: 0 / 0
30.01.2017, 20:20
    #39395000
alanez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
winapi
__Avenger__, Вы великолепны в своей точности и внимательности! Жму руку! Цель поражена)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / winapi / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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