2011-10-19 21 views
6

私は独自のファイルシステムを含むUSBストレージデバイスを取り扱っています。だから、私はこのファイルシステムのためのビューアを実装するために、これらのデバイスの512バイトのブロックを読む必要があります。DelphiでUSBストレージデバイスからrawブロックを読み取る方法は?

どうすればよいですか? Delphiを使用してその上にいくつかの資料がありますか?

答えて

5

var 
    RawMBR : array [0..511] of byte; 
    btsIO : DWORD; 
begin 
    hDevice := CreateFile('\\.\PHYSICALDRIVE1', GENERIC_READ, 
     FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); 
    if hDevice <> INVALID_HANDLE_VALUE then 
    begin 
     SetFilePointer(hDevice,512 * 0,nil,FILE_BEGIN); // replace 0 with sector that you wish to read 
     ReadFile(hDevice, RawMBR[0], 512, btsIO, nil); 
     CloseHandle(hDevice); 
    end; 
    end; 
+0

それは完全に機能しました。ありがとう。 – ivarec

+0

このコードをドライブに使用する方法(c:\、d:\など)?私を助けることは可能でしょうか? (^ _ ^) –

+1

@ShaahinAshayeriの作成ファイルで\\。\ C: – opc0de

2

あなたは、生の読み取りアクセスを行う際のDelphi 7 here

+0

が有望に見えるいくつかのコードですが、ゴナソースを修正しようとデルファイ2010でコンパイルされません。 – ivarec

2

のソースだけで、他のディスクのようにそれを読んで、RawDiskAccessコンポーネントを試してみました。 (あなたのために働く場合があります) RAWディスクアクセスが(あなたのために働く場合があります) TDiskIO(古すぎる

http://www.torry.net/pages.php?id=253

物理ディスクアクセス:あなたはちょうどあなたが見ることができるDelphiの場合は最初のセクター

が必要

+0

これらのコンポーネントはDelphi 2010でコンパイルされず(おそらく2009年のDelphisよりも)、それらを移植することは苦労しています。他のソリューションが提案されていない場合は、Windows APIを直接試してみましょう。 – ivarec

1

XP、Vista、Windows 7のRAWパーティションへの読み取りと書き込みアクセスを提供する製品です(Windows APIとRawDiskを使用すると特定のセキュリティ制限があり、これらの制限を回避できます)。RawDiskコードはDelphi 5からDelphi XEまでのすべてのバージョンのDelphiで利用できます(XE2のサポートは数日後に追加されます)。私はここにコンポーネントを憎む

関連する問題