Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to enumerate process' handles?

Is there any way how to enumerate process with given PID in windows, and get list of all his opened handles(locked files, etc.)?

EDIT: I dont care about language. If it is in .NET, I'd be glad, if in WinApi (C), it won't hurt. If in something else, I think I can rewrite it :-)

like image 801
nothrow Avatar asked Apr 09 '09 08:04

nothrow


People also ask

How do you find the process handle?

If you have a process identifier, you can get the process handle by calling the OpenProcess function. OpenProcess enables you to specify the handle's access rights and whether it can be inherited. A process can use the GetCurrentProcess function to retrieve a pseudo handle to its own process object.

What are Windows process handles?

A process handle is an integer value that identifies a process to Windows. The Win32 API calls them a HANDLE; handles to windows are called HWND and handles to modules HMODULE. Threads inside processes have a thread handle, and files and other resources (such as registry keys) have handles also.

How do I get Hwnd from process handle?

You can use EnumWindows and GetWindowThreadProcessId() functions as mentioned in this MSDN article.


1 Answers

I did a deep googling and found this article. This article gave a link to download source code:

I tried method in NtSystemInfoTest.cpp ( downloaded source code ) and it worked superbly.

void ListHandles( DWORD processID, LPCTSTR lpFilter ) 

The code has following declaimer:

// Written by Zoltan Csizmadia, [email protected] // For companies(Austin,TX): If you would like to get my resume, send an email. // // The source is free, but if you want to use it, mention my name and e-mail address // ////////////////////////////////////////////////////////////////////////////////////// // 

I hope this helps you.

like image 160
aJ. Avatar answered Sep 27 '22 02:09

aJ.