DeviceIoControl】的更多相关文章

调用的方法之一的DeviceIoControl 驱动层提供设备名 例如filedisk 在驱动层 首先先是注册列表 用winObj查看 filedisk的驱动对象 但是 这八个对象时怎么生成的呢? 我们在加载filedisk.sys驱动时进行中断 查看过程 具体的双击调试 看我的另一篇文章 http://www.cnblogs.com/UnMovedMover/p/3690369.html 在下载的源码filedisk中sys下面的filedisk-17\filedisk-17\sys\src…
DeviceIoControl是kernel32中的函数,包含的头文件为winbase.h. BOOL DeviceIoControl( HANDLE hDevice,                   // 设备句柄 DWORD dwIoControlCode,      // Io控制命令 LPVOID lpInBuffer,                // 应用程序传递给驱动程序的输入缓冲区指针 DWORD nInBufferSize,          // 应用程序传递给驱动程序…
P.bhw98 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 9pt; PADDING-BOTTOM: 0px; MARGIN: 10px 0px 5px; LINE-HEIGHT: normal; PADDING-TOP: 0px; FONT-FAMILY: Verdana, Arial } PRE.bhw98 { FONT-SIZE: 9pt; PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDIN…
好久没写博客了,近期看了下DeviceIoControl  关于磁盘的应用,特记一文,以备久后查阅. 首先介绍下,文件在磁盘的存储结构(详细能够到网上查询NTFS文件系统相关的教程后者数据恢复方面教程的介绍).以下介绍的仅与此文相关. 文件属性(头): (Ps: 截图摘自[数据重现文件系统原理精解与数据恢复最佳实践].(马林)) 然后我们须要认识两个结构: typedef struct { LARGE_INTEGER StartingVcn; } STARTING_VCN_INPUT_BUFFE…
应用程序和驱动程序的通信过程是:应用程序使用CreateFile函数打开设备,然后用DeviceIoControl与驱动程序进行通信,包含读和写两种操作.还能够用ReadFile读数据用WriteFile写数据.操作完成时用CloseHandle关闭设备.我们比較经常使用的就是用DeviceIoControl对设备进行读写操作.先看看DeviceIoControl是怎么定义的: BOOL DeviceIoControl( HANDLE hDevice, DWORD dwIoControlCode…
DeviceIoControl这个api我们用的不多,可是非常重要,有时会帮助我们实现一些特别的需求, 如获取硬件设备信息.与硬件设备通信(读写数据)等,对比msdn,以下我们详解一下这个api的使用方法(有什么错误再所难免,各位不吝不吝赐教啊).DeviceIoControl是用来控制我们指定设备的输入输出操作,使设备依照我们发的指令去工作. DeviceIoControl是kernel32中的函数,须要包括的头文件是winbase.h,先看函数原型 BOOL DeviceIoControl(…
    常识: IRP:I/O Request Package  即输入输出请求包 exe和sys通信时,exe会发出I/O请求.操作系统会将I/O请求转化为相应的IRP数据, 不同类型传递到不同的dispatch function   过程: DeviceIoControl函数产生IRP_MJ_DEVICE_CONTROL 派遣例程 DeviceIoControl函数是用来向指定设备发送控制码,当指定的设备接收到DeviceIoControl函数发来的控制码后 会调用IRP_MJ_DEVICE…
Q 在NT/2000/XP中,如何读取CMOS数据? Q 在NT/2000/XP中,如何控制speaker发声? Q 在NT/2000/XP中,如何直接访问物理端口? A 看似小小问题,难倒多少好汉! NT/2000/XP从安全性.可靠性.稳定性上考虑,应用程序和操作系统是分开的,操作系统代码运行在核心态,有权访问系统数据和硬件,能执行特权指令:应用程序运行在用户态,能够使用的接口和访问系统数据的权限都受到严格限制.当用户程序调用系统服务时,处理器捕获该调用,然后把调用的线程切换到核心态.当系统…
Q 用IOCTL_DISK_GET_DRIVE_GEOMETRY或IOCTL_STORAGE_GET_MEDIA_TYPES_EX只能得到很少的磁盘参数,我想获得包括硬盘序列号在内的更加详细的信息,有什么办法呀? A 确实,用你所说的I/O控制码,只能得到最基本的磁盘参数.获取磁盘出厂信息的I/O控制码,微软在VC/MFC环境中没有开放,在DDK中可以发现一些线索.早先,Lynn McGuire写了一个很出名的获取IDE硬盘详细信息的程序DiskID32,下面的例子是在其基础上经过增删和改进而成…
Q 前几次我们讨论的都是设备名比较清楚的情况,有了设备名(路径),就可以直接调用CreateFile打开设备,进行它所支持的I/O操作了.如果事先并不能确切知道设备名,如何去访问设备呢? A 访问设备必须用设备句柄,而得到设备句柄必须知道设备路径,这个套路以你我之力是改变不了的.每个设备都有它所属类型的GUID,我们顺着这个GUID就能获得设备路径. GUID是同类或同种设备的全球唯一识别码,它是一个128 bit(16字节)的整形数,真实面目为 typedef struct _GUID {  …