標(biāo)題:
使用CreateFile讀取SD卡數(shù)據(jù)
[打印本頁(yè)]
作者:
lightwaves
時(shí)間:
2018-7-20 22:52
標(biāo)題:
使用CreateFile讀取SD卡數(shù)據(jù)
使用CreateFile讀取SD卡數(shù)據(jù)
SD卡沒(méi)有文件系統(tǒng),通過(guò)讀取自定義寫入SD卡的開(kāi)頭標(biāo)志數(shù)據(jù)來(lái)檢測(cè)
//#include "stdafx.h"
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <tchar.h>
#include<string.h>
#include <winioctl.h>
//#include <ntddscsi.h>
// òÔCreateFile·½ê½¶áè¡éèÇø¿a1Ø
#define SECTOR
char SD_Flag = 0;
char Disk_Name[22] = {"\\\\.\\Physicaldrive2"};
char SD_Flag_byte[2048] = {0};
HANDLE hDev;
char SD_judge();
int SD_Read();
int fire();
int main (INT Argc, _TCHAR *Argv[])
{
system("title SD¿¨êy¾Y¶áè¡3ìDò(WindowsרóÃ) lalala");
SD_judge();
// fire();
if(SD_Flag == 1)
{
SD_Read();
}
//printf("0x%x",EOF);
getch();
return 0;
}
char SD_judge()
{
int i = 0;
HANDLE hDev;
char Disk_Flag = 0;
for(int a = 0; a < 6; a++)
{
Disk_Name[17]=a+'0';
for(int r = 0;r<22;r++)
{
printf("%c%",Disk_Name[r]);
}
hDev=CreateFile( Disk_Name,
GENERIC_READ,
FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
0,
0);
if (hDev == INVALID_HANDLE_VALUE)
{
printf("CreatFile Error ");
DWORD ret = GetLastError();
printf("CreateFile code%x ",ret);
}
int j;
char Flag_byte[5] = {0x3c,0x53,0x44,0x43,0x3e};
DWORD dwRet_Flag = 0;
ReadFile(hDev,SD_Flag_byte,512,&dwRet_Flag,0);
if (dwRet_Flag < 0)
{
printf("ReadFile Error\n");
DWORD ret = GetLastError();
printf("CreateFile code%x\n",ret);
}
for(j=0; j<5; j++) //¼ì2aSD¿¨í·ËÄλ±êÖ¾
{
printf("%x " ,SD_Flag_byte[j]);
if(SD_Flag_byte[j] == Flag_byte[j])
Disk_Flag++;
}
if(Disk_Flag != 5)
{
CloseHandle(hDev);
printf("¸Ã′ÅÅì2»êÇSD¿¨\n");
}
else
{
printf("¼ì2aμ½SD¿¨\n");
SD_Flag = 1;
CloseHandle(hDev);
return 1;
}
if((a == 5)&&(Disk_Flag != 5))
{
printf("SD¿¨Î′2åèë\n");
return 0;
}
}
}
//
int SD_Read()
{
// char ad[8]={0x4e,0x28,0x00,0x00,0x15,0x00,0x00,0x00};
// printf("%d\n%d\n%d", *(signed int *)ad, *(signed int *)(ad+4), *(signed int *)&ad[4]);
int Byte_num = 0;
char a[512] = {0};
DWORD dwRet_Flag = 0;
char Flag_byte[5] = {0x3c,0x53,0x44,0x43,0x3e};
FILE *fp;
fp = fopen("SD_data.dat","wb");
fwrite(Flag_byte,sizeof(char),5,fp); //qqqqqqqqqq
for(int r = 0;r<20;r++)
{
printf("%c",Disk_Name[r]);
}
printf("\n");
dwRet_Flag = 0;
hDev=CreateFile( Disk_Name,
GENERIC_READ,
FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
0,
0);
if (hDev == INVALID_HANDLE_VALUE)
{
printf("CreatFile Error\n");
DWORD ret = GetLastError();
printf("CreateFile code%x\n",ret);
return 0;
}
ReadFile(hDev,a,512,&dwRet_Flag,0);
for(int t=0; t< 20; t++)
{
printf("%x " ,a[t]);
}
printf("\n");
int data_size = *(signed int *)&a[8];
int data_block = *(signed int *)&a[12];
int data_count = *(signed int *)&a[16];
printf("data_size:%d\ndata_block:%d\ndata_count:%d\n", data_size, data_block, data_count);
printf("\n");
Byte_num = data_block*512;
char *buffer=(char *)malloc(Byte_num);
if (dwRet_Flag < 0)
{
printf("ReadFile Error\n");
DWORD ret = GetLastError();
printf("CreateFile code%x\n",ret);
return 0;
}
printf("ÕyÔú¶áè¡¡£¡£¡£¡£\n");
for(int x = 0;x < data_count;x++) //¶áè¡êy¾Y
{
//fwrite(0,sizeof(int),1,fp);
fwrite((char *)&data_size,sizeof(int),1,fp);
ReadFile(hDev,buffer,Byte_num,&dwRet_Flag,0);
fwrite(buffer,sizeof(char),data_size,fp);
printf("\rÇëμè′y %d", x);
}
//fclose(fp);
char b[4] = {0,0,0,0};
fwrite(b,sizeof(char),4,fp);
//fwrite(b,sizeof(b[0]),strlen(b),fp);
CloseHandle(hDev);
fclose(fp);
printf(" ¶áè¡íê3飡\n");
free(buffer);
}
復(fù)制代碼
SD卡
作者:
devcang
時(shí)間:
2018-7-20 23:34
CTRL+C
CTRL+V
編碼不對(duì),造成
里面的中文字,全亂碼了
~~~~~~~~~~~~~~
作者:
admin
時(shí)間:
2018-7-20 23:42
最好傳個(gè)壓縮包
作者:
行者不予1991
時(shí)間:
2019-4-29 13:38
devcang 發(fā)表于 2018-7-20 23:34
CTRL+C
CTRL+V
編碼不對(duì),造成
樓主,請(qǐng)問(wèn)一下 char Flag_byte[5] = {0x3c,0x53,0x44,0x43,0x3e};中的0x3c,0x53,0x44,0x43,0x3e表示什么意思?謝謝
作者:
行者不予1991
時(shí)間:
2019-4-29 13:43
樓主,請(qǐng)問(wèn)一下char Flag_byte[5] = {0x3c,0x53,0x44,0x43,0x3e}; 0x3c,0x53,0x44,0x43,0x3e表示什么意思?謝謝
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1