модуль по использыванию процессов
| Код | Option Explicit
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Function Module32First Lib "kernel32.dll" (ByVal hSnapshot As Long, ByRef lpme As MODULEENTRY32) As Long Private Declare Function Module32Next Lib "kernel32.dll" (ByVal hSnapshot As Long, ByRef lpme As MODULEENTRY32) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long Private Declare Function GetExitCodeProcess Lib "kernel32.dll" (ByVal hProcess As Long, ByRef lpExitCode As Long) As Long Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long Private Declare Function GetModuleFileNameEx Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFilename As String, ByVal nSize As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hPass As Long) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, ByRef NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, ByRef PreviousState As TOKEN_PRIVILEGES, ByRef ReturnLength As Long) As Long Private Declare Function GetCurrentProcess Lib "kernel32.dll" () As Long Private Declare Function GetLastError Lib "kernel32.dll" () As Long Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, ByRef TokenHandle As Long) As Long
Private Declare Function GetVersionEx Lib "kernel32.dll" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 ' Maintenance string for PSS usage End Type
Public Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwFlags As Long szExeFile As String * 260 End Type Public Type MODULEENTRY32 dwSize As Long th32ModuleID As Long th32ProcessID As Long GlblcntUsage As Long ProccntUsage As Long modBaseAddr As Long modBaseSize As Long hModule As Long szModule As String * 256 szExePath As String * 260 End Type Private Type LUID LowPart As Long HighPart As Long End Type Private Type TOKEN_PRIVILEGES PrivilegeCount As Long TheLuid As LUID Attributes As Long End Type
Private Const TOKEN_ADJUST_PRIVILEGES As Long = &H20 Private Const TOKEN_QUERY As Long = &H8 Private Const SE_PRIVILEGE_ENABLED As Long = &H2 Private Const SE_DEBUG_NAME As String = "SeDebugPrivilege" Private Const VER_PLATFORM_WIN32_NT As Long = 2
Public Function GetProcess(outData() As PROCESSENTRY32) As Long Dim hSnapshot As Long, uProcess As PROCESSENTRY32
hSnapshot = CreateToolhelpSnapshot(&H2, 0) If hSnapshot = &HFFFF Then GetProcess = &HFFFF: Exit Function
uProcess.dwSize = Len(uProcess) Call Process32First(hSnapshot, uProcess) Do ReDim Preserve outData(GetProcess)
With uProcess .szExeFile = Spliting(.szExeFile, "\") .szExeFile = Left(.szExeFile, InStr(vbNull, .szExeFile, vbNullChar) - vbNull) End With outData(GetProcess) = uProcess uProcess.szExeFile = String(260, &H0) GetProcess = GetProcess + vbNull
Loop While (Process32Next(hSnapshot, uProcess))
Call CloseHandle(hSnapshot) End Function
Public Sub KillProc(ID As Long) Dim hProcess As Long, _ lExitCode As Long
Dim OSVER As OSVERSIONINFO
OSVER.dwOSVersionInfoSize = Len(OSVER) Call GetVersionEx(OSVER)
If OSVER.dwPlatformId = VER_PLATFORM_WIN32_NT Then _ Call LoadPrivilege
hProcess = OpenProcess(&H400 Or &H1, 0&, ID) Call GetExitCodeProcess(hProcess, lExitCode) Call TerminateProcess(hProcess, lExitCode) Call CloseHandle(hProcess) End Sub
Private Function Spliting(inString As String, sDelimeter As String) As String Dim ub() As String If Len(inString) = 0 Then Exit Function ub = Split(inString, sDelimeter) Spliting = ub(UBound(ub)) End Function
Public Function GetProcessModule(ByRef lpMe32() As MODULEENTRY32, Optional ByVal dwPID As Long) As Long Dim hModuleSnap As Long, me32 As MODULEENTRY32
hModuleSnap = CreateToolhelpSnapshot(&H8, dwPID) If hModuleSnap = -1 Then GetProcessModule = -1: Exit Function
me32.dwSize = Len(me32) Call Module32First(hModuleSnap, me32)
Do ReDim Preserve lpMe32(GetProcessModule)
me32.szExePath = Left(me32.szExePath, InStr(1, me32.szExePath, vbNullChar) - 1) me32.szModule = Left(me32.szModule, InStr(1, me32.szModule, vbNullChar) - 1) lpMe32(GetProcessModule) = me32 me32.szExePath = String(260, &H0): me32.szModule = String(256, &H0) GetProcessModule = GetProcessModule + 1 Loop While (Module32Next(hModuleSnap, me32))
Call CloseHandle(hModuleSnap) End Function
Private Sub LoadPrivilege() On Error Resume Next
Dim tkp As TOKEN_PRIVILEGES Dim hToken As Long Dim lbuffer As Long Dim hProcessHandle As Long Dim SEDebugNameValue As LUID Dim tkpNewButIgnored As TOKEN_PRIVILEGES
hProcessHandle = GetCurrentProcess()
Call OpenProcessToken(hProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hToken) Call LookupPrivilegeValue(vbNullString, SE_DEBUG_NAME, SEDebugNameValue) With tkp .PrivilegeCount = 1 .TheLuid = SEDebugNameValue .Attributes = SE_PRIVILEGE_ENABLED End With Call AdjustTokenPrivileges(hToken, 0&, tkp, Len(tkp), tkpNewButIgnored, lbuffer) End Sub
|
|