Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить Handle? [D7, Win2k, WinXP]


Дмитрий С ©   (2008-04-23 12:29:00) 

Нужно получить хендл чего-нибудь так, чтобы функция CreateFile не дала его кому нибудь. Звучит абсурдно, попробую объяснить для чего это надо.

Делаю перехват функций CreateFileW, ReadFile CloseHandle для того чтобы подставить одной библиотеке "виртуальный" файлик.
При этом моя функция CreateFileW при создании файла с определенным именем не использует оригинального вызова CreateFileW, при этом она должна вернуть какой нибудь handle, который я потом буду вылавливать в ReadFile и подделывать результат.
Конечно можно создать какой нибудь объект ядра, типа Event-а, но может есть способы правильнее?


ага   (2008-04-24 06:01:00) [1]

Акромя того что хендлы всегда положительны, они еще всегда кратны 4. 0-й бит лучше не трогать а 1-й запросто


Slym   (2008-04-24 04:14:00) [2]

Pipe отдать...
Дмитрий С   (23.04.08 12:29)
Делаю перехват функций CreateFileW, ReadFile CloseHandle

темя для меня интересна - сам делал такой перехват:
как c overlapped борешся?


Игорь Шевченко   (2008-04-23 16:33:00) [3]


> и по счастливой случайности Windows выдаст такой же handle


по счастливой случайности Windows отдает положительные значения Handle. Счастливой случайности с отрицательными значениями быть попросту не может.

В партии не дураки работают.


Rouse_   (2008-04-23 15:15:00) [4]


> Тут можно по-подробнее.

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


Дмитрий С   (2008-04-23 15:10:00) [5]


> Хэндлы уникальны только в пределах твоего процесса

Так ведь и файл может быть открыт внутри моего процесса.


> А чем тебе CreateFileMapping на самого себя не устраивает?

Тут можно по-подробнее.


Rouse_   (2008-04-23 15:07:00) [6]


> А вдруг библиотека или мое приложение откроет какой нибудь
> файл и по счастливой случайности Windows выдаст такой же
> handle

Кому выдаст? Хэндлы уникальны только в пределах твоего процесса, и если такой-же будет в соседнем, это синефиолетово. А чем тебе CreateFileMapping на самого себя не устраивает?


Дмитрий С   (2008-04-23 15:00:00) [7]


> если с этим значением Handle будешь работать только ты,
> какая нафиг разница о подозрительности ?

А вдруг библиотека или мое приложение откроет какой нибудь файл и по счастливой случайности Windows выдаст такой же handle. Хочу этого избежать.
Такие случайности обычно происходят когда демонстрируешь работу программы, что обидно


Игорь Шевченко   (2008-04-23 14:53:00) [8]


> А вдруг библиотека сочтет это подозрительным? Или ее будущая
> версия.


если с этим значением Handle будешь работать только ты, какая нафиг разница о подозрительности ?


Rouse_   (2008-04-23 14:52:00) [9]


> А вдруг библиотека сочтет это подозрительным? Или ее будущая
> версия.

А что тут подозрительного? Диапазон валидных хэндлов от нуля до INVALID_HANDLE_VALUE - 1.
Вернешь отрицательное значение, оно автоматом приведется к нужному диапазону :) Ну SetLastError еще скажи, чтоб библиотека ничего не подумала :)


guav   (2008-04-23 13:19:00) [10]

> А нету другого файла, чтобы открывать. Tmp для этого создавать?

Как, вообще нету ? Файла с именем GetModuleFileName(SysInit.hInstance, ...) тоже нету ?


> А вдруг библиотека сочтет это подозрительным? Или ее будущая
> версия.

А что ты хочешь, хак есть хак.
И кто будет проверять хендлы, по идее они вообще opaque structures.


Дмитрий С   (2008-04-23 13:08:00) [11]


> Пять раз медленно перечитала. Так и не сумела ничего понять.

Пять раз? :)
Столько женского внимания к такому маленькому мне :)))

Прошу прощения за оффтоп.


> Верни отрицательное число, например, -100

А вдруг библиотека сочтет это подозрительным? Или ее будущая версия.


> Я бы подсунул настоящий хендл, причём не ивента а другого
> файла.

А нету другого файла, чтобы открывать. Tmp для этого создавать?


> Если библиотека использует только CreateFileW, ReadFile
> CloseHandle, возможно стоит попробовать подсунуть ей именованный
> пайп ?

Пока только эти, потом не знаю


guav   (2008-04-23 12:59:00) [12]

Перехват - это уже неправильно :)
Я бы подсунул настоящий хендл, причём не ивента а другого файла.

Если библиотека использует только CreateFileW, ReadFile CloseHandle, возможно стоит попробовать подсунуть ей именованный пайп ?


Игорь Шевченко   (2008-04-23 12:36:00) [13]


> При этом моя функция CreateFileW при создании файла с определенным
> именем не использует оригинального вызова CreateFileW, при
> этом она должна вернуть какой нибудь handle, который я потом
> буду вылавливать в ReadFile и подделывать результат.


Верни отрицательное число, например, -100


Riply   (2008-04-23 12:32:00) [14]

>  [0] Дмитрий С   (23.04.08 12:29)

Пять раз медленно перечитала. Так и не сумела ничего понять.


Наверх

Титульная страница Поиск, карта сайта Написать письмо