首页 > 软件 > c++监视CreateFile这个api的钩子,如何只处理打开的文件是\\\\.\\PHYSICALDRIVE0的程序,其他文件不管

c++监视CreateFile这个api的钩子,如何只处理打开的文件是\\\\.\\PHYSICALDRIVE0的程序,其他文件不管

软件 2024-03-15

使用C++ CreatFile() 打开C盘失败

  CreateFile函数调用的第一个参数有误,应该是一个文件路径而非一个磁盘驱动符

  该函数原型如下:

HANDLEWINAPICreateFile(
_In_LPCTSTRlpFileName,
_In_DWORDdwDesiredAccess,
_In_DWORDdwShareMode,
_In_opt_LPSECURITY_ATTRIBUTESlpSecurityAttributes,
_In_DWORDdwCreationDisposition,
_In_DWORDdwFlagsAndAttributes,
_In_opt_HANDLEhTemplateFile
);

  lpFileName 应该指向一个设备或者文件的路径,磁盘驱动符不在此列

  如果需要打开C盘设备,应该使用"\\\\.\\C:"这种微软规定的格式

  DeviceIoControl原型如下:

BOOLDeviceIoControl(
HANDLEhDevice,
DWORDdwIoControlCode,
LPVOIDlpInBuffer,
DWORDnInBufferSize,
LPVOIDlpOutBuffer,
DWORDnOutBufferSize,
LPDWORDlpBytesReturned,
LPOVERLAPPEDlpOverlapped
);

  hDevice是上面打开的设备句柄

  dwIoControlCode 是控制设备的指令。微软在winioctl.h文件中定义好了很多种操作,不过最终都是通过CTL_CODE宏实现的,这就是一种通信协议。

  CTL_CODE原型:

#defineCTL_CODE(DeviceType,Function,Method,Access)(
((DeviceType)<<16)|((Access)<<14)|((Function)<<2)|(Method)
)

  该宏包含四个参数,高16位存储设备类型,14~15位访问权限,2~13位操作功能,最后一个是确定缓冲区(DeviceIOControl中缓冲区的定义下面有)是如何与I/O和文件系统数据缓冲区进行数据传递的方式。最常用的就是METHOD_BUFFERED

  这个宏经常用来定义IOCTL(I/O控制)和FSCTL(文件系统控制)功能控制代码,所有的IOCTLs必须通过这种方式定义,以确保这些指令能被Microsoft,以及其他的硬件厂商通信接口所识别

  lpInBuffer: 设备操控请求数据的缓冲区基址,如果dwIoControlCode 指定了一个不需要输入数据的操作,则该个参数设为NULL

  nInBufferSize:lplnBuffer的大小,单位字节

  lpOutBuffer:存放输出数据的buffer,如果dwIoControlCode 指定了一个不需要输出数据的操作,那么该参数设为NULL

  nOutBufferSize:lpOutBuffer的大小,单位字节

  lpBytesReturned:实际输出数据的字节

  lpOverlapped:异步操作用的,一般忽略,设置为NULL

  具体的命令参数初始化需要查阅对应的命名协议,这里不赘述,可参考msdn

physicaldrive0是什么?

载录的:\x0d\x0a由于"\"是C/C+中转义符, "\\\\.\\"就相当于\\.\\x0d\x0a\x0d\x0a在Windows中 \\.\ 前缀用于标识设备,其中的"."表示本地计算机。\x0d\x0a\x0d\x0a比如\\.\PhysicalDrive0表示本机的物理驱动器0(一般是主硬盘),\x0d\x0a\\.\COM1表示本机的1号串行口\x0d\x0a\\computer01\PhysicalDrive1表示网络中计算机computer01的物理驱动器1,等等。\x0d\x0a\x0d\x0a你可以用CreateFile函数打开\\.\PhysicalDrive0\x0d\x0a然后用ReadFile, WriteFile来直接读写本机硬盘扇区\x0d\x0a用DeviceIoControl来获取硬盘的信息(扇区数,磁头数,柱面数)等。\x0d\x0a\x0d\x0a亦可用CreateFile打开卷,如\\.\C:即是C盘。\x0d\x0a\x0d\x0a若你对windows内核有点了解,事实上\\.\就相当于NT对象目录中的\??\目录\x0d\x0a其中包含了所有提供给Win32程序的设备对象,你可用winobj来查看。

如何编写木马程序?

怎样编写木马程序 您好 建议您不要去学习使用木马病毒,是属于违法犯罪行为。而且,如果您接收了木马病毒,那么该病毒会自动在您的电脑中优先运行。 建议您到腾讯电脑管家官网下载一个电脑管家。 在平时使用电脑的时候,打开电脑管家,可以受到电脑管家16层实时防护的保护和云智能预警系统,可以在木马活动早期侦测并阻断木马的破坏行为,通过云查杀技术秒杀最新流行木马。 如果还有其他疑问和问题,欢迎再次来电脑管家企业平台进行提问,我们将尽全力为您解答疑难 腾讯电脑管家企业平台:zhidao.baidu/c/guanjia/ 如何编写木马程序?? 你想干什么?如果你只想玩玩,建议你学一下vbs脚本或bat脚本,如果

vb的问题.大家帮帮忙,小弟谢过了!

用程序退出时生成个批处理 并运行这个批处理 批处理加一段延时代码,等待一段时间,确保程序已完全关闭 执行批处理的删除代码 最后删除批处理自身 以前做过,可以实现 删除自身大总结 程序的自删除早已经不是什么新鲜的话题了,对于各位大虾来说是更是比较容易的事情,但想想自己刚学时遇到的种种错误,我觉得有必要把自己所知道的各种方法总结一下,希望对新手的学习能够有所帮助。 程序的自删除广泛用于反安装程序最后的自删除(环保呀!),当然更多见于木马、病毒首次安装的自动销毁^*^,至于用于何种用途就看你自己啦! 经典自删除 说到程序的自删除就不能不说由 Gary Nebbett 等大虾所写的代码,经典之作呀!代

如何用C语言对大容量硬盘进行读写

7月30日 15:18 大容量指多少呢,还是先看看主板的性能,就算刷了bios后,也未必能支持,看看说明刷了后最大能支持多少。目前市场上主流的是160、250、650g

标签:电脑网络 编程 编程语言 计算机 C语言

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18