找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4895|回复: 4
打印 上一主题 下一主题
收起左侧

使用CreateFile读取SD卡数据

[复制链接]
跳转到指定楼层
楼主
ID:254919 发表于 2018-7-20 22:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用CreateFile读取SD卡数据
SD卡没有文件系统,通过读取自定义写入SD卡的开头标志数据来检测
  1. //#include "stdafx.h"  
  2. #include <windows.h>  
  3. #include <conio.h>  
  4. #include <stdio.h>  
  5. #include <tchar.h>  
  6. #include<string.h>
  7. #include <winioctl.h>  
  8. //#include <ntddscsi.h>  
  9.   
  10.   
  11. // òÔCreateFile·½ê½¶áè¡éèÇø¿a1Ø  
  12. #define SECTOR   

  13. char SD_Flag = 0;
  14. char Disk_Name[22] = {"\\\\.\\Physicaldrive2"};
  15. char SD_Flag_byte[2048] = {0};

  16. HANDLE hDev;

  17. char SD_judge();
  18. int SD_Read();
  19. int fire();

  20. int main (INT Argc, _TCHAR *Argv[])  
  21. {  
  22.    system("title SD¿¨êy¾Y¶áè¡3ìDò(WindowsרóÃ) lalala");
  23.     SD_judge();
  24.    // fire();
  25.     if(SD_Flag == 1)
  26.     {
  27.       SD_Read();       
  28.     }        
  29.      //printf("0x%x",EOF);
  30.      getch();
  31.         return 0;
  32. }  

  33. char SD_judge()
  34. {
  35.     int i = 0;
  36.     HANDLE hDev;
  37.         char Disk_Flag = 0;

  38. for(int a = 0; a < 6; a++)
  39. {
  40.     Disk_Name[17]=a+'0';
  41.             for(int r = 0;r<22;r++)
  42.         {
  43.                 printf("%c%",Disk_Name[r]);
  44.         }
  45.     hDev=CreateFile( Disk_Name,
  46.                          GENERIC_READ,
  47.                                          FILE_SHARE_WRITE,
  48.                                          0,
  49.                                          OPEN_EXISTING,
  50.                                          0,
  51.                                          0);  
  52.     if (hDev == INVALID_HANDLE_VALUE)  
  53.     {  
  54.         printf("CreatFile Error  ");  
  55.         DWORD ret = GetLastError();  
  56.         printf("CreateFile code%x  ",ret);   
  57.     }
  58.    
  59.     int j;
  60.         char Flag_byte[5] = {0x3c,0x53,0x44,0x43,0x3e};   

  61.     DWORD dwRet_Flag = 0;  
  62.     ReadFile(hDev,SD_Flag_byte,512,&dwRet_Flag,0);  
  63.     if (dwRet_Flag < 0)  
  64.     {  
  65.         printf("ReadFile Error\n");  
  66.         DWORD ret = GetLastError();  
  67.         printf("CreateFile code%x\n",ret);   
  68.     }  

  69.     for(j=0; j<5; j++)  //¼ì2aSD¿¨í·ËÄλ±êÖ¾
  70.     {  
  71.        printf("%x    " ,SD_Flag_byte[j]);
  72.        if(SD_Flag_byte[j] == Flag_byte[j])
  73.              Disk_Flag++;  
  74.     }
  75.     if(Disk_Flag != 5)
  76.     {
  77.        CloseHandle(hDev);
  78.            printf("¸Ã′ÅÅì2»êÇSD¿¨\n");           
  79.     }
  80.     else
  81.     {
  82.       printf("¼ì2aμ½SD¿¨\n");
  83.       SD_Flag = 1;
  84.       CloseHandle(hDev);
  85.       return 1;            
  86.     }
  87.         if((a == 5)&&(Disk_Flag != 5))
  88.           {
  89.               printf("SD¿¨Î′2åèë\n");
  90.                 return 0;       
  91.       }
  92.   }
  93. }

  94. //  
  95. int SD_Read()
  96. {
  97.        
  98. //        char ad[8]={0x4e,0x28,0x00,0x00,0x15,0x00,0x00,0x00};
  99. //        printf("%d\n%d\n%d", *(signed int *)ad, *(signed int *)(ad+4), *(signed int *)&ad[4]);
  100.        
  101.     int Byte_num = 0;
  102.     char a[512] = {0};
  103.     DWORD dwRet_Flag = 0;
  104.     char Flag_byte[5] = {0x3c,0x53,0x44,0x43,0x3e};
  105.           
  106.     FILE *fp;
  107.     fp = fopen("SD_data.dat","wb");
  108.    
  109.     fwrite(Flag_byte,sizeof(char),5,fp); //qqqqqqqqqq

  110.            for(int r = 0;r<20;r++)
  111.         {
  112.                 printf("%c",Disk_Name[r]);
  113.                
  114.         }
  115.         printf("\n");
  116.     dwRet_Flag = 0;
  117.                 
  118.     hDev=CreateFile( Disk_Name,
  119.                          GENERIC_READ,
  120.                                          FILE_SHARE_WRITE,
  121.                                          0,
  122.                                          OPEN_EXISTING,
  123.                                          0,
  124.                                          0);  
  125.     if (hDev == INVALID_HANDLE_VALUE)  
  126.     {  
  127.         printf("CreatFile Error\n");  
  128.         DWORD ret = GetLastError();  
  129.         printf("CreateFile code%x\n",ret);  
  130.                 return 0;
  131.     }
  132.     ReadFile(hDev,a,512,&dwRet_Flag,0);
  133.     for(int t=0; t< 20; t++)  
  134.     {  
  135.         printf("%x    " ,a[t]);
  136.     }
  137.     printf("\n");
  138.     int data_size = *(signed int *)&a[8];
  139.         int data_block = *(signed int *)&a[12];
  140.         int data_count = *(signed int *)&a[16];  
  141.         printf("data_size:%d\ndata_block:%d\ndata_count:%d\n", data_size, data_block, data_count);
  142.     printf("\n");
  143.    
  144.     Byte_num = data_block*512;
  145.     char *buffer=(char *)malloc(Byte_num);
  146.    
  147.    if (dwRet_Flag < 0)  
  148.     {  
  149.         printf("ReadFile Error\n");  
  150.         DWORD ret = GetLastError();  
  151.         printf("CreateFile code%x\n",ret);
  152.                 return 0;  
  153.     }
  154.         printf("ÕyÔú¶áè¡¡£¡£¡£¡£\n");          
  155.     for(int x = 0;x < data_count;x++)  //¶áè¡êy¾Y
  156.          {  
  157.            //fwrite(0,sizeof(int),1,fp);
  158.            fwrite((char *)&data_size,sizeof(int),1,fp);
  159.            ReadFile(hDev,buffer,Byte_num,&dwRet_Flag,0);
  160.            fwrite(buffer,sizeof(char),data_size,fp);
  161.                    printf("\rÇëμè′y %d", x);       
  162.            
  163.       }
  164.     //fclose(fp);

  165.     char b[4] = {0,0,0,0};
  166.     fwrite(b,sizeof(char),4,fp);
  167.     //fwrite(b,sizeof(b[0]),strlen(b),fp);
  168.      CloseHandle(hDev);
  169.       fclose(fp);
  170.      printf("  ¶áè¡íê3飡\n");
  171.          free(buffer);
  172. }        

复制代码

SD卡
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:277550 发表于 2018-7-20 23:34 | 只看该作者
CTRL+C
CTRL+V
编码不对,造成

里面的中文字,全乱码了



~~~~~~~~~~~~~~
回复

使用道具 举报

板凳
ID:1 发表于 2018-7-20 23:42 | 只看该作者
最好传个压缩包
回复

使用道具 举报

地板
ID:524389 发表于 2019-4-29 13:38 | 只看该作者
devcang 发表于 2018-7-20 23:34
CTRL+C
CTRL+V
编码不对,造成

楼主,请问一下 char Flag_byte[5] = {0x3c,0x53,0x44,0x43,0x3e};中的0x3c,0x53,0x44,0x43,0x3e表示什么意思?谢谢
回复

使用道具 举报

5#
ID:524389 发表于 2019-4-29 13:43 | 只看该作者
楼主,请问一下char Flag_byte[5] =  {0x3c,0x53,0x44,0x43,0x3e};     0x3c,0x53,0x44,0x43,0x3e表示什么意思?谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表