線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4565
推到 Plurk!
推到 Facebook!

讀取SD卡裡的資料(非FAT格式)

缺席
killop
一般會員


發表:14
回覆:17
積分:11
註冊:2003-09-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-07-09 20:41:12 IP:140.116.xxx.xxx 訂閱

請問ㄧ下各位先進

我想大家都用過讀卡機讀取SD卡

但是大多數的人是用WINDOWS看的懂的FAT格式

我今天是想要讀取SD卡的記憶體空間 我該怎麼使用BCB去讀取呢?

如: 想要讀出HD/SD已經格式化後的MBR/FAT分割表/或是某特定位址的資料

也許這樣講可能不清楚 如果各位有用過WinHEX的話

當你要打開記憶卡或是硬碟槽看資料

會有Logical Drives (如C,D,E槽) 跟Physical Media (如HD0,HD1實體硬碟) 選項

我想做的就是讀取Physical裡的東西 可以看到整個硬體裡面的資料

killop
一般會員


發表:14
回覆:17
積分:11
註冊:2003-09-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-07-12 11:09:13 IP:140.116.xxx.xxx 訂閱

@@a 看來都沒人回 我只好用GOOGLE找到的大陸網站資料試著寫寫看

來個自問自答 哈哈!! 用WinHex比對過 應該是ㄧ樣的

不建議對C: D: 等您重要的硬碟做這種事 不確定會不會掛 呵呵呵

void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE hDevice;
DWORD dwBlockRead;
unsigned char Buffer[512];
char cBuf[3];
String str = "";

// 將SD卡所在的磁碟槽當做文件來開啟

hDevice = CreateFile("\\\\.\\K:", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

if( hDevice != INVALID_HANDLE_VALUE )
{
SetFilePointer(hDevice, 512*0, 0, FILE_BEGIN); // 移動到你所想要找的資料位址

ReadFile(hDevice, Buffer, 512, &dwBlockRead, 0); // ㄧ次讀一個BLOCK(512Byte)

for (int i = 0; i < 512; i ) // 顯示在ListBox上
{
sprintf(cBuf, "X ", Buffer[i]);
str = String(cBuf);
if ((i % 16) == 15)
{
ListBox1->Items->Add(str);
str = "";
}
else if ((i % 16) == 7)
str = "- ";
}
// ListBox1->Items->Append(cBuf);
}

CloseHandle(hDevice);
}

dummymao
一般會員


發表:1
回覆:2
積分:0
註冊:2005-03-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-11-02 19:50:04 IP:59.120.xxx.xxx 訂閱
請問這種方式似乎只能讀到Logical的磁區
BCB6要如何才能讀到Physical的磁區呢?

WINHEX能顯示Physical的磁區
表示軟體應該有方法讀取才對吧??
oist77
一般會員


發表:0
回覆:1
積分:0
註冊:2007-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-12-15 15:28:08 IP:59.115.xxx.xxx 訂閱
不是很清楚,你的想表達的問題。
一般來說,想讀 storage device physical data ,只要是支援 SCSI Command set 的裝置,目前比較強大的作法是用 SCSI pass through 的方法,此方法比較低階但可以讀取 physical 內任何有效的位址資料,足以讓你做任何想做的事,前提是你必須要懂SCSI command 的意思 。

scsi pass through 的用法,請參考MS- DDK 所附的範例。


PS: 上述的方法,跟編輯工具無關,只要是微軟的作業系統(me 以上)就可以用。
編輯記錄
oist77 重新編輯於 2007-12-15 15:29:40, 註解 無‧
oist77 重新編輯於 2007-12-15 15:31:40, 註解 無‧
harrypp
中階會員


發表:7
回覆:124
積分:61
註冊:2006-08-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-12-25 10:02:45 IP:218.210.xxx.xxx 訂閱
ReadFile( ); 應該也是讀Physical吧!

不然找SCSI Pass thought。
直接下SCSI CMD。

===================引 用 dummymao 文 章===================
請問這種方式似乎只能讀到Logical的磁區
BCB6要如何才能讀到Physical的磁區呢?

WINHEX能顯示Physical的磁區
表示軟體應該有方法讀取才對吧??
編輯記錄
harrypp 重新編輯於 2007-12-25 10:08:42, 註解 無‧
harrypp 重新編輯於 2007-12-25 10:11:55, 註解 無‧
系統時間:2024-04-18 11:14:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!