1. 程式人生 > >mfc 裸寫sd卡扇區

mfc 裸寫sd卡扇區







#include "stdafx.h"
#include <windows.h>
#include "stdafx.h"
#include "types_def.h"
#include "compat_error.h"
#include "compat_sem.h"
#include <windows.h>
#include <stdio.h>




extern void HexDump(char *buf, int len, int addr);


#define READ   0
#define WRITE  1


//通過給定磁碟的編號,獲取到磁碟的控制代碼                
HANDLE GetDiskHandle( int iDiskNo, int op_mode )
{         
    char szDriverBuffer[128];
    memset( szDriverBuffer, 0, 128 );
    //格式化裝置檔名稱
    sprintf_s( szDriverBuffer, "\\\\.\\PhysicalDrive%d", iDiskNo );
    HANDLE m_hDevice = NULL;
    //CreateFile獲取到裝置控制代碼
    if( op_mode == READ ){
        m_hDevice = CreateFileA( szDriverBuffer, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
            NULL, OPEN_EXISTING, NULL, NULL );
    }else if( op_mode == WRITE ){
        m_hDevice = CreateFileA( szDriverBuffer, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
            NULL, OPEN_EXISTING, NULL, NULL );
    }
    //szDriverBuffer --> 裝置名稱,這裡指第一塊硬碟,多個硬碟的自己修改就好了
    //GENERIC_READ--> 指定讀訪問方式
    //GENERIC_WRITE  --> 指定寫訪問方式
    //FILE_SHARE_READ | FILE_SHARE_WRITE --> 共享模式為讀|寫,0表示不能共享
    //NULL --> NULL表示該控制代碼不能被子程式繼承
    //OPEN_EXISTING --> 開啟已經存在的檔案,檔案不存在則函式呼叫失敗
    //NULL --> 指定檔案屬性
    //NULL
    if( m_hDevice == INVALID_HANDLE_VALUE ){                      
        m_hDevice = NULL;
        //無效
        return INVALID_HANDLE_VALUE;
    }
    //裝置控制代碼
    return m_hDevice;
}         






        










//通過磁碟的控制代碼,給定讀取的位置,獲取到扇區512位元組資料返回
//readpos:扇區的邏輯地址
//lpOutBuffer512:用於返回讀取的資料
BOOL ReadSectorData( HANDLE& hDevice, UINT64 readpos, __out char *lpOutBuffer512 )
{
    LARGE_INTEGER li;
    DWORD DCount;
    BOOL bResult;
    memset( lpOutBuffer512, 0, 512 );
    li.QuadPart = readpos*0x200;
    //0x200 = 512,求出扇區的位元組地址,通過設定讀取的地址和長度進行read
    SetFilePointer( hDevice, li.LowPart, &li.HighPart, FILE_BEGIN );          
    DCount = 0;
    //計數
    bResult = ReadFile( hDevice, lpOutBuffer512, 512, &DCount, NULL );    
    HexDump(&lpOutBuffer512[0], 512, 0);
    return bResult;
}






//通過磁碟的控制代碼,給定寫入資料的位置,寫入512位元組資料到指定扇區
//writepos:寫入扇區的邏輯地址
//lpInBuffer512:準備寫入的資料buff
BOOL WriteSectorData( HANDLE& hDevice, UINT64 writepos, __in char *lpInBuffer512 )
{      
    LARGE_INTEGER li;
    DWORD DCount;
    BOOL bResult;
    li.QuadPart = writepos * 0x200;
    //0x200 = 512,求出扇區的位元組地址,通過設定寫入的地址和長度進行write
    SetFilePointer( hDevice, li.LowPart, &li.HighPart, FILE_BEGIN );             
    DCount = 0;
    //計數
    bResult = WriteFile( hDevice, lpInBuffer512, 512, &DCount, NULL );
    return bResult;
}










int mytestudisk_main( void )
{        
    char *lpInOutBuffer512;
    HANDLE m_hDevice = NULL;
    TRACE( "in mytestudisk_main\r\n" );
    lpInOutBuffer512 = (char *)malloc(512+1);
    m_hDevice = GetDiskHandle( 1, READ );
    ReadSectorData( m_hDevice, 14, lpInOutBuffer512 );
    CloseHandle(m_hDevice);
    HexDump( &lpInOutBuffer512[0],512, 0);


    
    m_hDevice = GetDiskHandle( 1, WRITE );
    lpInOutBuffer512[0] = 0x5a;
    HexDump(&lpInOutBuffer512[0], 512, 0);
    WriteSectorData(m_hDevice, 14, &lpInOutBuffer512[0]);
    CloseHandle(m_hDevice);
    free(lpInOutBuffer512);
    lpInOutBuffer512 = NULL;
    return 0;
}































相關推薦

mfc sd

#include "stdafx.h" #include <windows.h> #include "stdafx.h" #include "types_def.h" #include "compat_error.h" #include "compat_sem

[Win32] 直接讀磁盤(磁盤絕對讀

ref return rac cpp sig i/o phy 類型 表示 ??本博文由CSDN博主zuishikonghuan所作,版權歸zuishikonghuan全部。轉載請註明出處:http://blog.csdn.net/zuishikonghuan/artic

sd代碼分析(vivado sdk c++)

adf obj 基本數據 rect 原型 love you 直接 lseek ace void ReadFloatsFromSDFile(float *weightsFromFile, const std::string file_name) { FIL fil;

Zynq讀SD

之前一直沒有寫過部落格,也不知道如何開始,現在想記錄一下自己做過的事情,以後回看還能記得更快。那就以此為開始吧~~~ 專案需要,要實現一個將資料寫入到SD卡中的小demo,查找了一些資料,最後終於實現,將具體實現方案記錄如下。   1.搭建Zynq硬體平臺,根據開發板及

unity 讀sd

真機上測試畫面: 建議先看 unity儲存到手機本地儲存空間 這篇文章 然後再看這篇文章,因為上篇步驟已經很詳細,所以這篇文章在上篇文章基礎上修改一下,很多步驟沒有截圖 最後看一下生成的檔案在手機的位置

STM32利用SPI讀SD的程式詳解

SD卡的讀寫驅動程式是運用FATFS的基礎,學了FATFS就可以在SD卡上建立資料夾及檔案了。我們先從main檔案瞭解一下程式的執行流程int main(void) { u16 i; USART1_Config(); for(i=0;i<1536;i++) send_data[

Android 6.0 讀SD許可權問題

一、問題描述 Android 6.0 下預設儲存SD卡,使用原生FMRadio生成的檔案儲存到內部儲存中 【預置條件】插入T卡 【操作步驟】設定>儲存裝置和USB>選擇SD卡為預設儲存>收音機錄音 【實際結果】收音機的錄音檔案未儲存到T卡 【預期結果】收音機

Android6.0 讀SD許可權動態申請

轉自:http://bbs.csdn.net/topics/391985867 安卓6.0以上,進行了許可權管理 不止要在AndroidManifest.xml裡面新增許可權<uses-permission android:name="android.permiss

stm32 Fatfs 讀SD

#include "common.h" /*-----------------------------------------------------------------------*/ /* Inidialize a Drive

Linux SD建立兩個分

查看分區 lin log 文件 pac 一個 文件系統 png 主分區 本文主要介紹Linux 環境下SD卡建立兩個分區的操作流程: 操作環境:Linux Ubuntu 2016.4 操作目的:將 SD 卡分為兩個分區:第一分區格式為 FAT32,大小500M。第二個分

用FATFS在SD一串數字

就會 info http src 需要 alt bsp 字符串 都是 用FATFS寫SD卡,需要把數組的各個位取出來,變成字符串,然後才能寫進去,,如果直接寫就會出現亂碼 還有一點要註意,就是 要寫進去的東西如:pzu和pv1都是指針,,,,把一個指針指向數組之後,才能寫,

fastboot燒Andriod 以及SD LinuxQT,

andro oid 做的 底層 emmc 以及 時長 disk 下載   EMMC是一種FLASH,SD(TF)卡是另外的一種存儲,通過控制撥碼開關指引CPU去讀EMMC還是SD卡的u-boot文件。   u-boot的作用 初始化內存控制區,訪問存儲器,把內核從存

android 資料儲存&lt;一&gt;----android簡訊傳送器之檔案的讀(手機+SD

本文實踐知識點有有三: 1.佈局檔案,android佈局有相對佈局。線性佈局,絕對佈局。表格佈局。標籤佈局等,各個佈局能夠巢狀的。 本文的佈局檔案就是線性佈局的巢狀 <LinearLayout xmlns:android="http://schemas.and

單元測試+記憶體、SD、SP讀+XmlPullParser

測試: •測試的相關概念 1、根據是否知道原始碼分類: 黑盒測試: a - b - c 邊值測試 測試邏輯業務 白盒測試: 根據原始碼寫測試方法 或者 測試用例; 2、根據測試的粒度分類: 方法測試:寫完一個方法後就測試 單元測試:測試一個能夠獨立執行的業務邏輯單元; 整合測

C#操作明華澳漢讀器讀M1區塊寫入讀取值小結

    近期因為專案中需要用到往IC卡的扇區塊中寫入值 並讀取值,並且是漢字。官方給的demo示例不是很規範,過程也有很多坑。先總結如下: 1、調整mifareone類中寫入的函式引用 最後一個寫入的文字引數由原 改為:    因為根據幫助文件,寫

sd——sd example閱讀

constant aligned sta beginning pri format lba () sdn 改mss後import example 主要是用fat的函數讀寫sd 1 /*******************************************

Android SD簡單的檔案讀操作

Android SD卡簡單的檔案讀寫操作   最近有這樣的需求,把每次統計到的資料,以txt形式儲存到手機SD卡或是手機記憶體中,遇到一些問題,記錄下來。   首先如果要在程式中使用sdcard進行儲存,我們必須要在AndroidManifset.xml檔案進行下

Android獲取外接SD路徑

1. 外接SD卡的一些問題 1.1 關於外接SD卡上的讀寫路徑 Android 4.4及以上版本,應用的外接SD卡讀寫路徑被限定在固定路徑上(外接SD卡根路徑/Android/data/包名/files)。 Android4.4以下版本,申請了外接SD卡讀寫許可權的應用在整個

在Exynos4412上使用SDLinux

由於我的這塊4412開發板沒辦法使用dnw和fastboot,於是我選擇了將uboo,kernel及rootfs放在SD卡中。 網上關於Exynos4412的uboot和移植教程很多,所以這裡不細講。這是所使用的已移植成功的 uboot-2015.04Github-uboot-2015.

Windows下作業系統---實踐(4)改造MBR,載入硬碟

前面已經用MBR(Main Boot Record)顯示了字串,證明了位於0柱面0磁頭1扇區的512位元組的程式碼被BIOS成功匯入了:0x0000:0x7C00,並執行成功。 但MBR始終空間有限,只有512位元組,別說執行核心了,就是執行一個稍微大一點的程式都做不到,那