Конференция "WinAPI" » Как получить Handle? [D7, Win2k, WinXP]
 
  • Дмитрий С (23.04.08 12:29) [0]
    Нужно получить хендл чего-нибудь так, чтобы функция CreateFile не дала его кому нибудь. Звучит абсурдно, попробую объяснить для чего это надо.

    Делаю перехват функций CreateFileW, ReadFile CloseHandle для того чтобы подставить одной библиотеке "виртуальный" файлик.
    При этом моя функция CreateFileW при создании файла с определенным именем не использует оригинального вызова CreateFileW, при этом она должна вернуть какой нибудь handle, который я потом буду вылавливать в ReadFile и подделывать результат.
    Конечно можно создать какой нибудь объект ядра, типа Event-а, но может есть способы правильнее?
  • Riply © (23.04.08 12:32) [1]
    >  [0] Дмитрий С   (23.04.08 12:29)

    Пять раз медленно перечитала. Так и не сумела ничего понять.
  • Игорь Шевченко © (23.04.08 12:36) [2]

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


    Верни отрицательное число, например, -100
  • guav © (23.04.08 12:59) [3]
    Перехват - это уже неправильно :)
    Я бы подсунул настоящий хендл, причём не ивента а другого файла.

    Если библиотека использует только CreateFileW, ReadFile CloseHandle, возможно стоит попробовать подсунуть ей именованный пайп ?
  • Дмитрий С (23.04.08 13:08) [4]

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

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

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


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

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


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

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


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

    Пока только эти, потом не знаю
  • guav © (23.04.08 13:19) [5]
    > А нету другого файла, чтобы открывать. Tmp для этого создавать?

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


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

    А что ты хочешь, хак есть хак.
    И кто будет проверять хендлы, по идее они вообще opaque structures.
  • Rouse_ © (23.04.08 14:52) [6]

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

    А что тут подозрительного? Диапазон валидных хэндлов от нуля до INVALID_HANDLE_VALUE - 1.
    Вернешь отрицательное значение, оно автоматом приведется к нужному диапазону :) Ну SetLastError еще скажи, чтоб библиотека ничего не подумала :)
  • Игорь Шевченко © (23.04.08 14:53) [7]

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


    если с этим значением Handle будешь работать только ты, какая нафиг разница о подозрительности ?
  • Дмитрий С (23.04.08 15:00) [8]

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

    А вдруг библиотека или мое приложение откроет какой нибудь файл и по счастливой случайности Windows выдаст такой же handle. Хочу этого избежать.
    Такие случайности обычно происходят когда демонстрируешь работу программы, что обидно
  • Rouse_ © (23.04.08 15:07) [9]

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

    Кому выдаст? Хэндлы уникальны только в пределах твоего процесса, и если такой-же будет в соседнем, это синефиолетово. А чем тебе CreateFileMapping на самого себя не устраивает?
  • Дмитрий С (23.04.08 15:10) [10]

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

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


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

    Тут можно по-подробнее.
  • Rouse_ © (23.04.08 15:15) [11]

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

    Что тут подробнее, мапируешь самого себя и используешь этот уникальный хэндл как затравку для своих функций, чтоб не -100 передавать.
  • Игорь Шевченко © (23.04.08 16:33) [12]

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


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

    В партии не дураки работают.
  • Slym © (24.04.08 04:14) [13]
    Pipe отдать...
    Дмитрий С   (23.04.08 12:29)
    Делаю перехват функций CreateFileW, ReadFile CloseHandle

    темя для меня интересна - сам делал такой перехват:
    как c overlapped борешся?
  • ага (24.04.08 06:01) [14]
    Акромя того что хендлы всегда положительны, они еще всегда кратны 4. 0-й бит лучше не трогать а 1-й запросто
 
Конференция "WinAPI" » Как получить Handle? [D7, Win2k, WinXP]
Есть новые Нет новых   [134432   +19][b:0][p:0.001]