我已经提供了进程权限为什么还不能结束瑞星的进程呢代码如下:
Option ExplicitPrivate Declare Function CloseHandle Lib "kernel32.dll" (ByVal Handle As Long) As Long
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Private Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
Private Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPriv As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long                'Used to adjust your program's security privileges, can't restore without it!
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As Any, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long '获取当前进程句柄
Private Declare Function GetLastError Lib "kernel32" () As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const TOKEN_ASSIGN_PRIMARY = &H1
Private Const TOKEN_DUPLICATE = (&H2)
Private Const TOKEN_IMPERSONATE = (&H4)
Private Const TOKEN_QUERY = (&H8)
Private Const TOKEN_QUERY_SOURCE = (&H10)
Private Const TOKEN_ADJUST_PRIVILEGES = (&H20)
Private Const TOKEN_ADJUST_GROUPS = (&H40)
Private Const TOKEN_ADJUST_DEFAULT = (&H80)
Private Const TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or TOKEN_ASSIGN_PRIMARY Or _
TOKEN_DUPLICATE Or TOKEN_IMPERSONATE Or TOKEN_QUERY Or TOKEN_QUERY_SOURCE Or _
TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)
Private Const SE_PRIVILEGE_ENABLED = &H2
Private Const ANYSIZE_ARRAY = 1
Private Const SE_DEBUG_NAME = "SeDebugPrivilege"Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const PROCESS_VM_READ = &H10
Private Const PROCESS_TERMINATE = 1Private Type LUID
    lowpart As Long
    highpart As Long
End TypePrivate Type LUID_AND_ATTRIBUTES
    pLuid As LUID
    Attributes As Long
End TypePrivate Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type'这个函数用于在NT系统中,本进程提升权限
Public Function EnablePrivilege() As Boolean
    Dim hdlProcessHandle As Long
    Dim hdlTokenHandle As Long
    Dim tmpLuid As LUID
    Dim tkp As TOKEN_PRIVILEGES
    Dim tkpNewButIgnored As TOKEN_PRIVILEGES
    Dim lBufferNeeded As Long
    Dim lp As Long
    hdlProcessHandle = GetCurrentProcess()
    lp = OpenProcessToken(hdlProcessHandle, TOKEN_ALL_ACCESS, hdlTokenHandle)
    lp = LookupPrivilegeValue(vbNullString, "SeDebugPrivilege", tmpLuid)
    tkp.PrivilegeCount = 1
    tkp.Privileges(0).pLuid = tmpLuid
    tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
    EnablePrivilege = AdjustTokenPrivileges(hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded)
End FunctionPublic Function KillProcess(ByVal ProcessID As String) As Boolean '结束指定进程
    Dim lPHand As Long, TMBack As Long
    
    lPHand = OpenProcess(1&, True, CLng(ProcessID)) '获取进程句柄
    TMBack = TerminateProcess(lPHand, 0&) '关闭进程
    If TMBack <> 0 Then
        KillProcess = True
    Else
        KillProcess = False
    End If
    CloseHandle lPHand
End FunctionPrivate Sub Form_Load()
    EnablePrivilege
    KillProcess 3000
    '对应是瑞星的进程“ravmon.exe”
End Sub

解决方案 »

  1.   

    lPHand = OpenProcess(1&, True, CLng(ProcessID)) '获取进程句柄
    测试一下OpenProcess是否成功.
      

  2.   

    哦?那要看是进程还是服务了。呵呵。。如果是服务就得用其他方法,例如用DOS命令NET命令的子命令,如果确实是进程,那提升权限后结束就可以了。OpenProcess(1&, True, CLng(ProcessID)) 确实有点问题,至少给点面子写成这样吧?OpenProcess(PROCESS_ALL_ACCESS, 0, ProcessId),搞什么猫腻呢。
      

  3.   

    lPHand = OpenProcess(1&, True, CLng(ProcessID)) '获取进程句柄
    测试一下OpenProcess是否成功.成功了的结束系统进程都可以的包括WINLOGON。EXE而且用IceSword却可以
      

  4.   

    停止服务是可以终止了
    但是IceSword不用停止服务都可以终止
    而且还发现在不管停止服务是否都不能远程注入和卸载DLL在瑞星程序上
      

  5.   

    icesword 的killprocess是系统底层的非常规方法。
    ravmon用了保护最后小小的bs楼主一下。
      

  6.   

    只要有权限 系统服务一样可以终止 
    用TerminateProcess测试一下返回值就可以了 
    如果错误 则该进程可能Hook OpenProcess了 
    让你无法取得该进程正确ID 当然也就无法终止该进程了
      

  7.   

    瑞星进程是ring0级的权限
    非特殊方法无法清除
      

  8.   

    瑞星的进程确实不好搞定,通过提升自身权限杀不死,用"ntsd -c q -p 进程ID"也杀不死,其保护手段确实高明!
      

  9.   

    icesword 的killprocess是系统底层的非常规方法。
    ravmon用了保护
    ===========================================================其实ravmon是hook了系统服务函数.icesword应该还是在内核中直接调用该服务函数.
      

  10.   

    //icesword应该还是在内核中直接调用该服务函数.相当的高深
      

  11.   

    to boywang(大力水手)
    VB看来是没戏了~~有没有变通的方法