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 :-)


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.


The command-line 'Handle' tool from Sysinternals does this, if you just want a tool. This won't help you if you're looking for a code solution, though.