win9x_win2k下对物理磁盘的操作

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 ;
 }

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

时间: 2024-11-03 05:26:53

win9x_win2k下对物理磁盘的操作的相关文章

使用分区助手进行磁盘克隆操作教程

磁盘克隆可以用来把老磁盘中的数据复制到新磁盘上,从而替换掉老磁盘.例如你的老磁盘大小不够用,或老磁盘上有物理坏道,这时就可以使用"复制磁盘功能"将老磁盘作为源磁盘,并把新磁盘作为目标磁盘,然后把源磁盘中所有分区(包括系统分区即C盘)快速的复制到目标磁盘上,从而避免从零开始安装操作系统和应用程序. 分区助手提供了两种复制或克隆磁盘的方式,如下: 快速的复制磁盘:这个方式只复制源磁盘上己使用的扇区到其它磁盘,同时在复制时支持调整目标磁盘上分区的大小.通过这种方式,你甚至可以将大磁盘复制到小

c-怎样编程获取性能计数器物理磁盘相应值

问题描述 怎样编程获取性能计数器物理磁盘相应值 如,%Disk Time %Idle Time %Disk Bytes/sec .不是通过对话框选择获取,因为值要返回!代码贴下,这方面初次入门.谢谢! 解决方案 参考http://forums.codeguru.com/showthread.php?371171-Performance-counter-in-chttp://www.codeproject.com/Articles/8590/An-Introduction-To-Performan

计算机科学-windows下的api磁盘的读写

问题描述 windows下的api磁盘的读写 要有windows.h文件.文件能运行 必须有creatfile devicectrlo readfile writefilepoint 要源代码.希望大神帮忙 解决方案 Windwos 下是不允许直接操作硬件的,但可以通过 IOCTRL 来控制驱动实现对硬件的操作.你是想要通过 IOCTRL 函数来直接对磁盘进行读写吗?如果是,则不仅仅需要这些 API 函数,还需要驱动的支持. 解决方案二: 不知道你的目的是什么,要达到什么效果,它有一些标准的 I

mysql如何检查物理磁盘中的二进制日志文件是否有丢失

问题场景:有时候因为磁盘损坏或人为原因错误删除了磁盘中的二进制文件,导致mysql中的show binary logs记录和实际的物理磁盘中的二进制文件不匹配 #binlogdiff.sh #!/bin/sh #ocpyang@126.com #作用:mysql中show binary logs记录的二进制日志文件和实际的物理文件比较,检查 #磁盘中对应的二进制日志文件是否有丢失 source /usr/local/mysql/scripts/mysql_env.ini binlog_init=

AIX中查看文件系统分布在哪个物理磁盘上

我们看出某个文件夹比较满了,我们想看看究竟是在哪个PV上 $ df -g Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on /dev/hd4           1.00      0.69   31%     2111     2% / /dev/hd2           4.00      1.66   59%    50260    12% /usr /dev/hd9var        1.00    

如何解决无法释放Mac下删除文件磁盘空间

  如何解决无法释放Mac下删除文件磁盘空间         方法/步骤 首先呢,不知道是不是我这里才遇到:删除文件(之后清理掉Trash)或者用rm -rf直接命令行删除后,磁盘空间不释放. df -h或者用About this Mac看,磁盘空间都没变化.inode节点使用情况也没变化.后来没办法,查来查去,发现根目录下有一个.MobileBackups,占据空间巨大.查文档得知,这是Time Machine的本地备份. 问题是:我已经关闭Time Machine了,但是依然会在这里追加东西

网络编程-window下Linux虚拟机的网卡操作

问题描述 window下Linux虚拟机的网卡操作 在window系统下安装Linux虚拟机,在进行网络操作时,是使用Linux内核的TCP/IP协议栈直接发包,还是需要通过虚拟机程序转到window内核,通过window的TCP/IP协议栈发包呢?求大神指导.

Linux下掌控磁盘分区的九大神器

Linux下掌控磁盘分区的九大神器 在这篇文章中,我们来了解一些用来检查你的系统分区的一些命令,这些命令将检查每个磁盘的分区情况和其它细节,例如总空间容量,已用完的空间和文件系统等. 像fdisk,sfdisk和cfdisk命令这样的常规分区工具,不仅可以显示分区信息,还可以修改. 1. fdisk Fdisk是检查磁盘上分区的最常用命令,fdisk命令可以显示分区和细节,如文件系统类型,但是它并不报告每个分区的字节大小. $ sudo fdisk -l   Disk /dev/sda: 500

并行计算-linux 下用p,V操作对两线程的操作

问题描述 linux 下用p,V操作对两线程的操作 计算/打印线程的同步:两个线程共享公共变量a线程1负责计算(+1)线程2负责打印 解决方案 我不太理解你问的问题的意图!公共变量a,在满足什么条件下,两线程的开始分配工作,你没有说清楚我假设你a==1时生产者工作,当a==2时,生产完成,线程2(即消费线程)开始工作即,打印a那么代码如下: #include <stdio.h>#include <stdlib.h>#include <pthread.h>pthread_