RAW-Zugriffe

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
maupa
Beiträge: 105
Registriert: 12.12.2004 12:17

Re: RAW-Zugriffe

Beitrag von maupa »

Ich habe doch aber noch eine Frage die ich alleine nicht lösen kann, wahrscheinlich wieder Brett vor dem Kopf.
Wenn ich mehr lesen will Logo man vergrößert dem Buffer und so weiter.
Aber irgendwann ist Ende von Speicher.
Wie kann ich ReadFile_ sagen das er die Nächten 1024 Byte lesen soll.
So als Beispiel will ich 16 Gigabyte Auslesen hab aber nur 4 Gigabyte Speicher.
Oder ich will nur ein bestimmten Bereich lesen.. Hat da wer eine Lösung für wie ich direkt dahin lesen kann?

Danke
MAUPA
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: RAW-Zugriffe

Beitrag von _JON_ »

Du müsst einfach nur die Leseposition ändern.

Code: Alles auswählen

Import "kernel32.lib"
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
    SetFilePointerEx_.l(*hFile, liDistanceToMove.q, *lpNewFilePointer, dwMoveMethod.l) As "SetFilePointerEx"
  CompilerElse
    SetFilePointerEx_.l(*hFile, liDistanceToMove.q, *lpNewFilePointer, dwMoveMethod.l) As "_SetFilePointerEx@20"  
  CompilerEndIf
EndImport

;Springe 8 KB weiter
SetFilePointerEx_(*hFile, 8192, 0, 0)

;Lese die nächsten 8 KB
ReadFile_(*hFile, *Buffer, 8192, @NumberRead, 0)
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
maupa
Beiträge: 105
Registriert: 12.12.2004 12:17

Re: RAW-Zugriffe

Beitrag von maupa »

Hl,

wen *Buffer anzeigen will bekomme ich dem fehler:
Die angegebene Speicherposition ist nicht gültig für das Lesen.

Gruß
MAUPA
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: RAW-Zugriffe

Beitrag von Andreas21 »

So wird das nicht gehen:

Code: Alles auswählen

Import "kernel32.lib"
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
    SetFilePointerEx_.l(*hFile, liDistanceToMove.q, *lpNewFilePointer, dwMoveMethod.l) As "SetFilePointerEx"
  CompilerElse
    SetFilePointerEx_.l(*hFile, liDistanceToMove.q, *lpNewFilePointer, dwMoveMethod.l) As "_SetFilePointerEx@20"  
  CompilerEndIf
EndImport

;Springe 8 KB weiter
SetFilePointerEx_(*hFile, 8192, 0, 0)

;Lese die nächsten 8 KB
ReadFile_(*hFile, *Buffer, 8192, @NumberRead, 0)

ShowMemoryViewer(*Buffer, 1024)
Sondern so:

Code: Alles auswählen

Define *hFile, NumberRead.l, *Buffer

Import "kernel32.lib"
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
    SetFilePointerEx_.l(*hFile, liDistanceToMove.q, *lpNewFilePointer, dwMoveMethod.l) As "SetFilePointerEx"
  CompilerElse
    SetFilePointerEx_.l(*hFile, liDistanceToMove.q, *lpNewFilePointer, dwMoveMethod.l) As "_SetFilePointerEx@20"  
  CompilerEndIf
EndImport
  
*hFile = CreateFile_("\\.\\C:", #GENERIC_READ, #FILE_SHARE_READ | #FILE_SHARE_WRITE, 0, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, 0) 
If *hFile = #INVALID_HANDLE_VALUE : End "" : EndIf

SetFilePointerEx_(*hFile, 8192, 0, 0)

*Buffer = AllocateMemory(1024)
ReadFile_(*hFile, *Buffer, 1024, @NumberRead, 0)
CloseHandle_(*hFile)

ShowMemoryViewer(*Buffer, 1024)
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
maupa
Beiträge: 105
Registriert: 12.12.2004 12:17

Re: RAW-Zugriffe

Beitrag von maupa »

danke funktioniert Klasse

Gruß
maupa
Antworten