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-09-29 05:17:30

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

为虚拟磁盘 添加/删除物理磁盘

为虚拟磁盘 添加/删除物理磁盘 Add-Physicaldisk     此命令用于将指定的物理磁盘添加到虚拟磁盘    在存储池一节已经介绍过将物理磁盘加入存储池的用法,    在这里将介绍在虚拟磁盘上的用法    在正式介绍命令用法之前先回答 在Get-StoragePool,Get-VirtualDisk,New-VirtualDisk    三节中的提问    要获取未被虚拟磁盘使用的物理磁盘,你必须学会灵活的使用管道命令    $pool_pd = @(Get-StoragePool 

c++Builder 下的文件及目录操作

转自 http://blog.csdn.net/ktcserver/article/details/936329 一.判断目录是否存在:           C++   Builder中提供了检查文件是否存在的函数FileExists,indows   程序实现如下:           设char   *Dir为带判断的目录       bool   Exist;   //   最后结果,表示目录是否存在       if(Dir[strlen(Dir)]=='//')Dir[strlen(D

Oracle 10g 物理Dataguard日常操作维护(二)

3.3进程日志的监控操作 3.3.1 查看备库进程状态 SQL>select process,client_process,sequence#,status from v$managed_standby PROCESS   CLIENT_P  SEQUENCE#    STATUS ---------       --------     ---------- -      ----------- ARCH      ARCH            153       CLOSING ARCH 

linux下MySQL安装登录及操作

linux下MySQL安装登录及操作 二.安装Mysql 1.下载MySQL的安装文件 安装MySQL需要下面两个文件: MySQL-server-4.0.16-0.i386.rpm MySQL-client-4.0.16-0.i386.rpm 下载地址为:http://www.mysql.com/downloads/mysql-4.0.html, 打开此网页,下拉网页找到“Linux x86 RPM downloads”项,找到“Server”和“Client programs”项,下载需要的

物理磁盘空间使用已满导致数据库hang起

情况描述 一天公司小张过来咨询,说是数据库查询报错了:乍一看好像是数据库有坏快了,为了排查更加详细的错误信息,决定查看一下告警日志,发现问题所在,原来是数据库的物理磁盘空间满了 Writing to the above trace file is disabled for now on... Tue Jul 29 17:30:32 2014 Non critical error ORA-48181 caught while writing to trace file "/u01/app/orac

基于LVM逻辑卷下的磁盘配额操作

我们继续接上篇进行的LVM逻辑卷进行接下来的磁盘配额的学习本章操作内容接上篇lvm逻辑卷,如果没有看过上篇博客操作的小伙伴,可在操作完逻辑卷的内容时候再继续跟着本篇内容进行磁盘配额的操作! 磁盘配额概述:1.需要磁盘限额的条件 需要Linux内核支持 安装xfsprogs与quota软件包2.Linux磁盘限额的特点 作用范围:针对指定的文件系统(分区) 限制对象:用户账号.组账号 限制类型:磁盘容量.文件数量 限制方法:软限制.硬限制 磁盘配额的过程:以支持配额功能的方式挂载文件系统↓编辑用户

Linux物理磁盘扩容流程

1. 插入硬盘前,查看现有硬盘情况 (1)命令:fdisk -l 说明:fdisk -l 查看设备的所有分区 (2)命令:df -h 说明:df 列出文件系统的整体磁盘使用量 2. 断电插入硬盘后,重启后,查看是否识别,并查看设备名称 (1)命令:fdisk -l 查看是否有新添加的硬盘,以及新添加磁盘的默认设备名 (2)记录设备名以及目录,格式:/dev/sdb 3. 注意 因为本节讲的是磁盘扩容,正常情况下“物理卷”.“卷组”.“逻辑卷”都是已经存在的,所以这里不讲“物理卷”.“卷组”.“逻

VMwave下Ubuntu扩展磁盘空间

VMwave下Ubuntu扩展磁盘空间 Ubuntu原预装磁盘空间20G,随着系统安装软件越来越多,空间慢慢不够用. 打算安装DB2,许扩展磁盘空间. 环境: No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 11.04 Release: 11.04 Codename: natty 第一步:打开vmware.选择虚拟机->设置 第二步:启动Ubuntu,打开终端或者使用xshell连接Ubuntu.

Linux下的删除过期文件操作

在实际的软件开发项目中,经常会有实现删除过期文件的需求.即要求程序能够自动删除多长时间之前生成的文件.本文提供了一个示例代码,为相关的开发工作提供了参考. 程序如下(本程序用makefile进行编译): /*********************************************************************** 版权所有 (C)2014, Zhou Zhaoxiong.* * 文件名称: TestFileDelete.c* 内容摘要: 用于演示Linux下过期