看流星社区

 找回密码
 注册账号
查看: 2339|回复: 0

[VB] RING3下打开进程的第三种方法

[复制链接]

该用户从未签到

发表于 2013-5-11 08:46:38 | 显示全部楼层 |阅读模式
新建一个mod,把代码复制进去,窗体里直接调用FxOpenProcess(PROCESS_ALL_ACCESS, pid)
即可:OptionExplicit
'**************
'Code by Naylon
'**************
PrivateDeclareFunction GetCurrentProcessId Lib "kernel32" () AsLong
PrivateDeclareFunction ZwQueryInformationProcess Lib "NTDLL.DLL" (ByVal ProcessHandle AsLong, ByVal InformationClass AsLong, ByRef ProcessInformation As Any, ByVal ProcessInformationLength AsLong, ByRef ReturnLenght AsLong) AsLong
PrivateDeclareFunction ZwGetNextProcess Lib "NTDLL.DLL" (ByVal ProcessHandle AsLong, ByVal DesiredAccess AsLong, ByVal HandleAttributes AsLong, ByVal Flags AsLong, ByRef NewProcessHandle AsLong) AsLong
PrivateDeclareFunction CloseHandle Lib "kernel32" (ByVal Handle AsLong) AsLong

PrivateType PROCESS_BASIC_INFORMATION
    ExitStatus AsLong
    PebBaseAddress AsLong
    AffinityMask AsLong
    BasePriority AsLong
    UniqueProcessId AsLong
    InheritedFromUniqueProcessId AsLong
EndType

PublicConst STANDARD_RIGHTS_REQUIRED = &HF0000
PublicConst SYNCHRONIZE = &H100000

PublicConst PROCESS_TERMINATE = &H1
PublicConst PROCESS_CREATE_THREAD = &H2
PublicConst PROCESS_SET_SESSIONID = &H4
PublicConst PROCESS_VM_OPERATION = &H8
PublicConst PROCESS_VM_READ = &H10
PublicConst PROCESS_VM_WRITE = &H20
PublicConst PROCESS_DUP_HANDLE = &H40
PublicConst PROCESS_CREATE_PROCESS = &H80
PublicConst PROCESS_SET_QUOTA = &H100
PublicConst PROCESS_SET_INFORMATION = &H200
PublicConst PROCESS_QUERY_INFORMATION = &H400
PublicConst PROCESS_SUSPEND_RESUME = &H800
PublicConst PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF)

PublicFunction FxOpenProcess(ByVal dwDesiredAccess AsLong, ByVal dwProcessId AsLong) AsLong
    Dim pbi As PROCESS_BASIC_INFORMATION
    Dim hCurrent AsLong
    Dim hNext AsLong
    Dim Status AsLong
    Dim errStr AsString
      
    Status = ZwGetNextProcess(0, dwDesiredAccess, 0, 0, hNext)
    If Status >= 0 Then
        Do
            hCurrent = hNext
            Status = ZwQueryInformationProcess(hCurrent, 0, pbi, LenB(pbi), 0)
            If Status < 0 Then
                errStr = "获取进程信息失败"
                GoTo errors
            EndIf
            
            If pbi.UniqueProcessId = dwProcessId Then
                FxOpenProcess = hCurrent
                ExitFunction
            EndIf
            
            Status = ZwGetNextProcess(hCurrent, dwDesiredAccess, 0, 0, hNext)
            CloseHandle hCurrent
            If Status < 0 Then
                errStr = "获取下一个进程失败"
                GoTo errors
            EndIf
        LoopWhile hCurrent <> 0
         
        errStr = "打开进程失败"
        GoTo errors
    Else
        errStr = "开始获取进程失败"
        GoTo errors
    EndIf
ExitFunction

errors:
    'Debug.Print errStr
    MsgBox errStr
    FxOpenProcess = 0
EndFunction
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-19 19:55

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表