CheckRemoteDebuggerPresent (kernel32)
Last changed: -186.136.223.176

.
Summary
This function determines whether the specified process is being debugged.

C# Signature:

[DllImport("Kernel32.dll", SetLastError = true, ExactSpelling = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CheckRemoteDebuggerPresent(SafeHandle hProcess, [MarshalAs(UnmanagedType.Bool)]ref bool isDebuggerPresent);

VB Signature:

Declare Function CheckRemoteDebuggerPresent Lib "kernel32.dll"
(ByVal hProcess As Long, ByVal fResult As Boolean) As Boolean

Boo Signature:

[DllImport("kernel32.dll", SetLastError : true)]
def CheckRemoteDebuggerPresent(hProcess as IntPtr, ref DebuggerPresent as bool) as bool:
     pass

Return Value:

If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError.

Notes:

Checks for RemoteDebugger on the 'hProcess'. The "remote" in CheckRemoteDebuggerPresent does not imply that the debugger necessarily resides on a different computer; instead, it indicates that the debugger resides in a separate and parallel process. Use the IsDebuggerPresent function to detect whether the calling process is running under the debugger.

You may need to have the SE_DEBUG_NAME privilege on the specified process or you will receive ERROR_ACCESS_DENIED (0x5)

See Also:

Sample Code:

'For VB.NET
Public Class Form1
    Declare Function CheckRemoteDebuggerPresent Lib "kernel32.dll" _  
    (ByVal hProcess As Long, ByVal fResult As Boolean) As Boolean
        Dim bool As Boolean
        Dim proc As Process = Process.GetCurrentProcess()

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Debug.Print(CStr(CheckRemoteDebuggerPresent(proc.Handle, bool)))
    End Sub
End Class

Documentation
[CheckRemoteDebuggerPresent] on MSDN