Перехватывание создания HANDLE в WOW64

Я пытаюсь устранить неполадки, связанные с медленным запуском стороннего двоичного файла (нет источник). Это 32-разрядное приложение, работающее в 64-разрядной версии Windows 7.

Я использовал отладчик, чтобы взломать приложение, когда оно зависло с 0% загрузкой ЦП во время запуска, и, похоже, оно ожидает ReadFileдля возврата. Первый аргумент ReadFile— значение дескриптора, 000000f0. Команда Windbg !handleговорит мне:

Ручка f0
Тип файла
Атрибуты 0
Предоставленный доступ 0x120189:
Контроль чтения, синхронизация
Чтение/список, ReadEA, ReadAttr, WriteAttr
HandleCount 2
PointerCount 4
Нет доступной конкретной информации об объекте

Я хочу знать, какому устройству это соответствует. Но Sysinternals Process Explorer не включает этот дескриптор в свой список дескрипторов процессов.

Я использовал windbg для отслеживания всех обращений к ntdll!NtCreateFileи распечатал путь и возвращенный дескриптор: Этот дескриптор не входит в их число. Точки останова на kernel32!CreateNamedPipeW, kernel32!CallNamedPipeWи kernel32!WaitNamedPipeWникогда не срабатывают (что странно, поскольку Process Explorer действительно показал другой дескриптор с путем ] \Device\NamedPipe\).

Для справки, вот команда для трассировки NtCreateFile(он же ZwCreateFile) в Windows x64:

bp ntdll!NtCreateFile "!ustr poi(@r8+10) ; r $t0 = @rcx ; gu ; dd @$t0 L1 ; gc"

Спасибо Skywing за указание мне правильного направления в этом.

Откуда еще может взяться HANDLE типа File? Разве другие функции создания HANDLE не делегируют NtCreateFileфактический системный вызов (наверное, нет)?

6
задан Ben Voigt 22 March 2012 в 21:56
поделиться