zoukankan      html  css  js  c++  java
  • win9x_win2k下对物理磁盘的操作 分类: VC++ 磁盘的扇区读写 2014-08-27 09:55 421人阅读 评论(0) 收藏


    void CReadSectorDlg::OnReadButton() 
    {
    UpdateData (TRUE) ;
    CFile m_Sector_file ;
    char * buffer ;

    if ( m_FileName_str == "") 
    {
    MessageBox ("Please enter a file to which the read sector contents are to be stored !!");
    return ;
    }

    m_Sector_file.Open (m_FileName_str, CFile::modeCreate | CFile::modeWrite  , NULL ) ;
    buffer = (char*) malloc (512 * m_NumSec_int) ;

    buffer = ReadSectors (m_Head_int, m_Track_int, m_Sector_int, m_NumSec_int);
    if ( buffer == NULL ) 
    {
    MessageBox ("Operation Failed -- !!");
    return ;
    }
    m_Sector_file.Write (buffer, 512*m_NumSec_int) ;
    m_Sector_file.Close ();

    MessageBox ("Operation Complete !","ReadSectors",  MB_ICONINFORMATION );

    }


    char * CReadSectorDlg::ReadSectors(int head, int track, int sector, int numsec)
    {                                                                                   //磁道,扇区
    // getting logical sector from absolut head/track/sector ...
    int LogicalSector = (sector-1) + (head*SECTORSPERTRACK) + (track*SECTORSPERTRACK*NUMOFHEADS) ;

    typedef struct _DIOC_REGISTERS {
        DWORD reg_EBX;
        DWORD reg_EDX;
        DWORD reg_ECX;
        DWORD reg_EAX;
        DWORD reg_EDI;
        DWORD reg_ESI;
        DWORD reg_Flags;
    } DIOC_REGISTERS ;

    // char *buffer , errah[10], erral[10] ; 
     char *buffer ; 
     HANDLE hDevice ;
     DIOC_REGISTERS reg ;
     BOOL  fResult ;
     DWORD cb ;

     // Creating handle to vwin32.vxd  ...win 95 / 98 !
     hDevice = CreateFile ( "\\.\vwin32", 0, 0, NULL, 0, FILE_FLAG_DELETE_ON_CLOSE, NULL );

     if ( hDevice == INVALID_HANDLE_VALUE ) 
     {
       //MessageBox ( "Error doing CreateFile () !" ) ;
     /* 
        ...this means that a handle to vwin32.vxd was not able to be opened ...
        ....so the operating system is not win 95/98 ...but NT , win2k ...or what (?) ..
        .....reading sectors is  more easy now .....
      */
    HANDLE hDevice; 
    char* buffer = (char*)malloc (512*numsec);
    strset ( buffer , ' ');
    DWORD bytesread ;
    // Creating a handle to drive a: using CreateFile () function ..

    hDevice = CreateFile("\\.\c:", 
            GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 
            NULL, OPEN_EXISTING, 0, NULL); 
     
        if (hDevice == INVALID_HANDLE_VALUE) 
    {
    MessageBox ("Failed !");
            return NULL;
    }
    // Setting the pointer to point to the start of the sector we want to read ..

    SetFilePointer (hDevice, (LogicalSector*512), NULL, FILE_BEGIN); 
    if (!ReadFile (hDevice, buffer, 512*numsec, &bytesread, NULL) )
    {
    /*
    int err;
    char error[10];
    err=GetLastError ();
    itoa (err, error, 10);
    MessageBox (error, "Reading sectors ...Failed  ");
    */
    return NULL ;
    }

        CloseHandle(hDevice); 
    return buffer ;
     }

    SS

    http://download.csdn.net/detail/mao0514/7825687

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    【总结】java 后台文件上传整理
    【很重要】优秀的常用的js库
    封装常用的跨浏览器的事件对象EventUtil
    [H5表单]一些html5表单知识及EventUtil对象完善
    [H5表单]html5自带表单验证体验优化及提示气泡修改
    html5的audio实现高仿微信语音播放效果
    pcre
    tony_nginx_01_如何在linux系统下安装nginx、pcre、zlib、openssl工具
    Linux中编译、安装nginx
    Linux在本地使用yum安装软件
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706526.html
Copyright © 2011-2022 走看看