Problem mit ReadProcessMemory()

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Problem mit ReadProcessMemory()

Beitrag von Scarabol »

Hi,

ich bekomm immer nur die Meldun angezeigt:
Nur ein Teil der ReadProcessMemory- oder WriteProcessMemory-Anforderung wurde abgeschlossen.
Sonst scheint alles ok zu sein...

Wo hab ich den Fehler gemacht?

Code: Alles auswählen


Procedure.s GetLastErrorAsString(ErrorCode=-1)
   Protected message.s{1024}
   If ErrorCode = -1
      ErrorCode=GetLastError_()
   EndIf
   FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM, 0, ErrorCode, 0, @message, 1024, 0)
   ProcedureReturn message
EndProcedure


; tokenHandle = AllocateMemory(4)
; OpenProcessToken_(GetCurrentProcess_(), #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, tokenHandle)
; privilegeToken.TOKEN_PRIVILEGES
; LookupPrivilegeValue_(0, SE_DEBUG_NAME, privilegeToken\Privileges[0]\Luid)
; privilegeToken\PrivilegeCount = 1
; privilegeToken\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED
; AdjustTokenPrivileges_(tokenHandle, 0, privilegeToken, SizeOf(TOKEN_PRIVILEGES), 0, 0)
; CloseHandle_(tokenHandle)


hwnd = FindWindow_(0, "Eigene Dateien")
If hwnd = 0
  Debug GetLastErrorAsString()
  End
EndIf

Debug "hwnd"
Debug hwnd

buffer = AllocateMemory(4)
If GetWindowThreadProcessId_(hwnd, buffer) = 0
  Debug GetLastErrorAsString()
  End
EndIf
hprocess = PeekL(buffer)

Debug "hprocess"
Debug hprocess

ohproc = OpenProcess_(#PROCESS_VM_READ, #False, hprocess)
If ohproc = 0
  Debug GetLastErrorAsString()
  End
EndIf

Debug "ohproc"
Debug ohproc

buffer = AllocateMemory(100)
target = AllocateMemory(4)
PokeL(target, 0)

If ReadProcessMemory_(ohproc, 0, buffer, 10, 0) = 0
  Debug GetLastErrorAsString()
  End
EndIf

Debug "buffer"
Debug PeekL(buffer)
MfG
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Problem mit ReadProcessMemory()

Beitrag von ts-soft »

Ein Fenster "Eigene Dateien" kenne ich nicht, jedenfalls ist dort der hWnd 0, was auch sonst, und
das Programm beendet sich, wie es programmiert wurde.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Re: Problem mit ReadProcessMemory()

Beitrag von Scarabol »

Dann öffne doch bitte deinen Ordner Eigene Dateien mit dem Explorer

MfG
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Problem mit ReadProcessMemory()

Beitrag von ts-soft »

Eigene Dateien gibts ja nicht mehr, aber "Eigene Dokumente" hab ich geöffnet.
(c:\Users\username\Documents\)
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Re: Problem mit ReadProcessMemory()

Beitrag von Scarabol »

Willst mich wohl zum Narren halten oder?

Mach doch bitte einfach ein Explorer Fenster auf und gib den Namen oben ein. Ich verwende übrigens XP, aber mit Vista wirds wohl auch nicht klappen, oder haste schon Windows 7?

MfG
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Problem mit ReadProcessMemory()

Beitrag von ts-soft »

Scarabol hat geschrieben:Willst mich wohl zum Narren halten oder?l
Morgen wieder :mrgreen:
Mit "Desktop" funktioniert es unter 7, jedenfalls kommt er jetzt etwas weiter.
Ich denke mal das Problem ist der allokierte Speicher. VirtualAlloc könnte helfen.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Re: Problem mit ReadProcessMemory()

Beitrag von Scarabol »

Welches MEM_??? bzw. PAGE_??? sollte ich da verwenden?

Edit, so klappts bei mir leider auch nicht...

Code: Alles auswählen

Procedure.s GetLastErrorAsString(ErrorCode=-1)
   Protected message.s{1024}
   If ErrorCode = -1
      ErrorCode=GetLastError_()
   EndIf
   FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM, 0, ErrorCode, 0, @message, 1024, 0)
   ProcedureReturn message
EndProcedure


; tokenHandle = AllocateMemory(4)
; OpenProcessToken_(GetCurrentProcess_(), #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, tokenHandle)
; privilegeToken.TOKEN_PRIVILEGES
; LookupPrivilegeValue_(0, SE_DEBUG_NAME, privilegeToken\Privileges[0]\Luid)
; privilegeToken\PrivilegeCount = 1
; privilegeToken\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED
; AdjustTokenPrivileges_(tokenHandle, 0, privilegeToken, SizeOf(TOKEN_PRIVILEGES), 0, 0)
; CloseHandle_(tokenHandle)


hwnd = FindWindow_(0, "Eigene Dateien")
If hwnd = 0
  Debug GetLastErrorAsString()
  End
EndIf

Debug "hwnd"
Debug hwnd

buffer = AllocateMemory(4)
If GetWindowThreadProcessId_(hwnd, buffer) = 0
  Debug GetLastErrorAsString()
  End
EndIf
hprocess = PeekL(buffer)

Debug "hprocess"
Debug hprocess

ohproc = OpenProcess_(#PROCESS_VM_READ, #False, hprocess)
If ohproc = 0
  Debug GetLastErrorAsString()
  End
EndIf

Debug "ohproc"
Debug ohproc

buffer = VirtualAlloc_(0, 100, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
If buffer = 0
  Debug GetLastErrorAsString()
  End
EndIf

If ReadProcessMemory_(ohproc, 0, buffer, 4, 0) = 0
  Debug GetLastErrorAsString()
  End
EndIf

Debug "buffer"
Debug PeekL(buffer)
MfG
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Problem mit ReadProcessMemory()

Beitrag von ts-soft »

Bei ReadProcessMemory gibste an, Dein Buffer wäre 4 Byte gross? Der ist wohl 100 Byte groß.
Ansonsten weiß ich im moment auch nicht, weiß ja nicht was der Code überhaupt erreichen soll.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Re: Problem mit ReadProcessMemory()

Beitrag von Scarabol »

Ich will einfach nur den Speicher manipulieren hab im Codearchiv ein Trainer Beispiel gefunden, da wird der Windows Taschenrechner modifiziert. Sieht sehr passend aus muss nur noch schauen, wie ich an eine bestimmte Speicheradresse springen kann. Falls du mir da helfen kannst, hier der Link ich blick noch nicht so ganz durch:
http://purearea.net/pb/CodeArchiv/Other ... Process.pb

MfG
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Problem mit ReadProcessMemory()

Beitrag von Thorium »

Klappt denn das allozieren des Speichers?
Bekommst du nen gültigen Pointer von dem Aufruf?

Normalerweise kannst du #MEM_COMMIT alleine nur verwenden, wenn der Speicher dort schon reserviert ist. Ist er nicht reserviert muss er erst reserviert werden, bzw. VirtualAlloc kann Reserve und Commit gleichzeitig.
Wäre dann so:

Code: Alles auswählen

buffer = VirtualAlloc_(0, 100, #MEM_COMMIT | #MEM_RESERVE, #PAGE_EXECUTE_READWRITE)
Die Größe des Speicherblocks sollte reichen. VirtualAlloc alloziert Minimum 0x1000 Bytes.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Antworten