AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Zu Mountpoints Festplatte/Parition bzw. Laufwerksbuchstabe auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Zu Mountpoints Festplatte/Parition bzw. Laufwerksbuchstabe auslesen

Ein Thema von Captnemo · begonnen am 6. Okt 2015 · letzter Beitrag vom 7. Okt 2015
Antwort Antwort
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

AW: Zu Mountpoints Festplatte/Parition bzw. Laufwerksbuchstabe auslesen

  Alt 7. Okt 2015, 12:14
Okay, mühsam ernährt sich das Eichhörnchen (Dank an SirRufo....ich hab's tatsächlich nicht gesehen )

Jetzt bin schon mal einen Schritt weiter:

Code:
\\?\Volume{30e008b5-f5d1-11e2-be6b-806e6f6e6963}\ | 25 | \Device\HarddiskVolume2 | 0 | C:\
\\?\Volume{2b9cf42e-43ae-11e3-be9a-60a44ccd60fd}\ | 25 | \Device\HarddiskVolume3 | 0 | D:\
\\?\Volume{d1c41ef1-1c62-11e4-bed6-60a44ccd60fd}\ | 25 | \Device\HarddiskVolume5 | 0 | I:\
\\?\Volume{30e008b4-f5d1-11e2-be6b-806e6f6e6963}\ | 25 | \Device\HarddiskVolume1 | 0 |
\\?\Volume{ab813b75-2ac8-11e4-bedb-806e6f6e6963}\ | 25 | \Device\HarddiskVolume4 | 0 | L:\
\\?\Volume{238e20f9-4c25-11e5-bf27-806e6f6e6963}\ | 16 | \Device\CdRom0 | 0 | E:\
Nicht an der komischen Formatierung stören, das mach ich nur zum Testen.
Ich habe also nun mein VolumeName, mein DeviceName und auch meinen dazugehörigen Laufwerksbuchstaben.
HarddiskVolume1 ist meine System-reserved-Partition, HarddiskVolume4 ist mein CardReader und CdRom0 eben mein DVD-Laufwerk.

Wenn ich mir zu den Laufwerken noch die VolumeInfos auslesen, dann könnte ich ja auch feststellen, ob ein Volume überhaupt einen Inhalt hat.

Aber was mir wirklich noch zu meinem Glück fehlt, ist das zuordnet der DeviceNames zu den Physikalischen HDD's. Hat dazu noch jemand eine Idee?

Und da die Nummer hinter HarddiskVolume anzunehmenderweise in chronologischer Reihenfolge des Erstellens der Partition vergeben wird, gibt diese mir auch keinen Aufschluss darüber, in welcher Reihenfolge diese auf der Platte angeordnet sind. Dazu könnte ich ggf. aber Start- und Endsektor auslesen, dann könnte ich mir das schon irgendwie zusammenreimen.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#2

AW: Zu Mountpoints Festplatte/Parition bzw. Laufwerksbuchstabe auslesen

  Alt 7. Okt 2015, 13:47
WMI_GetWin32DiskDriveInfo

Delphi-Quellcode:
program GetDiskDriveInfo;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  Winapi.ActiveX,
  System.Win.ComObj,
  System.Variants;

function VarToInt(const AVariant: Variant): integer;
begin Result := StrToIntDef(Trim(VarToStr(AVariant)), 0); end;

function WmiDateToTDatetime(vDate : OleVariant) : TDateTime;
var FWbemDateObj : OleVariant;
begin;
  FWbemDateObj := CreateOleObject('WbemScripting.SWbemDateTime');
  FWbemDateObj.Value:=vDate;
  Result:=FWbemDateObj.GetVarDate;
end;

procedure GetCIM_PhysicalMediaInfo;
const
  WbemUser ='';
  WbemPassword ='';
  WbemComputer ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject : OLEVariant;
  oEnum : IEnumvariant;
  iValue : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM CIM_PhysicalMedia','WQL',wbemFlagForwardOnly);
  oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    Writeln(Format('Capacity %d',[VarToInt(FWbemObject.Capacity)]));// Uint64
    Writeln(Format('Caption %s',[VarToStr(FWbemObject.Caption)]));// String
    Writeln(Format('CleanerMedia %s',[VarToStr(FWbemObject.CleanerMedia)]));// Boolean
    Writeln(Format('CreationClassName %s',[VarToStr(FWbemObject.CreationClassName)]));// String
    Writeln(Format('Description %s',[VarToStr(FWbemObject.Description)]));// String
    Writeln(Format('HotSwappable %s',[VarToStr(FWbemObject.HotSwappable)]));// Boolean
    Writeln(Format('InstallDate %s',[VarToStr(FWbemObject.InstallDate)]));// Datetime
    Writeln(Format('Manufacturer %s',[VarToStr(FWbemObject.Manufacturer)]));// String
    Writeln(Format('MediaDescription %s',[VarToStr(FWbemObject.MediaDescription)]));// String
    Writeln(Format('MediaType %d',[VarToInt(FWbemObject.MediaType)]));// Uint16
    Writeln(Format('Model %s',[VarToStr(FWbemObject.Model)]));// String
    Writeln(Format('Name %s',[VarToStr(FWbemObject.Name)]));// String
    Writeln(Format('OtherIdentifyingInfo %s',[VarToStr(FWbemObject.OtherIdentifyingInfo)]));// String
    Writeln(Format('PartNumber %s',[VarToStr(FWbemObject.PartNumber)]));// String
    Writeln(Format('PoweredOn %s',[VarToStr(FWbemObject.PoweredOn)]));// Boolean
    Writeln(Format('Removable %s',[VarToStr(FWbemObject.Removable)]));// Boolean
    Writeln(Format('Replaceable %s',[VarToStr(FWbemObject.Replaceable)]));// Boolean
    Writeln(Format('SerialNumber %s',[TRIM(VarToStr(FWbemObject.SerialNumber))]));// String
    Writeln(Format('SKU %s',[VarToStr(FWbemObject.SKU)]));// String
    Writeln(Format('Status %s',[VarToStr(FWbemObject.Status)]));// String
    Writeln(Format('Tag %s',[VarToStr(FWbemObject.Tag)]));// String
    Writeln(Format('Version %s',[VarToStr(FWbemObject.Version)]));// String
    Writeln(Format('WriteProtectOn %s',[VarToStr(FWbemObject.WriteProtectOn)]));// Boolean

    Writeln('----------------------------------------------------------------------');
    FWbemObject:=Unassigned;
  end;
end;
//------------------------------------------------------------------------------
procedure GetWin32_DiskDriveInfo;
const
  WbemUser ='';
  WbemPassword ='';
  WbemComputer ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject : OLEVariant;
  oEnum : IEnumvariant;
  iValue : LongWord;
  FWbemDateObj : OleVariant;
  Dt : TDateTime;
  I : Integer;
  Data : array of WORD;//Byte;
  params: OleVariant; //TVarArray;
// EventDate : TDateTime;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive','WQL',wbemFlagForwardOnly);
  oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    Writeln(Format('Availability %d',[VarToInt(FWbemObject.Availability)]));// Uint16
    Writeln(Format('BytesPerSector %d',[VarToInt(FWbemObject.BytesPerSector)]));// Uint32

// Writeln(Format('Capabilities %d',[VarToInt(FWbemObject.Capabilities)]));// Array of Uint16
      if not VarIsNull(FWbemObject.Capabilities) then
      begin
        Data := FWbemObject.Capabilities;
        for I:= VarArrayLowBound(data,1) to VarArrayHighBound(data,1) do
          Writeln('Capabilities: '+IntToStr(Data[I]));// Array of WORD /Uint16
      end;

// Writeln(Format('CapabilityDescriptions %s',[VarToStr(FWbemObject.CapabilityDescriptions)]));// Array of VarToStr
      if not VarIsNull(FWbemObject.CapabilityDescriptions) then
      begin
        Params := FWbemObject.CapabilityDescriptions;
        for I:= VarArrayLowBound(Params,1) to VarArrayHighBound(Params,1) do
          Writeln('CapabilityDescriptions: '+ VarToStr(Params[I]));// Array of VarToStr
      end;

    Writeln(Format('Caption %s',[VarToStr(FWbemObject.Caption)]));// VarToStr
    Writeln(Format('CompressionMethod %s',[VarToStr(FWbemObject.CompressionMethod)]));// String
    Writeln(Format('ConfigManagerErrorCode %d',[VarToInt(FWbemObject.ConfigManagerErrorCode)]));// Uint32
    Writeln(Format('ConfigManagerUserConfig %s',[VarToStr(FWbemObject.ConfigManagerUserConfig)]));// Boolean
    Writeln(Format('CreationClassName %s',[VarToStr(FWbemObject.CreationClassName)]));// String
    Writeln(Format('DefaultBlockSize %d',[VarToInt(FWbemObject.DefaultBlockSize)]));// Uint64
    Writeln(Format('Description %s',[VarToStr(FWbemObject.Description)]));// String
    Writeln(Format('DeviceID %s',[VarToStr(FWbemObject.DeviceID)]));// String
    Writeln(Format('ErrorCleared %s',[VarToStr(FWbemObject.ErrorCleared)]));// Boolean
    Writeln(Format('ErrorDescription %s',[VarToStr(FWbemObject.ErrorDescription)]));// String
    Writeln(Format('ErrorMethodology %s',[VarToStr(FWbemObject.ErrorMethodology)]));// String
    Writeln(Format('FirmwareRevision %s',[VarToStr(FWbemObject.FirmwareRevision)]));// String
    Writeln(Format('Index %d',[VarToInt(FWbemObject.Index)]));// Uint32
// Writeln(Format('InstallDate %s',[VarToStr(FWbemObject.InstallDate)]));// Datetime
// Writeln(Format('InstallDate %s',[WmiDateToTDatetime(FWbemObject.InstallDate)]));
// dt:= WmiDateToTDatetime(FWbemObject.InstallDate);

    Writeln(Format('InterfaceType %s',[VarToStr(FWbemObject.InterfaceType)]));// String
    Writeln(Format('LastErrorCode %d',[VarToInt(FWbemObject.LastErrorCode)]));// Uint32
    Writeln(Format('Manufacturer %s',[VarToStr(FWbemObject.Manufacturer)]));// String
    Writeln(Format('MaxBlockSize %d',[VarToInt(FWbemObject.MaxBlockSize)]));// Uint64
    Writeln(Format('MaxMediaSize %d',[VarToInt(FWbemObject.MaxMediaSize)]));// Uint64
    Writeln(Format('MediaLoaded %s',[VarToStr(FWbemObject.MediaLoaded)]));// Boolean
    Writeln(Format('MediaType %s',[VarToStr(FWbemObject.MediaType)]));// String
    Writeln(Format('MinBlockSize %d',[VarToInt(FWbemObject.MinBlockSize)]));// Uint64
    Writeln(Format('Model %s',[VarToStr(FWbemObject.Model)]));// String
    Writeln(Format('Name %s',[VarToStr(FWbemObject.Name)]));// String
    Writeln(Format('NeedsCleaning %s',[VarToStr(FWbemObject.NeedsCleaning)]));// Boolean
    Writeln(Format('NumberOfMediaSupported %d',[VarToInt(FWbemObject.NumberOfMediaSupported)]));// Uint32
    Writeln(Format('Partitions %d',[VarToInt(FWbemObject.Partitions)]));// Uint32
    Writeln(Format('PNPDeviceID %s',[VarToStr(FWbemObject.PNPDeviceID)]));// String
    Writeln(Format('PowerManagementCapabilities %d',[VarToInt(FWbemObject.PowerManagementCapabilities)]));// Array of Uint16
    Writeln(Format('PowerManagementSupported %s',[VarToStr(FWbemObject.PowerManagementSupported)]));// Boolean
    Writeln(Format('SCSIBus %d',[VarToInt(FWbemObject.SCSIBus)]));// Uint32
    Writeln(Format('SCSILogicalUnit %d',[VarToInt(FWbemObject.SCSILogicalUnit)]));// Uint16
    Writeln(Format('SCSIPort %d',[VarToInt(FWbemObject.SCSIPort)]));// Uint16
    Writeln(Format('SCSITargetId %d',[VarToInt(FWbemObject.SCSITargetId)]));// Uint16
    Writeln(Format('SectorsPerTrack %d',[VarToInt(FWbemObject.SectorsPerTrack)]));// Uint32
    Writeln(Format('SerialNumber %s',[TRIM(VarToStr(FWbemObject.SerialNumber))]));// String
    Writeln(Format('Signature %d',[VarToInt(FWbemObject.Signature)]));// Uint32
    Writeln(Format('Size %d',[VarToInt(FWbemObject.Size)]));// Uint64
    Writeln(Format('Status %s',[VarToStr(FWbemObject.Status)]));// String
    Writeln(Format('StatusInfo %d',[VarToInt(FWbemObject.StatusInfo)]));// Uint16
    Writeln(Format('SystemCreationClassName %s',[VarToStr(FWbemObject.SystemCreationClassName)]));// String
    Writeln(Format('SystemName %s',[VarToStr(FWbemObject.SystemName)]));// String
    Writeln(Format('TotalCylinders %d',[VarToInt(FWbemObject.TotalCylinders)]));// Uint64
    Writeln(Format('TotalHeads %d',[VarToInt(FWbemObject.TotalHeads)]));// Uint32
    Writeln(Format('TotalSectors %d',[VarToInt(FWbemObject.TotalSectors)]));// Uint64
    Writeln(Format('TotalTracks %d',[VarToInt(FWbemObject.TotalTracks)]));// Uint64
    Writeln(Format('TracksPerCylinder %d',[VarToInt(FWbemObject.TracksPerCylinder)]));// Uint32

    Writeln('----------------------------------------------------------------------');
    FWbemObject:=Unassigned;
  end;
end;

begin
 try
    CoInitialize(nil);
    try
      GetCIM_PhysicalMediaInfo;
      WriteLn('----------------------------------------------------------------------');
      GetWin32_DiskDriveInfo;
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;

 Writeln('Press Enter to exit');
 Readln;
end.

Geändert von hathor ( 7. Okt 2015 um 14:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#3

AW: Zu Mountpoints Festplatte/Parition bzw. Laufwerksbuchstabe auslesen

  Alt 7. Okt 2015, 14:32
Vor vielen Jahren hab ich mal etwas ähnliches gesucht und daraus diese Funktion(en) gebastelt:
Delphi-Quellcode:
function GetLD(Drive: Char): Cardinal;
var
  Buffer : String;
begin
  Buffer := Format('\\.\%s:',[Drive]);
  Result := CreateFile(PChar(Buffer),
                       GENERIC_READ OR GENERIC_WRITE,
                       FILE_SHARE_READ OR FILE_SHARE_WRITE,
                       nil,
                       OPEN_EXISTING,
                       0,
                       0);
  If Result = INVALID_HANDLE_VALUE Then
    begin
    Result := CreateFile(PChar(Buffer),
                         GENERIC_READ,
                         FILE_SHARE_READ OR FILE_SHARE_WRITE,
                         nil,
                         OPEN_EXISTING,
                         0,
                         0);
  end;
end;

function GetPhysicalDiskNumber(Drive: Char): shortint;
var
  LD : DWORD;
  DiskExtents : PVolumeDiskExtents;
  DiskExtent : TDiskExtent;
  BytesReturned : Cardinal;
begin
  Result := -1;
  LD := GetLD(Drive);
  If LD = INVALID_HANDLE_VALUE Then Exit;
  Try
    DiskExtents := AllocMem(Max_Path);
    DeviceIOControl(LD,
                    IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,
                    nil,
                    0,
                    DiskExtents,
                    MAX_PATH,
                    BytesReturned,
                    nil);
    If DiskExtents^.NumberOfDiskExtents > 0 Then
      begin
      DiskExtent := DiskExtents^.Extents[0];
      Result := DiskExtent.DiskNumber;
    end;
  Finally
    CloseHandle(LD);
  end;
end;
Ich sehe gerade, dass da wahrscheinlich ein schickes Speicherleck drin ist, und auch sonst ist der Code eher suboptimal - naja, ist eben alter Code (und wahrscheinlich weniger schlimm als der Code von jemand anders, den ich seit vorgestern in den Fingern habe).

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#4

AW: Zu Mountpoints Festplatte/Parition bzw. Laufwerksbuchstabe auslesen

  Alt 7. Okt 2015, 16:52
@Hathor: Okay über WMI geht's natürlich, und wenn ich am Ende das anders nicht hinbekomme, werde ich es wohl auch so machen müssen. Aber unabhängig davon hat mich jetzt ein bisschen der Ergeiz gepackt, das mal so zum Laufen zu kriegen.

@Dalai: Das Funktioniert sicher auch. Aber damit kann ich ja nur die Paritionen ansprechen, die auch über ein LW-Buchstaben verfügen.

Ich habe mir mittlerweise das hier zusammengebastelt. (Man muss hier von Basteln sprechen, denn diese C-Übersetzung aus dem MSDN fällt mir echt schwer).

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    mmo1: TMemo;
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  const
    PARTITION_BASIC_DATA_GUID = 'ebd0a0a2-b9e5-4433-87c0-68b6b72699c7';
    PARTITION_ENTRY_UNUSED_GUID = '00000000-0000-0000-0000-000000000000';
    PARTITION_SYSTEM_GUID = 'c12a7328-f81f-11d2-ba4b-00a0c93ec93b';
    PARTITION_MSFT_RESERVED_GUID = 'e3c9e316-0b5c-4db8-817d-f92df00215ae';
    PARTITION_LDM_METADATA_GUID = '5808c8aa-7e8f-42e0-85d2-e1e90434cfb3';
    PARTITION_LDM_DATA_GUID = 'af9b60a0-1431-4f62-bc68-3311714a69ad';
    PARTITION_MSFT_RECOVERY_GUID = 'de94bba4-06d1-4d40-a16a-bfd50179d6ac';

    GTP_ATTRIBUTE_PLATFORM_REQUIRED = $0000000000000001;
    GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER = $8000000000000000;
    GPT_BASIC_DATA_ATTRIBUTE_HIDDEN = $4000000000000000;
    GTP_BASIC_data_ATTRIBUTE_SHADOW_COPY = $2000000000000000;
    GTP_BASIC_DATA_ATTRIBUTE_READ_ONLY = $1000000000000000;



  Type
    PARTITION_STYLE = type Integer;

    PARTITION_INFORMATION_MBR = record
      PartitionType: Byte;
      BootIndicator: BOOL;
      RecognizedPartition: BOOL;
      HiddenSecorts: DWORD;
    end;

    PARTITION_INFORMATION_GPT = record
      PartitonType: TGUID;
      PartitionId: TGUID;
      Attributes: DWORD64;
      Name: WCHAR;
    end;

    _PARTITION_INFORMATION_EX = record
      PartitionStyle: PARTITION_STYLE;
      StartingOffset: LARGE_INTEGER;
      PartitionLength: LARGE_INTEGER;
      PartitionNumber: ULONG;
      RewritePartition: Boolean;
    case Integer of
     0: (Mbr: PARTITION_INFORMATION_MBR);
     1: (Gpt: PARTITION_INFORMATION_GPT);
    end;
  const
    PARTITION_STYLE_MBR = PARTITION_STYLE(0);
    PARTITION_STYLE_GPT = PARTITION_STYLE(1);
    PARTITION_STYLE_RAW = PARTITION_STYLE(2);

// function FindFirstVolume(lpszVolumeName: LPTSTR; cchBufferLength: DWord): THandle; stdcall; external 'kernel32.dll' name 'FindFirstVolumeW';
// function FindNextVolume(hFindVolume: THandle; lpszVolumeName: LPTSTR; cchBufferLength: DWORD): BOOL; stdcall; external 'kernel32.dll' name 'FindNextVolumeW';
// function FindVolumeClose(hFindVolume: THandle): BOOL; stdcall; external 'kernel32.dll' name 'FindVolumeClose';
// function GetVolumePathNames(lpszVolumeName: LPCTSTR; lpszVolumePathName: LPTSTR; cchBufferLength: DWORD; lpcchReturnLength: PDWORD): BOOL; stdcall; external 'kernel32.dll' name 'GetVolumePathNamesForVolumeNameW';


var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
  h, p: Integer;
  Device: string;
  hDevice: Cardinal;
  PARTITION_INFORMATION_EX: _PARTITION_INFORMATION_EX;
  Len: Cardinal;
  StartOffset, PartLength: Int64;
begin
  for h := 1 to 9 do
  begin
    Device:='\\.\Harddisk1'+IntToStr(h);
    hdevice:=CreateFile(PChar(Device), 0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
    if hDevice <> INVALID_HANDLE_VALUE then
    begin
      DeviceIoControl(hDevice, IOCTL_DISK_GET_PARTITION_INFO_EX, nil, 0, @PARTITION_INFORMATION_EX, SizeOf(PARTITION_INFORMATION_EX), Len, nil);
      StartOffset:=PARTITION_INFORMATION_EX.StartingOffset.QuadPart;
      PartLength:=PARTITION_INFORMATION_EX.PartitionLength.QuadPart;
      mmo1.Lines.Add(Device+' = '+IntToStr(StartOffset)+' - '+IntToStr(PartLength));
      CloseHandle(hDevice);
      ZeroMemory(@PARTITION_INFORMATION_EX, 0);
    end;
    //end;
  end;
end;

end.
(Man denke sich jetzt zu obigen Code noch eine Form mit Memo und Button)

Ist jetzt nur ein Testprogramm um mir die Funktion etwas besser zu verdeutlichen.

Sind sicherlich viele Fehler drin. Aber so grundsätzlich kommt da schon mal was raus. Ob das dann natürlich korrekt ist, steht noch mal auf einem anderen Blatt.

Und leider bekomme ich für jede Harddisk exakt die gleichen Werte.

Und weiterhin ist das ja auch noch nicht so wirklich was ich will. Denn eigenlich möchte ich sowas wie '//./Harddisk1/Partition1' ansprechen, aber da bekomme ich von CreateFile immer ein ungültiges Handle. Aber soweit ich das gelesen habe muss man doch auch Partitionen ansprechen können.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz