# Function Reference

# _WinAPI_EnumProcessHandles

Enumerates a handles that belong to the specified process

#include <WinAPIProc.au3>
_WinAPI_EnumProcessHandles ( [$iPID = 0 [, $iType = 0]] )

## Parameters

$iPID | [optional] The PID of the process. Default (0) is the current process.
$iType | [optional] The value associated with the type of the objects that should be enumerated. This value depends on the operating system. If this parameter is 0 (Default), all handles of the specified process will be enumerated.

## Return Value

Success: | The 2D array containing the following information: [0][0] - Number of rows in array (n) [0][i] - Unused [n][0] - Handle [n][1] - Type (depends on the operating system) [n][2] - Attributes [n][3] - Access
Failure: | Sets the @error flag to non-zero, @extended f lag may contain the NTSTATUS error code.

## See Also

Search ZwQuerySystemInformation in MSDN Library.

## Example

    #include <Array.au3>
    #include <ProcessConstants.au3>
    #include <WinAPIHObj.au3>
    #include <WinAPIProc.au3>

    Global Const $PID = @AutoItPID

    Local $hSource, $hTarget, $hObject

    Local $aData = _WinAPI_EnumProcessHandles($PID)

    If IsArray($aData) Then
        $hTarget = _WinAPI_GetCurrentProcess()
        $hSource = _WinAPI_OpenProcess($PROCESS_DUP_HANDLE, 0, $PID)
        If $hSource Then
            For $i = 1 To $aData[0][0]
                $hObject = _WinAPI_DuplicateHandle($hSource, $aData[$i][0], $hTarget, 0, False, $DUPLICATE_SAME_ACCESS)
                If Not @error Then
                    $aData[$i][1] = _WinAPI_GetObjectNameByHandle($hObject)
                    _WinAPI_CloseHandle($hObject)
                EndIf
            Next
        EndIf
    EndIf

    _ArrayDisplay($aData, '_WinAPI_EnumProcessHandles', '', Default, Default, 'Handle|Type|Attributes|Access')