Hi,
gibt es einen Befehl, um auf eine Festplatte / Speichermedium clustermässig zuzugreifen? Ich möchte zusätzlich zu meinem HD-freie-Bereiche-Überschreibtool (naja, es läuft so recht und schlecht, aber ziemlich schnell) ganze Festplatten wipen können.
Welche Befehle gibt es, um:
a) dieFestplattennummer zu ermitteln,
b) die Anzahl der Sektoren bzw. der Cluster auf der Platte zu ermitteln,
c) auf die Sektoren bzw. Cluster zu schreiben,
d) die Festplattengrösse zu ermitteln
e) die Clustergrösse (variiert je nach OS und Filesystem) zu ermitteln
f)was brauche ich ggfs. noch?
Zu meinem jetzigen Tool:
a) Mit welchem Befehl kann ich den freien Speicher ermitteln?
b) Windoof hat die seltsame Eigenschaft, kurz vor dem Ende des freien Speichers den restlichen freien Speicher nicht mehr "hergeben" zu wollen.
Woran liegt das und wie kann man das ggfs. austricksen?
Bitte einfache Erläuterungen.
Vielen Dank
Willy-Billy
Gibt es einen Befehl um direkt auf die HD zuzugreifen?
-
- Beiträge: 2
- Registriert: 02.02.2006 19:08
Hi,
a) und d) gibt es, AFAIK, als Befehle in der PBOSL (PureBasicOpenSourceLibrary).
Die kannst Du auf www.PureArea.de saugen. Dort gibt es noch eine menge mehr
an Librarys, schau Dich doch dort mal um.
Evtl. gibt die WinAPI noch mehr her. Hab Dir mal ne Kleinigkeit
rausgesucht, kannst ja selbst in der Win32Help weiterforschen..
Win32 Help:
oder:
Gruß
a) und d) gibt es, AFAIK, als Befehle in der PBOSL (PureBasicOpenSourceLibrary).
Die kannst Du auf www.PureArea.de saugen. Dort gibt es noch eine menge mehr
an Librarys, schau Dich doch dort mal um.
Evtl. gibt die WinAPI noch mehr her. Hab Dir mal ne Kleinigkeit
rausgesucht, kannst ja selbst in der Win32Help weiterforschen..
Win32 Help:
Code: Alles auswählen
BOOL GetDiskFreeSpace(
LPCTSTR lpRootPathName, // address of root path
LPDWORD lpSectorsPerCluster, // address of sectors per cluster
LPDWORD lpBytesPerSector, // address of bytes per sector
LPDWORD lpNumberOfFreeClusters, // address of number of free clusters
LPDWORD lpTotalNumberOfClusters // address of total number of clusters
);
oder:
Code: Alles auswählen
The DISK_GEOMETRY structure describes the geometry of disk devices and media.
typedef struct _DISK_GEOMETRY {
LARGE_INTEGER Cylinders;
MEDIA_TYPE MediaType;
DWORD TracksPerCylinder;
DWORD SectorsPerTrack;
DWORD BytesPerSector;
} DISK_GEOMETRY ;
Members
Cylinders
The number of cylinders.
MediaType
The type of media. See MEDIA_TYPE.
TracksPerCylinder
The number of tracks per cylinder.
SectorsPerTrack
The number of sectors per track.
BytesPerSector
The number of bytes per sector
Gruß
Ich habe selbst noch nicht damit gearbeitet.
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