• 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

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

  • 相关阅读:
    [SDOI2008]递归数列
    [SCOI2008]奖励关
    [SCOI2010]幸运数字
    [ZJOI2007]矩阵游戏
    [HAOI2006]旅行
    [ZJOI2008]泡泡堂
    [BZOJ1800][Ahoi2009]fly 飞行棋
    [POJ2288]Islands and Bridges
    [LUOGU] 3959 宝藏
    [BZOJ]1029: [JSOI2007]建筑抢修
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706526.html
Copyright © 2020-2023  润新知