windows - Trapping HANDLE oprettelse i WOW64

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at fejre langsom opstart af en tredjeparts binær (ingen kilde). Det er en 32-bit applikation, der kører på 64-bit Windows 7.


Jeg har brugt en debugger til at bryde ind i applikationen, mens den er hængt med 0\% CPU-brug under opstart, og det ser ud til at vente på ReadFile for at vende tilbage. Det første argument til ReadFile er håndteringsværdien, 000000f0. windbg s s !handle kommando fortæller mig:



Handle f0
  Type            File
  Attributes      0
  GrantedAccess   0x120189:
         ReadControl,Synch
         Read/List,ReadEA,ReadAttr,WriteAttr
  HandleCount     2
  PointerCount    4
  No Object Specific Information available



Jeg vil gerne vide, hvilken enhed dette svarer til. Men Sysinternals Process Explorer inkluderer ikke dette håndtag i sin liste over proceshåndtag.


Jeg har brugt windbg til at spore alle opkald til ntdll!NtCreateFile og udskrev stien og returnerede håndtaget: Dette håndtag er ikke blandt dem. Brydpunkter på kernel32!CreateNamedPipeW, kernel32!CallNamedPipeW og kernel32!WaitNamedPipeW udløses aldrig (hvilket er underligt, fordi Process Explorer viste et andet håndtag med sti DeviceNamedPipe).


Til reference er her kommandoen til at spore NtCreateFile (akak ZwCreateFile) på Windows x64:


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


Tak til Skywing for at pege mig i den rigtige retning på det. [15]


Hvor ellers kan en HANDLE af type File komme fra? Må ikke de andre HANDLE oprettelsesfunktioner delegere til NtCreateFile for den faktiske syscall (jeg tror ikke)?

Bedste reference


Det ser ud til, at du kun kan få filhåndteringsoplysningerne, når du laver en kernefejl. Så der er 3 muligheder.



  1. Udfør en lokal fejlfinding på maskinen, dette bør ikke være et problem, da du kun behøver at få filhåndteringsoplysningerne, og det forbliver statiske. Se følgende: http://msdn.microsoft.com/en-us/library/windows/hardware/ff553382(v=vs.85).aspx

  2. Udfør en ekstern kernefejl i en VM-maskine. 'Sikkerere' i den forstand, at du ikke kan sprænge din maskine.

  3. BSOD din kasse og kig på dumpet på den måde. Igen ikke meget rart at gøre i din boks, men jeg har gjort lignende ting tidligere, da jeg skulle kunne foretage en komplet analyse på maskinen uden at maskinens tilstand ændres.


Andre referencer 1


Håndtag kan arves og kan også oprettes af DuplicateHandle (). Du kan prøve at ringe GetFileInformationByHandleEx på håndtaget og forespørgsel til FileNameInfo. [16] [17]