Bootsektor auslesen und in die Bootsect.dos schreiben

Für allgemeine Fragen zur Programmierung mit PureBasic.
gonimaus
Beiträge: 27
Registriert: 26.09.2004 14:21
Wohnort: Günzburg

Bootsektor auslesen und in die Bootsect.dos schreiben

Beitrag von gonimaus »

Hallo,
wie kann ich den Bootsektor auslesen und in eine Bootsect.dos schreiben.

Gruß Gonimaus
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

Da es kein einfaches Kommando ala "ReadBootSector(xyz)" gibt, solltest du mal folgende source studieren :
http://www.purearea.net/pb/CodeArchiv/F ... D+Files.pb

dort kann man ne hardisk auslesen.
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

irgendwie funkt das programm bei mir nicht so richitg :|. Zumindest die GUI nicht. Egal was ich drücke, nix passiert.
Bild
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

Mist, stimmt, Source ist halt zu alt.
Vielleicht schaffe ich es den mal umzubauen das er auch gescheiht unter
3.9x funktioniert.
Rings hat geschrieben:ziert sich nich beim zitieren
gonimaus
Beiträge: 27
Registriert: 26.09.2004 14:21
Wohnort: Günzburg

Beitrag von gonimaus »

Das Ding hilft mir nicht so richtig weiter. Wahrscheinlich bin ich da noch zu grün.

Gruß Gonimaus
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

Sollte nu auch mit 3.9x funktionieren

Code: Alles auswählen

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=1387&highlight=
; Author: Rings
; Date: 17. June 2003, Updated 23.2.2005 for PB 3.92

; *** Hexviewer for Hardisks and files ***

#Window_0 = 0 

#MenuBar_2 = 0 
#MENU_FileOpen = 1 
#MENU_Save  = 2 
#MENU_HDISK_C  = 3 
#MENU_Search  = 4 
#MENU_Replace  = 5 
#MENU_Back  = 6 
#MENU_Forward  = 7 
#MENU_HELP=8 

#PositionText=9 
#StatusText=10 

#DriveGadgets=100 
#HexGadget=200 
#AsciiGadget=62 
#AdressGadget=30 

#Suchen=14 
#Filtern=15 


Global Filename.s 
Global LIHwnd.l 
Global FHandle.l 
Global Buffer.l 
Global Offset.l 
Global FLen.l 

Procedure SROpenFile(AFilename.s) 
Fhandle=CreateFile_(@AFilename.s,#GENERIC_READ|#GENERIC_WRITE ,#FILE_SHARE_READ|#FILE_SHARE_WRITE,#NULL,#OPEN_EXISTING,#FILE_ATTRIBUTE_NORMAL,0 ) 
If FHandle 
Buffer=AllocateMemory(512) 
Offset=0 
ProcedureReturn fHandle 
EndIf 
EndProcedure 

Procedure SRGetData(NewPosition) 
Count=0 
Result=SetFilePointer_(Fhandle,Newposition,0,#FILE_BEGIN ) 
Result=ReadFile_(FHandle,Buffer,512,@count,0) 
ProcedureReturn Count 
EndProcedure 
Procedure SRGetDataNext() 
Count=0 
Result=ReadFile_(FHandle,Buffer,512,@count,0) 
ProcedureReturn Count 
EndProcedure 

Procedure SRGetFilepointer() 
ProcedureReturn SetFilePointer_(Fhandle,0,0,#FILE_CURRENT  ) 
EndProcedure 

Procedure SRGetDataPrevious() 
Count=0 
Result=SetFilePointer_(Fhandle,-1024,0,#FILE_CURRENT ) 
Result=ReadFile_(FHandle,Buffer,512,@count,0) 
ProcedureReturn Count 
EndProcedure 

Procedure SRCloseFile(FHandle1) 
If FHandle1<>0 
  FreeMemory(0) 
  CloseHandle_(FHandle1) 
  FHandle=0 
  ProcedureReturn fHandle1 
Else 
  ProcedureReturn -1 
EndIf    
EndProcedure 


Procedure Open_Window_0() 
  hwnd=OpenWindow(#Window_0, 252, 113, 620, 580,  #PB_Window_SystemMenu | #PB_Window_TitleBar , "PB Hexeditor") 
  ;hWnd = OpenWindow(0,100,100,0,0,#WS_POPUP,"Icon-Show") 
  If hwnd 
    If CreateGadgetList(WindowID()) 

    AnfangYLabels=36 

    If CreateToolBar(0, hwnd)
     ToolBarStandardButton(#MENU_FileOpen , #PB_ToolBarIcon_New)
     ToolBarStandardButton(#MENU_HDISK_C , #PB_ToolBarIcon_Open)
     ToolBarStandardButton(#MENU_Save, #PB_ToolBarIcon_Save)
    
     ToolBarSeparator()

     ToolBarStandardButton(#MENU_Back, #PB_ToolBarIcon_undo)
     ToolBarStandardButton(#MENU_Forward , #PB_ToolBarIcon_redo)
     ToolBarStandardButton(#MENU_Search, #PB_ToolBarIcon_Find)
     ToolBarSeparator()

     ToolBarStandardButton(#MENU_HELP, #PB_ToolBarIcon_Help )
     hGadget=TextGadget(#StatusText,200,3,300,30,"Status:OKay!") 

    EndIf
    ;hGadget=TextGadget(#StatusText,150,3,300,30,"Status:OKay!") 
    
   If CreatePopupMenu(0) 
    For I=1 To 26 
     Parameter.s=Chr(64+I)+":" 
     Select GetDriveType_(Parameter) 
      Case 0;      Result = Translator("Unknown") 
      Case 1;      Result = Translator("No root dir") 
      Case 2      ;Result = Translator("Removable") 
        MenuItem(#DriveGadgets+I, Parameter) 
      Case 3  ;Result = Translator("Drive Fixed") 
        MenuItem(#DriveGadgets+I, Parameter) 
      Case 4    ;  Result = Translator("Remote") 
      Case 5    ;  Result = Translator("CDROM") 
        MenuItem(#DriveGadgets+I, Parameter) 
      Case 6     ; Result = Translator("Ram disk") 
      Default     ; Result = Translator("Unknown") 
     EndSelect 
    Next I 
   EndIf 
    
    
      Abstand=80 
      AnfangY=20+AnfangYLabels 
      YSize=15 
      HexBreite=22 
    
      
      LoadFont(1,"Times New Roman",8) 
      LoadFont(1,"Courier New",12) 
      
      SetGadgetFont(#PB_Default ,UseFont(1)) 

      TextGadget(0,1,AnfangYLabels,Abstand-5,YSize,"Adress", #PB_Text_RIGHT);|#PB_Text_Border) 
      TextGadget(0,Abstand+20,AnfangYLabels,336,YSize,"HEX-DATA", 0);|#PB_Text_Border) 
      TextGadget(#PositionText,300,AnfangYLabels,80,YSize,"") 
    
      TextGadget(0,420,AnfangYLabels,180,YSize,"ASCII-DATA", #PB_Text_Center);|#PB_Text_Border) 
      
      P=#HexGadget 
      S=#AsciiGadget 
      StartDrawing(WindowOutput()  ) 
      For I=0 To 31 
       StringGadget(#AdressGadget+I,0,I*(YSize+1)+AnfangY,Abstand-5,YSize,Hex((P-100)), #PB_String_BorderLess|#PB_Text_RIGHT|#PB_String_Readonly) 
       For T=0 To 15 
        P+1 
       ; hwnd=StringGadget(P, Abstand + (T*HexBreite),I*(YSize+1)+AnfangY,20,YSize,"FF",#PB_String_BorderLess |#PB_String_UpperCase  ) 
        ;hwnd=TextGadget(P, Abstand + (T*HexBreite),I*(YSize+1)+AnfangY,20,YSize,"",0) 
        Locate( Abstand + (T*HexBreite),I*(YSize+1)+AnfangY) 
        DrawText("FF") 

       Next T 
       StringGadget(#AsciiGadget+I,435,I*(YSize+1)+AnfangY,165,YSize,"", #PB_String_BorderLess) 
      Next I    
      StopDrawing() 
      AddKeyboardShortcut(#Window_0, 1,     #PB_Shortcut_Up ) 
      AddKeyboardShortcut(#Window_0, 2,     #PB_Shortcut_Down ) 
    
     EndIf 
  EndIf 
EndProcedure 

Procedure FillHex(Startadress,Anzahl) 
Shared Buffer 
P=#HexGadget 

    AnfangYLabels=36 
    Abstand=80 
    AnfangY=20+AnfangYLabels 
    YSize=15 
    HexBreite=22 
    


  StartDrawing(WindowOutput()  ) 
  DrawingMode(0) 
  Box(Abstand,AnfangY,(16*HexBreite),32*(YSize+1),$FFFFFF) 
  DrawingMode(1) 
  FrontColor(0,0,0) 
For I=0 To 31 
  SetGadgetText(#AdressGadget+I,Hex(Startadress+(I*16))) 
   ascii.s="" 
   For T=0 To 15 
    Newoffset= P - #Hexgadget 
    P+1 
    Locate( Abstand + (T*HexBreite),I*(YSize+1)+AnfangY) 

    If Buffer<>0 And p <=Anzahl+#HexGadget 
     Wert=PeekB(Buffer + Newoffset) 
;    SetGadgetText(P,Right("00"+Hex(Wert),2)) 
     DrawText(Right("00"+Hex(Wert),2)) 
    Else 
      
;     SetGadgetText(P," ") 
   DrawText("  ") 


     Wert=-1;Random(255) 
    EndIf 

    If Wert>-1 And Wert<256 
     ascii.s=ascii.s+Chr(Wert) 
    Else 
     ascii.s=ascii.s+" " 
    EndIf 
   Next T 
  SetGadgetText(#AsciiGadget+I,ascii) 
Next I    
StopDrawing() 
If FHandle<>0 
  SetGadgetText(#PositionText, "Pos="+StrU(SRGetFilepointer()-512,2) ) 
EndIf 
EndProcedure 


Open_Window_0() 
FillHex(0,0) 
Repeat 
;-MAINEVENT 
  Event = WaitWindowEvent() 
  EM= EventMenuID() 
  EVT=EventType() 
  GD=EventGadgetID() 

  ;Debug Str(Event)+":"+Str(EVT)+":"+Str(EM) 

  If Event=#PB_Event_Menu 
   Debug EM
   If EM>#DriveGadgets And EM <#DriveGadgets+26 
    Beep_(100,100) 
    SRCloseFile(FHandle) 
    
    Filename.s="\\.\"+Chr(EM-36)+":" 
    If SROpenFile(Filename.s) 
     Offset=0 
     FLen.l=-2 
     SRGetData(Offset) 
     Beep_(100,100) 
     FillHex(Offset,512) 
     SetGadgetText(#StatusText,"HardDisk drive C:") 
    EndIf 
    EM=0 
   EndIf 
  EndIf 
  If Event=#PB_Event_Menu 
   Select GD 
   Case #MENU_HELP 
    MessageRequester("Info about","PureBasic-Hexeditor(viewer) by Siegfried Rings",0) 
   Case #MENU_Search 
    Search.s=InputRequester("PB-Hexeditor","Type in String To search For",Search.s) 
    Beep_(100,100) 
   Case #MENU_FileOpen 
    Filename.s=OpenFileRequester("Choose File to examine", DefaultFile$, "*.*",0 ) 
    If Filename<>"" 
     DefaultFile$=Filename 
     SRCloseFile(FHandle) 
     If SROpenFile(Filename.s) 
      FLen.l=FileSize(Filename.s) 
      Offset=0 
      SRGetData(Offset) 
      Beep_(100,100) 
      FillHex(Offset,FLEN) 
      SetGadgetText(#StatusText,"File="+Filename.s) 
     EndIf 
    EndIf 
    EM=0 
   Case #MENU_HDISK_C  
    DisplayPopupMenu(0, WindowID()) 
    
   Case #MENU_Back  
    If FHandle<>0 
     If Offset<= 512 
      Offset=0 
      FillHex(Offset,Result) 
     Else 
      Result=SRGetDataPrevious() 
      If Result<>0 
       Offset=SRGetFilepointer();-512 
       FillHex(Offset-512,Result) 
      EndIf  
     EndIf 
    EndIf  
   Case #MENU_Forward  
    
    If FHandle<>0 
     Result=SRGetDataNext() 
     If Result>0 
      Offset=SRGetFilepointer();-512 
      FillHex(Offset-512,Result) 
     EndIf 
    EndIf 
   EndSelect 
   If GD>=#HexGadget And GD<=#HexGadget+512 
    If EVT=#PB_EventType_Change          
     Len=Len(GetGadgetText(GD)) 
     If Len>2 
      Beep_(100,100) 
      SetGadgetText(GD,Left(GetGadgetText(GD),2)) 
     EndIf 
    EndIf 
   EndIf 
  EndIf 

Until Event = #PB_EventCloseWindow 
SRCloseFile(FHandle) 
End
; ExecutableFormat=Windows
; CursorPosition=4
; FirstLine=1
; EOF
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

mh geil. Könnte man eine Konkurenz zu WinImage programmieren ^^. Das Programm kostet und so könnte man ne freeware konkurenz aufbauen...
Bild
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Unter was für Windowsversionen läuft das?
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

freedimension hat geschrieben:Unter was für Windowsversionen läuft das?
who cares on win89 ?
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
bingo
Beiträge: 118
Registriert: 16.09.2004 18:33
Wohnort: thüringen
Kontaktdaten:

Beitrag von bingo »

1:0>1
Antworten