Narazil jsem na problém, se kterým jsem se nikdy nesetkal - má Win32 aplikace leakuje popisovače (handle). Nemám však potuchy, jak místo tohoto úniku najít.
Řešil už někdo tento problém? Jak jste na něj šli?
Narazil jsem na problém, se kterým jsem se nikdy nesetkal - má Win32 aplikace leakuje popisovače (handle). Nemám však potuchy, jak místo tohoto úniku najít.
Řešil už někdo tento problém? Jak jste na něj šli?
Díky za odpověď. Seznam leaklých handlů jsem našel, ale nejsem příliš moudrý, kde se handle berou - "nejsou" z mého kódu. V podstatě leakují 2 typy handlů:
0x000000007747179a: ntdll!NtCreateEvent+0x000000000000000a
0x00000000001520bb: verifier!AVrfpNtCreateEvent+0x000000000000008b
0x000000007366b069: wow64!whNtCreateEvent+0x0000000000000079
0x000000007365cf87: wow64!Wow64SystemServiceEx+0x00000000000000d7
0x00000000735e2776: wow64cpu!TurboDispatchJumpAddressEnd+0x000000000000002d
0x000000007365d07e: wow64!RunCpuSimulation+0x000000000000000a
0x000000007365c549: wow64!Wow64LdrpInitialize+0x0000000000000429
0x000000007749e707: ntdll! ?? ::FNODOBFM::`string'+0x0000000000029364
0x000000007744c32e: ntdll!LdrInitializeThunk+0x000000000000000e
0x000000007761ff66: ntdll_77600000!ZwCreateEvent+0x0000000000000012
0x0000000061712d87: VFBASICS!AVrfpNtCreateEvent+0x000000000000008a
0x0000000074d50387: KERNELBASE!CreateEventExW+0x000000000000006e
0x0000000074d507ba: KERNELBASE!CreateEventW+0x0000000000000027
0x0000000061712efb: VFBASICS!AVrfpCreateEventW+0x0000000000000096
0x00000000774716da: ntdll!NtDuplicateObject+0x000000000000000a
0x0000000000154143: verifier!AVrfpNtDuplicateObject+0x000000000000006b
0x000000007366ab60: wow64!whNtDuplicateObject+0x0000000000000054
0x000000007365cf87: wow64!Wow64SystemServiceEx+0x00000000000000d7
0x00000000735e2776: wow64cpu!TurboDispatchJumpAddressEnd+0x000000000000002d
0x000000007365d07e: wow64!RunCpuSimulation+0x000000000000000a
0x000000007365c549: wow64!Wow64LdrpInitialize+0x0000000000000429
0x000000007749e707: ntdll! ?? ::FNODOBFM::`string'+0x0000000000029364
0x000000007744c32e: ntdll!LdrInitializeThunk+0x000000000000000e
0x000000007761fe36: ntdll_77600000!ZwDuplicateObject+0x0000000000000012
0x0000000074d4ba76: KERNELBASE!DuplicateHandle+0x0000000000000069
0x00000000765618d2: KERNEL32!DuplicateHandleImplementation+0x00000000000000b3
0x000000007631de36: RPCRT4!THREAD::THREAD+0x0000000000000066
0x000000007631ddb3: RPCRT4!ThreadSelfHelper+0x0000000000000028
0x0000000076310736: RPCRT4!RpcpSetThreadpoolCallbackInstance+0x000000000000000b
Původně jsem myslel, že to má co do činění s WinUSB. Ale nevypadá to.
Konečně jsem na to kápnul! V jednom místě jsem při zjišťování připojených USB zařízení zapomněl před ukončením zavolat funkci SetupDiDestroyDeviceInfoList, která zajistí uzavřeních všech handlů. Jelikož ani jeden z těchto handlů nevytvořila má aplikace (vznikly uvnitř systému), tak Windbg dával tyto zmatené(alespoň pro mě) výsledky.
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku