使用CreateFile讀取SD卡數據
SD卡沒有文件系統,通過讀取自定義寫入SD卡的開頭標志數據來檢測- //#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);
- }
復制代碼
SD卡
|