您好,
我想使我的应用程序检测它是否正在调试或代码项目]不,我找到了这样一个伟大的文章,并开始工作,然后我想出了这个:
<system.runtime.interopservices.dllimport("kernel32.dll")> _
Public Shared Function LoadLibrary(ByVal szFileName As String) As IntPtr
End Function
<system.runtime.interopservices.dllimport("kernel32.dll")> _
Public Shared Function GetProcAddress(ByVal hLibrary As IntPtr, ByVal szProcName As String) As IntPtr
End Function
<system.runtime.interopservices.dllimport("kernel32.dll",> _
Public Shared Function GetCurrentProcess() As IntPtr
End Function
Private Delegate Function Nt_QueryInformationProcess(ByVal hProc As IntPtr, ByVal DbgFlags As UInt32, ByRef NoDbg As Boolean, ByVal PiLen As Int32, ByVal RetLen As Int32) As Int32
Private Function CheckProcessDebugFlags() As Boolean
Dim NoDebugInherit As Boolean
Dim Nt_QIP As Nt_QueryInformationProcess = _
DirectCast(System.Runtime.InteropServices.Marshal.GetDelegateForFunctionPointer(GetProcAddress(LoadLibrary("Ntdll.dll"), "NtQueryInformationProcess"), GetType(Nt_QueryInformationProcess)), Nt_QueryInformationProcess)
Dim Status As Int32 = Nt_QIP.Invoke(GetCurrentProcess(), &H1F, NoDebugInherit, 4, 0)
If Status = 0 Then
If NoDebugInherit = False Then
Return True
Else
Return False
End If
Else
Return False
End If
End Function
问题是,它始终返回false,即使当它在调试模式下运行,所以它可以是我做错了什么,或者它只是不使用托管代码?