首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DeviceIoControl_deviceregist

DeviceIoControl这个api我们用的不多,但是很重要,有时会帮助我们实现一些特别的需求, 如获取硬件设备信息、与硬件设备通信(读写数据)等,对照msdn,下面我们详细解释一下这个api的用法...DeviceIoControl是用来控制我们指定设备的输入输出操作,使设备按照我们发的指令去工作。...DeviceIoControl是kernel32中的函数,需要包含的头文件是winbase.h,先看函数原型 BOOL DeviceIoControl( HANDLE hDevice, DWORD dwIoControlCode...Method) ) 可以看到,这个宏四个参数,自然是一个32位分成了4部分,高16位存储设备类型( 这里不列举了,看msdn哦),14~15位访问权限,2~13位操作功能,最后一个就是确定缓冲区(别忘记上面DeviceIOControl

27720
您找到你想要的搜索结果了吗?
是的
没有找到

vci驱动安装_deviceiocontrol函数

* filename, DISK_GEOMETRY * pdg) { HANDLE hDevice; // 设备句柄 BOOL bResult; // DeviceIoControl...bResult) { pmt = (GET_MEDIA_TYPES *)new BYTE[MEDIA_INFO_SIZE]; bResult = ::DeviceIoControl(...好麻烦阿,好多看不懂,慢慢来 先看DISK_GEOMETRY 这个结构体 其中的MEDIA_TYPE是个枚举类型 好多阿 具体就不列出来了,可以到msdn上察看到所有的 这里有一个很重要的函数,就是::DeviceIoControl.../C : 关于::DeviceIoControl这个函数的用法,我不多说了,可以参考 http://dev.csdn.net/article/55/55510.shtm 这个系列,我也是参考这个的...关于这个,确实还有很多值得我们去学习~~~~ 4.区分移动硬盘和硬盘 我说了,移动硬盘也是DRIVE_FIXED ,真够bt的,这个没做过的话,很难想像的,太bt了 那怎么区分 用DeviceIoControl

45330

deviceiocontrol true什么意思_device driver service

与驱动程序通信的函数,除了ReadFile和WriteFile函数还有DeviceIoControl函数,而且DeviceIoControl函数那是相当的彪悍。...DeviceIoControl的第二个参数就是控制码,控制码是一个32为无符号整型,需要符合DDK的规定。...操作系统会将AssociatedIrp.SystemBuffer的数据再次复制到DeviceIoControl提供的输出缓冲区,复制的字节数有pIrp->IoStatus.Information指定,DeviceIoControl...往驱动中Input数据:通过I/O堆栈的Parameters.DeviceIoControl.Type3InputBuffer得到DeviceIoControl提供的输入缓冲区地址,Parameters.DeviceIoControl.InputBufferLength...从驱动中Output数据:通过pIrp->UserBuffer得到DeviceIoControl函数提供的输出缓冲区地址,再通过Parameters.DeviceIoControl.OutputBufferLength

42620

应用程序与驱动程序通信 DeviceIoControl

之前写过一篇关于通过DeviceIoControl函数来使应用程序与驱动程序通信的博客,这次再通过这个完整的代码来简要疏通总结一下。   ...这种通信方式,就是驱动程序和应用程序自定义一种IO控制码,然后调用DeviceIoControl函数,IO管理器会产生一个MajorFunction 为IRP_MJ_DEVICE_CONTROL(DeviceIoControl...驱动程序铺垫打理好之后,应用程序就可以由符号链接名通过CreateFile函数获取到设备句柄DeviceHandle,再用本场的主角,DeviceIoControl通过这个DeviceHandle发送控制码了...先看看这两个函数: BOOL WINAPI DeviceIoControl( _In_ HANDLE hDevice, //CreateFile函数打开的设备句柄...; OutputDataLength = IoStackLocation->Parameters.DeviceIoControl.OutputBufferLength; switch

1.9K31

应用程序与驱动程序通信 DeviceIoControl

这种通信方式,就是驱动程序和应用程序自定义一种IO控制码,然后调用DeviceIoControl函数,IO管理器会产生一个MajorFunction 为IRP_MJ_DEVICE_CONTROL(DeviceIoControl...METHOD_ NEITHER方式是不进行缓冲的,在驱动中可以直接使用Ring3的输入输出内存地址,   驱动程序可以通过pIrpStack->Parameters.DeviceIoControl.Type3InputBuffer...驱动程序铺垫打理好之后,应用程序就可以由符号链接名通过CreateFile函数获取到设备句柄DeviceHandle,再用本场的主角,DeviceIoControl通过这个DeviceHandle发送控制码了...先看看这两个函数: 1234567891011121314151617181920212223242526 BOOL WINAPI DeviceIoControl(  _In_         HANDLE...;    OutputDataLength = IoStackLocation->Parameters.DeviceIoControl.OutputBufferLength;    switch (IoControlCode

1.6K20

驱动开发:应用DeviceIoContro开发模板

内核中执行代码后需要将结果动态显示给应用层的用户,DeviceIoControl 是直接发送控制代码到指定的设备驱动程序,使相应的移动设备以执行相应的操作的函数,如下代码是一个经典的驱动开发模板框架,在开发经典驱动时会用到的一个通用案例...;// 输入和输出的缓冲区(DeviceIoControl的InBuffer和OutBuffer都是它)pIoBuffer = pIrp->AssociatedIrp.SystemBuffer;// EXE...发送传入数据的BUFFER长度(DeviceIoControl的nInBufferSize)uInSize = pIrpStack->Parameters.DeviceIoControl.InputBufferLength...;// EXE接收传出数据的BUFFER长度(DeviceIoControl的nOutBufferSize)uOutSize = pIrpStack->Parameters.DeviceIoControl.OutputBufferLength...;pIrp->IoStatus.Information = uOutSize;IoCompleteRequest(pIrp, IO_NO_INCREMENT);return status;}// 设定DeviceIoControl

77710

驱动开发:应用DeviceIoContro开发模板

内核中执行代码后需要将结果动态显示给应用层的用户,DeviceIoControl 是直接发送控制代码到指定的设备驱动程序,使相应的移动设备以执行相应的操作的函数,如下代码是一个经典的驱动开发模板框架,在开发经典驱动时会用到的一个通用案例...; // 输入和输出的缓冲区(DeviceIoControl的InBuffer和OutBuffer都是它) pIoBuffer = pIrp->AssociatedIrp.SystemBuffer...; // EXE发送传入数据的BUFFER长度(DeviceIoControl的nInBufferSize) uInSize = pIrpStack->Parameters.DeviceIoControl.InputBufferLength...; // EXE接收传出数据的BUFFER长度(DeviceIoControl的nOutBufferSize) uOutSize = pIrpStack->Parameters.DeviceIoControl.OutputBufferLength...发送控制信号 // input = 发送数据 output = 接受数据 ref_len = 数据长度 DWORD input = 100, output = 0, ref_len = 0; DeviceIoControl

98230

自己写的驱动用CreateFile打开时错误码返回1的问题

当时我推测可能是句柄为NULL,或者DeviceIoControl中哪个缓冲区不能为NULL,为了知道是哪的问题,我在调用DeviceIoControl之前加了一条输出语句,我发现这条语句输出的句柄值是正常的...,那就肯定是DeviceIoControl的问题,我先试着吧所有的输入输出缓冲区都给定了一个值,通过排查最后发现是倒数第二个参数不能为NULL,这个参数表示的是驱动层实际返回的缓冲区的大小。...这就要说到DeviceIoControl与驱动通信的方式,DeviceIoControl的定义如下: BOOL DeviceIoControl( HANDLE hDevice, DWORD dwIoControlCode...通过dwIoControlCode向驱动下发控制码,这个控制码在驱动中可以通过IO_STACK_LOCATION 结构中的Parameters.DeviceIoControl.IoControlCode...DeviceIoControl函数,如果不需要跟驱动层进行交互,那么他的输入输出缓冲区是可以给NULL的,但是由于I/O管理器会像它返回驱动层实际返回的数据的大小,所以这个真实大小的缓冲区一定不能为NULL

1.5K50

64位内核开发第一讲,IRP 派遣函数 与 通信。 驱动框架补充

缓存方式派遣函数中的使用例子 三丶MDL方式(直接IO方式) 3.1 直接IO方式 3.2Mdl结构 3.3 直接IO通信例子 四丶其它方式读写 4.1 其它方式 五丶IO控制设备通讯方式 5.1 DeviceIoControl...它里面记录着 Read Write DeviceIoControl Create 等结构。 当我们 IRP类型为Read的时候。派遣函数 则可以从 Read域中获取读取的长度 偏移等信息。...BOOL DeviceIoControl( [in] HANDLE hDevice, [in] DWORD...函数,并且通信方式指明为 METHOD_BUFFERED 那么DeviceIoControl 传递的 InBuffer OutBuffer 都会转化为IRP中的 SystemBuffer 我们直接从...DeviceIoControl->Type3InputBuffer 记录着输入缓冲区 Irp->UserBuffer 记录着输出缓冲区 其中输入输出缓冲区的长度还是在 DeviceIoControl

1.1K22

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券