[DllImport("Kernel32.dll", SetLastError = true, ExactSpelling = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CheckRemoteDebuggerPresent(SafeHandle hProcess, [MarshalAs(UnmanagedType.Bool)]ref bool isDebuggerPresent);
Declare Function CheckRemoteDebuggerPresent Lib "kernel32.dll"
(ByVal hProcess As Long, ByVal fResult As Boolean) As Boolean
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.
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)
'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