Я пытаюсь устранить неполадки при медленном запуске стороннего двоичного файла (без источника). Это 32-битное приложение, работающее на 64-битной Windows 7.
Я использовал отладчик для взлома приложения, когда он загружен при загрузке процессора 0% при запуске, и он, похоже, ожидает возврата ReadFile
. Первый аргумент ReadFile
- это значение дескриптора 000000f0. Команда !handle
windbg говорит мне:
Handle f0
Type File
Attributes 0
GrantedAccess 0x120189:
ReadControl,Synch
Read/List,ReadEA,ReadAttr,WriteAttr
HandleCount 2
PointerCount 4
No Object Specific Information available
Я хочу знать, какому устройству это соответствует. Но Sysinternals Process Explorer не включает этот дескриптор в свой список дескрипторов процесса.
Я использовал windbg для отслеживания всех вызовов на ntdll!NtCreateFile
и напечатал путь и возвращенный дескриптор: этот дескриптор среди них нет. Точки останова на kernel32!CreateNamedPipeW
, kernel32!CallNamedPipeW
и kernel32!WaitNamedPipeW
никогда не срабатывают (что странно, потому что Process Explorer действительно показал другой дескриптор с путем \Device\NamedPipe\
).
Для справки, вот команда для трассировки NtCreateFile
(akak ZwCreateFile
) в Windows x64:
bp ntdll!NtCreateFile "!ustr poi(@r8+10) ; r $t0 = @rcx ; gu ; dd @$t0 L1 ; gc"
Спасибо Скайвингу за то, что он указал мне правильное направление .
Откуда еще может быть РУЧКА типа File
? Разве другие функции создания HANDLE не делегируют NtCreateFile
для фактического системного вызова (я полагаю, нет)?