Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Blokowanie progów
ksieluk
from Alex city




Typ: neutral
Postów: 30
Zarejestrowany: Mar 2004
Blokowanie progów

Chciałbym napisać coś w vb co zablokowałoby JKIŚ dowolny exe-k (nie mógłby się uruchomić). Please help


_____________________________________________
Jeżeli to jest pytanie - to pomóż mi. Jeśli odpowiedź to  powodzenia :-)

23-06-2004 20:26
Pokaż profil ksieluk  Wyślij email do ksieluk   
kicaj




Typ: neutral
Postów: 271
Zarejestrowany: Aug 2003

to znaycz jest cos takiego w workshop, co uniemozliwia dziala programu jest to gra karciana. Dziala to tak ze program sie uruchamia a Twoj program pracujacy w tle sprawdza czy cos sie nie wlaczylo o danym tytule okna, jesli tak to wysyla do niego ctrl+f4
inny sposbem jest prawdzanie scierzki procesu, i killowanie go nie pamietam kto ale ktos napisal ProcessKileara (wada tak ze kiepsciucho dziala pod XP)

23-06-2004 23:45
Pokaż profil kicaj  Wyślij email do kicaj        3914568
m-a-x



Typ: neutral
Postów: 366
Zarejestrowany: Jan 2003

Nie wiem czy chodzi Ci o mojego ProcessKillera (bo pewnie dużo osob pisało swoje własne wersje) - jak by co to tutaj są linki do niego:

Binarka:
http://software.magma-net.pl/download/download.php3?file=ProcessKiller.exe&r=vb

Kod źródłowy:
http://software.magma-net.pl/download/download.php3?file=vb%2FProcessKiller.zip&r=vb


Problem z WinXP może być związany z brakiem biblioteki ToolHelp32 która własnie jest używana do listowania procesów. W windowsach z rodziny NT najlepiej skożystać z PSAPI rozprowadzanej z Platform SDK oraz VB 5 i 6. I tu sampel (źródło vbFAQ):

Private Const PROCESS_QUERY_INFORMATION = 1024
  Private Const PROCESS_VM_READ = 16
  Private Const MAX_PATH = 260
  Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
  Private Const SYNCHRONIZE = &H100000
  Private Const PROCESS_ALL_ACCESS = &H1F0FFF

  Private Type PROCESS_MEMORY_COUNTERS
    cb As Long
    PageFaultCount As Long
    PeakWorkingSetSize As Long
    WorkingSetSize As Long
    QuotaPeakPagedPoolUsage As Long
    QuotaPagedPoolUsage As Long
    QuotaPeakNonPagedPoolUsage As Long
    QuotaNonPagedPoolUsage As Long
    PagefileUsage As Long
    PeakPagefileUsage As Long
  End Type

  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 GetProcessMemoryInfo Lib "psapi.dll" (ByVal hProcess As Long, _
    ppsmemCounters As PROCESS_MEMORY_COUNTERS, ByVal cb As Long) As Long
  Private Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long

  Private Sub EnumProcessesNT()
    Dim lSize As Long, lNeeded As Long, lPIDs() As Long, lRet As Long
    Dim lProcesses As Long, i As Long, lMods() As Long, lModules As Long
    Dim hModule As Long, hProcess As Long, strModuleName As String
    Dim j As Long, pmc As PROCESS_MEMORY_COUNTERS

    lNeeded = 1024
    Do
      ReDim lPIDs(1 To lNeeded)
      lSize = UBound(lPIDs) - LBound(lPIDs)
      If EnumProcesses(lPIDs(1), lSize, lNeeded) = 0 Then Exit Sub
    Loop While lNeeded > lSize
    lProcesses = lNeeded / 4

    For i = 1 To lProcesses
      Debug.Print "-- PID = " & lPIDs(i) & " ---------------------------------"
      hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lPIDs(i))
      If hProcess Then
        If GetProcessMemoryInfo(hProcess, pmc, Len(pmc)) <> 0 Then
          Debug.Print "Memory Used : " & Format(pmc.WorkingSetSize  1024, "#0" ) & " kB"
        End If
        lNeeded = 1024
        Do
          ReDim lMods(1 To lNeeded)
          lSize = UBound(lPIDs) - LBound(lPIDs)
          If EnumProcessModules(hProcess, lMods(1), lSize, lNeeded) = 0 Then
            lNeeded = 0
            Exit Do
          End If
        Loop While lNeeded > lSize
        lModules = lNeeded / 4
        For j = 1 To lModules
          strModuleName = Space(MAX_PATH)
          lRet = GetModuleFileNameExA(hProcess, lMods(j), strModuleName, Len(strModuleName))
          strModuleName = Left$(strModuleName, lRet)
          Debug.Print "  " & strModuleName
        Next j
        CloseHandle hProcess
      End If
    Next i
  End Sub

Wiec wystarczy tylko podmienić funkcję listującą procesy.

[Post edytowany dnia 26-08-2004 11:38 przez m-a-x]


_____________________________________________

Problemem zazwyczaj nie jest brak osób znających odpowiedź a zadanie właściwego pytania!

24-06-2004 12:33
Pokaż profil m-a-x  Wyślij email do m-a-x   
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Potrzebne są dwie funkcje:

Private Declare Function lOpen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
Private Declare Function lClose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long

'W funkcji podajesz ścieżkę dostępu do pliku,
'a jej wyniku jest uchwyt (handle) do tego pliku.
'Uchwyt jest później potrzebny do odblokowania pliku.
Function Zablokuj(Ścieżka As String) As Long
Zablokuj = lOpen(Ścieżka, &H10)

End Function

'Funkcja odblokowuje plik, parametrem jest
'uchwyt do otwartego pliku.
Function odblokuj(handle As Long)
lClose handle
End Function


Dodatkowo po zamknięciu aplikacji, zablokowany plik nadal jest zablokowany.


_____________________________________________
www.mob.abc.pl - moja strona o VB

24-06-2004 17:20
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
Wszystkich odpowiedzi: 3 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1