操作系统课程设计报告
班级: 计科
姓名:
学号:
老师:
时间:2012年X月X日
设计目
操作系统课程讲述容道操作系统原理技术计算机原理编译原理汇编语言计算机网络程序设计等专业课程关系十分密切课程设计目综合应学生学知识建立系统完整计算机系统概念理解巩固操作系统基理原理方法掌握操作系统开发基技
1 解文件系统文件系统驱动程序般原理
2 学开发文件系统驱动程序开发环境解DDK(Device Drivers Kit设备驱动程序开发包)关系
3 掌握虚拟磁盘技术够编译生成相应驱动程序系统中安装实现
4 进步掌握Windows 7XP系统中驱动程序般结构
二设计容
设备驱动程序设计 求:
1 设计Windows XP者Linux操作系统设备驱动程序
2 设备类型字符设备块设备者网络设备
3 设备虚拟实际设备
4 编写测试应程序测试该设备读写等操作
三设计步骤
1Windows驱动程序开发基原理
WDMWindows驱动程序模型简称Windows Driver Model实际系列集成操作系统中常规系统服务集简化硬件驱动程序编写保证Windows 98Me2000中二进制兼容WDM(Windows Driver Model)模型WinNT351WinNT4核模式设备驱动程序发展WDM变化增加插电源理Windows Management Interface(WMI)设备接口支持WDM模型目标实现够跨台更安全更灵活编制更简单Windows设备驱动程序WDM采基象技术建立分层驱动程序结构WDM首先Windows98中实现Windows2000中进步完善续开发Windows操作系统中存Windows MeWindows XP微软通WDM模型引入希减轻设备驱动程序开发难度周期逐渐规范设备驱动程序开发应该说WDM成设备驱动程序流
面更深入介绍WIN32API步步设备驱动程序进行读写操作图:
应程序
Win32子系统
设备驱动
硬件抽象层
硬件
IO理器
户模式
核模式
Win32API调
系统服务接口
传递IRP驱动程序派遣函数
HAL调
台相关操作
图1-1 Windows组件模型
里CreateFile API例操作设备API类似首先应程序调CreateFile APIAPIWin32子系统三模块中Kernel32dll实现CreateFile函数会调Ntdlldll中NtCreateFile函数中NtCreateFile未文档化函数
NtCreateFile作穿越户模式边界进入核模式步骤通软中断实现进入核模式会调系统服务函数里会调名系统服务NtCreateFile
NtCreateFile系统函数调通IO理器创建IRP传输设备驱动程序中IRP输入输出请求包驱动程序开发中重数结构驱动程序运行完全IRP驱动驱动程序根IRP进行相应操作操作般设备直接操作
2设计分析
1 设备象通文件文件调户关设备者文件等文件象指针通指针访问文件设备时系统会动访问相应设备虚拟磁盘设备时必须指定相应文件通mount命令否操作法进行文件象户态程序访问文件设备目录卷等实例户程序通文件指针访问设备文件指针操作调系统功创建文件程
2 定义设备驱动程序入口函数函数中需完成两件事通查询注册表信息建立杯象数接着IO理器注册四分发例程完成户设备种请求成IRP包传入核部分IRP(IO请求包)包含虚拟磁盘请求需考虑异步情况步问题设备启动设备工作线
处理IRP相应分发例程结束部分完成三项工作
1)利IoMarkIrpPending函数通知IO理器分发例程返回状态值STATUS_PENDING表示该IRP续处理
2)IRP放入设备维护IRP队列中
3)通事件激发工作线程IRP进行处理
3 硬盘驱动程序理物理硬盘创建device象时必须磁盘逻辑分区创建device象样物理硬盘会device象未更组织种关系NT名字空间里创建目录象然驱动创建磁盘象放目录象
4 NT设备名操作系统执行时设备名称户户态程序中进行访问通DOS设备名建立符号链接样户进行访问时需提供DOS设备名操作系统操作响应NT设备名继完成相应请求
3驱动程序工作程
系统启动时驱动程序入口函数DriverEntry装入存调入口函数进行初始化初始化程中驱动程序完成两件事:调辅助函数FileDiskCreateDevice创建虚拟磁盘象IO理器注册程序分发例程时注册驱动程序卸载例程卸载驱动程序时卸载占资源创建磁盘设备象时创建设备工作线程完成IRP续处理实验中利该线程事件象实现虚拟磁盘读写步系统该线程中利时间象实现虚拟磁盘读写等操作间步实际该工作线程执行函数FileDiskThread
驱动程序部函数调关系
4驱动程序程分析
总结步:
1 驱动程序初始化驱动程序初始化程中已系统中创建相应数虚拟设备象(通调入口函数实现)具体数量安装驱动程序时导入注册表数决定需更改设备数时必须注册表中更改需重新启动计算机注册表系统启动时会写入创建设备象时仅磁盘创建设备象逻辑分区创建设备象便理创建目录设备象放目录
2 虚拟磁盘设备通文件进行模拟设备象通文件象调户应程序关设备者文件等文件象指针通文件指针访问设备者文件时系统会动访问相应设备象必须建立设备象指定文件创建虚拟磁盘象mount文件户应程序开始部分进行参数分析需考虑户请求什建立删输入命令否正确程序解析程中指定虚拟磁盘文件信息存入定义OPEN_FILE_INFORMATION文件信息结构中时参数中获取目标虚拟磁盘指定win32设备名(卷标)等信息NT设备名核执行体户调时时DOS设备名两命名应设备命名空间需间建立符号链接
3 应程序实现mount命令调首先确认卷标尚未否直接异常返回出相应信息检查前Win32设备名(盘符者卷标)否正常开获取相应设备NT设备名称驱动中创建该磁盘象时名字然利Win32函数检验述户指定Win32设备名相应NT设备名间建立符号链接检查否正常开次盘果步执行成功应利开否说明述建立符号链接操作异常户程序异常退出果程序利执行里系统中相应盘符mount命令步虚拟磁盘象发出定义控制命令IOCAL_FILE_DISK_OPEN_FILE命令行中指定虚拟磁盘文件作参数
4 述请求传入核前IO理器会生成IRP户命令参数包含IRP中请求传入时调分发例程FileDiskDeviceControl响应述户控制命令
需进行步处理事件读写分发例程调设备工作线程建立设备象时候创建功代码IRP_MJ_DEVICE_CONTROL处理程中定义IOCAL_FILE_DISK_OPEN_FILE控制码进行处理完成虚拟磁盘终启动调函数时传入相应IRP设备象指针该函数程:通IRP获取户指定虚拟磁盘文件名称判断虚拟磁盘类型设备时CD(光盘)进行相应设备属性设置然利文件名该文件开(果开成功指定位置创建样文件作虚拟磁盘)果开成功时设备象扩展结构中存入该文件句柄利述文件象指针进行查询根文件象提供信息相应设置设备象中标相关参数设备象扩展域中存入需信息包括代表磁盘目标文件句柄相关种虚拟磁盘属性完成该设备开工作完成安装该虚拟磁盘进行读写操作时传入磁盘句柄
5基数结构
(1)模拟磁盘文件信息结构 OPEN_FILE_INFORMATION
typedef struct _OPEN_FILE_INFORMATION{
DEVICE_TYPE DeviceType模拟磁盘类型
BOOLEAN ReadOnly 否设置虚拟磁盘读
LARGE_INTEGER FileSize 文件
USHORT FileNameLength文件名长度
UCHAR FileName[1] 文件名字符串
}OPEN_FILE_INFORMATION
该结构保存虚拟磁盘文件详细信息应程序中利mount命令指定文件时编程员需处理户命令组成样结构作参数传入核驱动程序会抽取信息作虚拟磁盘磁盘信息例磁盘读属性
创建虚拟磁盘象时文件信息放入磁盘扩展信息中
(2)设备扩展结构 DEVICE_EXTENSION
定义磁盘信息结构保存设备细节设备编程方式
typedef struct _DEVICE_EXTENSION
{
BOOLEAN media_in_device
HANDLE file_handle文件句柄
ANSI_STRING file_name文件名
LARGE_INTEGER file_size文件
BOOLEAN read_only读属性
PSECURITY_CLIENT_CONTEXT security_client_context
LIST_ENTRY list_head
KSPIN_LOCK list_lock
KEVENT request_event
PVOID thread_pointer
BOOLEAN terminate_thread
} DEVICE_EXTENSION *PDEVICE_EXTENSION
驱动程序创建虚拟磁盘象均维护样数结构实际核驱动程序中设备象维护着样数结构作保存应设备参数关设备处理通设备象访问信息
参数解释:
media_in_device:标志否已制订相应文件模拟磁盘文件系统设备初始化时设置false表示时没指定虚拟磁盘文件户通应程序进行mount操作时驱动程序相应操作
file_handle:指定作虚拟磁盘文件指针磁盘进行读写操作时利指针开文件获
file_name:作虚拟磁盘文件名
file_size:作虚拟磁盘文件
read_only:否读作虚拟磁盘文件开方式正虚拟磁盘具读写属性
security_client_context:底线程安全相关数结构
list_head:维护设备需步处理IRP队列
list_lock:设备IRP队列进行删时旋锁锁步象
request_event:事件执事前否新需设备处理请求达设备线程限循环方式运行次循环中会检测事件果事件出现表示相应请求送线程
thread_pointer:保存指设备工作线程指针通指针确认该线程否处合适访问状态果异常会终止该线程相关设备工作
terminate_thread:标记前设备工作线程否终止种求发生卸载设备时候
6设备象创建函数
NTSTATUS FileDiskCreateDevice (
IN PDRIVER_OBJECT DriverObject
IN ULONG Number
IN DEVICE_TYPE DeviceType
)
函数中基数结构:
WCHAR device_name_buffer[MAXIMUM_FILENAME_LENGTH]wchar16位unicode字符MAXIMUM_FILENAME_LENGTHntddkh中定义256
UNICODE_STRING device_name设备名
NTSTATUS status状态返回状态判断
PDEVICE_OBJECT device_object设备象
PDEVICE_EXTENSION device_extension设备扩展域指针
HANDLE thread_handle辅助变量
7驱动层例程
DriverEntry例程
NTSTATUS DriverEntry ( 驱动入口函数
IN PDRIVER_OBJECT DriverObject 驱动器象
IN PUNICODE_STRING RegistryPath 驱动注册表路径
)
FileDiskDeviceControl例程:
NTSTATUS FileDiskDeviceControl ( 设备控制例程
IN PDEVICE_OBJECT DeviceObject 操作设备象
IN PIRP Irp IRP包指针
)
FileDiskReadWrite例程:
NTSTATUS FileDiskReadWrite ( 读写例程
IN PDEVICE_OBJECT DeviceObject 操作设备象
IN PIRP Irp IRP包指针
)
FileDiskCreateClose分发例程
NTSTATUS FileDiskCreateClose ( 分发例程 创建关闭
IN PDEVICE_OBJECT DeviceObject 设备象
IN PIRP Irp IRP包指针
)
UnLoad分发例程:
VOID FileDiskUnload ( 卸载例程
IN PDRIVER_OBJECT DriverObject 卸载设备象
)
FileDiskCreateDevice 例程(
IN PDRIVER_OBJECT DriverObject
IN ULONG Number
IN DEVICE_TYPE DeviceType
)
FileDiskThread例程(
IN PVOID Context
)
四运行结果
1创建虚拟磁盘
(1) 虚拟磁盘创建步骤
1开命令提示符
2进入filedisk目录
3输入filedisk mount 0 c\temp\filediskimg 8M M
中filedisk工程名mount命令文件虚拟磁盘连接0表示第设备象c\temp\filediskimg虚拟文件8M(设定意)虚拟磁盘文件M虚拟盘符(意设定)
(2) 创建磁盘图示图:
2创建虚拟光盘
(1) 虚拟光盘创建前 图示:
1开命令提示符
2进入filedisk目录
3.输入filedisk mount 1 c\temp\cdimageiso cd I
中filedisk工程名mount命令文件虚拟磁盘连接1表示第设备象c\temp\cdimageiso虚拟文件cd表示虚拟光驱I虚拟盘符(意设定)
(2) 创建虚拟光驱 图示:
五心体会
通次课程设计核编程定理解知道整虚拟驱动生成工作具体流程弥补前方面盲区时解文件系统文件系统驱动程序般原理理解文件系统驱动程序(FSD)系统中作工作机制windows操作系统更深层理解文件系统指负责存储理外部存储器文件信息机制外部存储介质存储文件信息格式种组织文件格式种文件系统格式常见文件系统格式FATNTFS
解创建虚拟磁盘通建立文件达虚拟程虚拟磁盘操作实际文件操作创建虚拟磁盘时必须文件盒磁盘进行符号链接理删时种符号链接磁盘操作终划文件操作进行操作前必须相应文件指针获方式通开文件获时候开文件定创建文件进行判断已指定盘符连接文件进行链接否必定会出错前需加判断
整程中觉函数特者说特重首先DirverEntry编程中常main()winmain()函数样核函数入口函数程序加载时调接着FileDiskDeviceControl()作贯穿整程序户提出求成IRP包终传导函数进行列检查根功码采取相应措施FileDiskThread创建设备象时候创建IRP需进行续处理通常指读写步程序时允许设备象进行时访问设备需设备工作线程根IRP队列采取相应处理终返回处理状态信息
filedisk函数带参main()函数户需通输入DOS命令达操作程序目函数中做次命令行参数分析充分考虑户输入命令根输入者调相应函数者输出错误信息提示户进行重新输入
然说次课设代码量涉方面前没遇花费量时间觉切值做程中体会思考快乐思考价值学间进行交流互动带丰厚效益仅长知识学会讨效果远远高边死学总言次课设学时明白冰山角学东西需专业知识更深解增加学信心会更加努力相信付出定会获回报困难怕坚持定够克服
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档