dos分区:C语言建立多个PRI DOS分区
dos分区:C语言建立多个PRI DOS分区
在DOS系统下,在计算机应用培训中因培训要求不同, 对软件的要求也不同,由于学员的误操作,存放在硬盘上的软件和重要数据容
易被非法删除或受到损坏。对此,笔者通过对硬盘管理的深入分析和实践,总结出了在硬盘上备份、保护重要数据和软件的一种新的行之
有效的方法:建立多个PRI DOS 分区, 不同的培训要求使用不同的PRI DOS分区,在使用时同时只有一个PRI DOS 分区可供使用, 其余
PRI DOS分区均被隐含。
二、分区表结构
众所周知,DOS操作系统下,一个硬盘可以分为PRI DOS分区和扩展分区两大部分,而扩展分区中又可进一步建立多个逻辑分区。这些
PRI DOS分区和逻辑分区都可象单独的物理硬盘一样使用。那么DOS是怎样实现对这些分区的管理和使用的呢?DOS 管理硬盘的秘密是两个
表:硬盘分区表链。系统在启动过程中,DOS 根据硬盘分区表链及分区表提供的分区信息建立了各个分区的磁盘参数表(BPB表),而磁盘
参数表是DOS访问硬盘的基础。 因此分区表链及分区表在硬盘存取中具有非常重要的地位。
分区表链存于硬盘上,一般由一个主引导结点和多个普通结点构成。主引导结点同PRI DOS分区对应,为硬盘的0柱面0头1扇区,是硬
盘主引导记录扇区。在头结点扇区中,从开始到0DAH的218 字节是一段主引导程序;从0DBH到1BDH共228字节为00H;从1BEH到1FDH处64字
节是硬盘的主分区表,共四个表项,每个表项16字节,其中前两个表项分别指示主分区和扩展分区在硬盘中的信息,后两个表项一般不用,
全为00H;;扇区最后两个字节是结束标志55H、AAH。
表项的数据结构如下:
相对偏移 长度(BYTE) 含义
0 1 激活标志
1 3 分区起始位置(柱、头、扇)
4 1 分区类型
5 3 分区终止位置(柱、头、扇)
8 4 分区起始扇区的相对序号
12 4 分区大小
表项结构中的激活标志在激活时为80H(否则为00H),所谓起始位置,对于本分区表项而言,是该分区的起始柱1头1扇区;对于扩展
表项而言指的是相应的扩展分区的起始柱0头1扇区。分区类型常见值有1、4、6、5等。1表示12位FAT的分区,4表示16位FAT的分区,6 表
示容量大于32M的分区,5表示扩展分区。分区大小等于各相应分区从起始扇区到终止扇区的扇区数,对于本分区表项,此值不含隐含扇区,
对于扩展表项此值包含隐含扇区,而对PRI DOS 分区里的扩展表项,此值等于各逻辑分区所有扇区包括隐含扇区之和。所谓起始扇区的相
对应序号,其相对起点分三种情况:对于本分区表项,序号是相对于该分区的起始柱0头1扇区;对于扩展表项,若是PRI DOS的扩展分区,
则相对于PRI DOS分区的主引导记录扇区;若是逻辑分区的扩展, 则一律相对于整个扩展分区的起点,此起点一般就是第一逻辑分区的起
始柱0头1扇区。
三、建立多个PRI DOS分区
从上面的分析中我们清楚了分区表由四个表项组成(尽管一般最多只使用两项),并且主分区表的第一表项指向PRI DOS分区,第二个
表项指向扩展分区。如果按照正常的使用方法,完全没有必要设置四个表项,既然如此设置,必有其使用的目的。由于主分区表中的扩展
表项中的某些项包含了所有扩展分区的有关信息,为此我先用 FDISK建立只有一个逻辑分区的扩展分区。然后将该扩展分区表项的分区类
型由5改为6,再将其激活标志由00H改为80H(注意必须同时将原先的PRI DOS分区的激活标志由80H改为00H)。 然后必须重新用软盘启动
机器并格式化C盘,则就可用新建立的PRI DOS分区启动机器( 原先的PRI DOS分区的盘符变为D)。这样就建立了两个PRI DOS分区。
四、隐含分区的设置和恢复
我们已经知道硬盘主引导记录扇区中从0DBH到1BDH共228 个字节为00H,在建立了多个PRI DOS分区之后,就可利用这228 个字节的最
后64个字节来保存四个表项有内容。选定一个PRI DOS分区, 然后将四个表项中的其它所有分区类型为非扩展分区的表项的内容全部改为
00H。这样在硬盘上就只有一个PRI DOS分区,其它被隐含起来。
如要将隐含分区恢复正常,只需将其保存在主硬盘主引导扇区中的内容重新写入到该表项即可。
五、源程序
下面给出源程序:PDOS.CPP。该源程序在编译环境TURBOC++ 3.0下在兼容机上编译。使用方法为在DOS提示符下键入:[D:] [ PATH]
PDOS <C/S/R/1/2/3/4>(S:建立PRI DOS分区;S:对PRI DOS分区表项进行备份;R:收复PRI DOS分区表项;1:只保留PRI DOS分区表项的第
一项,其余均隐含;2:只保留PRI DOS分区表项的第二项;3: 只保留PRI DOS分区表项的第三项;4:只保留PRI DOS分区表项的最后一项)。
以下为PDOS.CPP程序清单:
#include<dos.h>
#include<bios.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct HSC
{char hd,sc,cy;};
struct PartitionTable
{char Flag; /* 激活标志 */
HSC begin; /* 开始位置 */
char TYpe; /* 分区类型 */
HSC end; /* 结束位置 */
long id; /* 开始扇区的相对序号 */
long size; /* 分区大小 */
};
struct note /* 结点结构 */
{char boot1[366];
PartitionTable PT[1];
PartitionTable PT1[4];
PartitionTable PT2[4]; /* 主DOS分区表项 */
char f[2];
}dosboot;
void create_pri_dos(); /* 建立(将扩展分区修改成)主DOS分区 */
void set_hidde_dos(); /* 对主DOS分区表项进行备份 */
void recall_dos(); /* 恢复主DOS分区表项 */
void change_dos(char n); /* 只保留一个主DOS分区,其余均隐含 */
main(int argc,char *argv[])
{
char n;
if (argc!=2)
{ printf(\"Bad connamd !\");
return 0;
};
strlwr(argv[1]); /* 将参数中的大写字母转换成小写字母 */
while((*(argv[1]++))==0); /* 搜寻第一个非空格字符 */
n=*(--argv[1]);
switch(n){
case \'c\':
create_pri_dos();
break;
case \'s\':
set_hidde_dos();
break;
case \'r\':
recall_dos();
break;
case \'1\': /* 只保留主DOS分区表项中的第一项,其余主DOS分区表项均隐含 */
转载于:https://blog.51cto.com/longge085/119793
相关文章:

简单几步让CentOS系统时间同步
在使用CentOS系统的时候,我们可能会遇到时间不准的问题,那我们如何解决这个我问题呢,下面就来教大家一个CentOS系统时间同步的方法,希望大家可以解决自己所存在的疑问。 CentOS系统时间同步的步骤如下: 新装的CentOS系…

挨踢人生路--记我的10年18家工作经历 - 后记
挨踢人生路--记我的10年18家工作经历 - 前言挨踢人生路--记我的10年18家工作经历 - 从大学说起――不得不说的一些事情挨踢人生路--记我的10年18家工作经历 - 第1家公司,在老家的工作挨踢人生路--记我的10年18家工作经历 …

FileUtil
文件工具类 —— FileUtil.java 获取Web工程的根目录 —— String getBasePath()方法获取文件名称 —— public static String getFileName(String filePath)方法获取文件名称前缀 —— public static String getPrefixOfFileName(String filePath)方法获取文件名后缀(…

C# Sato CL4NX打印机发送SBPL指令打印表面信息、RFID芯片数据写入
待更新..转载于:https://www.cnblogs.com/zh7791/p/7650073.html

同步SQL Server 2000 数据库
为什么要同步SQL Server 2000 数据库,它都用在什么场合 数据实时备份同步,数据库服务器出问题时我们也有其正常工作时的备份 数据实时备份同步,一台服务器负载不起时,可以用来做负载均衡 数据实时备份同步,数据库服务器…

【Leecode】两数相加
学习了链表结构,链表中元素的访问,对象指针的初始化与赋值,链表的创建(多个节点链接起来),进位计算的表达。 100ms /*** Definition for singly-linked list.* struct ListNode {* int val;* ListN…

推荐一个HTML的语法高亮解析器
http://code.google.com/p/syntaxhighlighter/wiki/Languages支持高亮的语法如下Language Aliases C cpp, c, c C# c#, c-sharp, csharp CSS css Delphi delphi, pascal Java java Java Script js, jscript, javascript PHP php Python py, python Ruby rb, ruby, rails, ror S…

angularJS中directive与controller之间的通信
当我们在angularJS中自定义了directive之后需要和controller进行通讯的时候,是怎么样进行通讯呢? 这里介绍3种angular自定义directive与controller通信的指令。 1.指令作用域中的"" 作用:把当前属性作为字符串传递实现指令与html页…

Eclipse启动失败:No java virtual machine was found after searching the follwing locations
Eclipse启动失败,错误信息如下如所示: 通过阅读错误信息,可以看到错误原因和 javaw.exe路径 有关; 打开eclipse.ini文件,也就是启动Eclipse的初始化文件: 在本地计算机中找到jdk安装路径下javaw.exe文件&a…

Cisco路由器安全配置必用10条命令
当谈到配置一台新的cisco路由器,多数配置依赖于路由器的类型以及它将服务的用途。然而,每位管理员都有其自己的“正确”配置每台路由器的命令列表。笔者将和你分享他自己配置路由器的十条命令列表。<?xml:namespace prefix o ns "urn:schemas…

Tensorflow学习教程------模型参数和网络结构保存且载入,输入一张手写数字图片判断是几...
首先是模型参数和网络结构的保存 #coding:utf-8 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_datamnist input_data.read_data_sets(MNIST_data,one_hotTrue) #每个批次的大小 batch_size 100 n_batch mnist.train._num_examples // ba…

IntelliJ IDEA乱码问题解决方法
目录 1、设置文件编码 2、设置控制台编码 3、设置Tomcat Server编码 4、修改配置文件编码内容 1、设置文件编码 第1步:打开IDEA,依次点击File、Settings... 打开Setting窗口; 第2步:在Settings窗口中,依次点击Ed…

Windows 7的CMD中 Telnet 无法执行的解决办法
在Windows 7的CMD中,执行telnet 192.168.1.10 80 会提示没有这个命令的提示,这是因为Win7默认是没有安装Telnet的(在以往的WINDOWS系统中都是默认安装的)。解决办法:在Win7中,进入控制面板,然后…

Qt——模态、非模态
模态: 只能操作对话框非模态:要使用 QDialog *_d new QDialog();_d->setattribute(Qt::WA_DeleteOnClose);_d->show();转载于:https://www.cnblogs.com/yangxinrui/p/10515249.html

c# 取两个时间的间隔
c#可以取两个时间的年月日时分秒之间的间隔,不受跨年月的影响。声明一个 TimeSpan System.TimeSpan ts dtNightEnd.Subtract(dtAmStart); dtNightEnd是原始时间 减去 dtAmStart 这个时间 获得一个TimeSpan TimeSpan 自带了间隔属性 ts.Days.ToString(); ts.Hours.…

MySQL数据表命令
显示表的相关信息: show table status like "表名"; show table status like "表名" \G 格式化,以记录条目形式显示,更清晰 注意:\G后面不能加分号,不然会出现查询错误。因为\G在…

undefined reference to 'pthread_create'问题解决(转)
undefined reference to pthread_createundefined reference to pthread_join问题原因:pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atfork()函数…

C语言程序设计第一次作业
(一)实验总结 1.圆的面积和周长问题 (1)题目: 输入圆的半径,计算圆的周长和面积。 (2)流程图 (3)测试数据及运行结果 (4)实验分析 问题…

U盘中毒,无法删除System Volume Information文件夹
情景:U盘中毒,U盘内的文件夹名称变成.exe后缀,且多出一个名为System Volume Information的文件夹,对U盘进行格式化后,所有文件消失,当拔出U盘,再次插入电脑时,发现System Volume Inf…

用Javascript修正12个常见的浏览器问题
我们提倡尽可能使用CSS,而且我们常常能做到这一点。现代浏览器有很好的CSS支持-这无疑足够好让你使用CSS来控制布局和版面设计。但是有时候,某些网页元素在不同的浏览器会出现不同。 如果你不知道原因,不要过于担心,请研究CSS规则…

读书笔记之知识杂点
1.xx1,x1,x,哪个效率最高?为什么? xx1最低,因为它的执行过程如下: (1)读取右x的地址 (2)x1 (3)读取左x的地址 (4)将右值传给左边的x(编译器并不认为左右的x…

Codeforces.487C.Prefix Product Sequence(构造)
题目链接 \(Description\) 对于一个序列\(a_i\),定义其前缀积序列为\(a_1\ \mathbb{mod}\ n,\ (a_1a_2)\ \mathbb{mod}\ n,...,(a_1a_2...a_n)\ \mathbb{mod}\ n\)。 给定\(n\),求一个\(n\)的排列,使得该排列的前缀积序列是\([0,1,2,...,n-1]…

读取CSV文件内容,将其转换成JSON字符串输出
CsvToJsonUtil 工具类作用:读取CSV文件内容,将其转换成JSON字符串输出 转换工具类代码如下: package com.test.util;import java.io.*; import java.io.IOException;public class CsvToJsonUtil {/*** 根据文件路径读取CSV文件 返回String字…

component-scan和annotation-driven
<context:component-scan/>该xml配置作用是启动Spring的组件扫描功能,自动扫描base-package指定的包及其子文件下的java文件,如果扫描到有controller、Service、Repository、Component等注解的java类,就会将这些类注册为bean。指定的包…

“不亦乐乎”是“乐”还是“悦”?
看了六七年的《咬文嚼字》,在2009年的第一期第一次对其内容产生了巨大的质疑。这是《咬文嚼字》2009年第一期特稿:“《2008年十大语文差错》”,里面公布了《咬文嚼字》编辑部总结的2008年度十大语文差错: 一、“有朋自远方来&a…

mysql 数据操作 单表查询 where约束 between and or
WHERE约束 where字句中可以使用: 比较运算符:>< > < !between 80 and 100 值在80到100之间 >80 <100in(80,90,100) 值是80或90或100 满足这个条件就可以like egon%pattern可以是%或_,%表示任意多字符_表示一个字符…

查看计算机连接的WIFI密码
方法1:通过cmd命令获取 使用WinR组合键,打开命令提示符窗口,输入以下命令: netsh wlan show profiles WIFI名称 keyclear 或者 netsh wlan show profiles name"WIFI名称" keyclear 在输出的内容中,安全…

[VBScript] 自动删除2小时以前生成的文件
保存为deleteTempFiles.vbs,双击即可运行 dim folder, file, mFSO, subfolderSet mFSO CreateObject("Scripting.FileSystemObject") set foldermFSO.GetFolder("C:\Users\msautotestuser\AppData\Local\Temp") Delete files dim df For Each …

超市购物打印小票的简单程序 记录下来
做了2个版本的超市购物小票打印程序,做过记录一、C/S样图如下:其中 输入商品的编码 回车 将会调用该商品的信息,显示在下面的DataGridView中 ,DataGridView中数量是可以修改的,修改数量,下面的合计 将会自动计算 &…

Asp.net控件开发学习笔记(三)-控件开发基础
封装 在asp.net中,控件被分为两类.用户控件和自定义服务器控件。前者就是我们经常用来将一些可复用的内容封装成的.ascx文件。这里主要研究后者. 创建自定义服务器控件 创建自定义控件的第一步是选择以哪一个类作为基类来创建控件,Asp.net最常见的几个基…