首页
学习
活动
专区
工具
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

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

    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

    46430

    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

    44320

    应用程序与驱动程序通信 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...发送控制信号 // input = 发送数据 output = 接受数据 ref_len = 数据长度 DWORD input = 100, output = 0, ref_len = 0; DeviceIoControl

    1K30

    驱动开发:应用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

    79410

    自己写的驱动用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

    应用层与内核的几种通信方式

    对于IO设备控制操作,不知道为什么可以用设置DO_DIRECT_IO后就能对三种方式都适用,而且stack->Parameters.Read.Length/Write.Length 都是对应应用层的DeviceIoControl...DeviceIoControl函数的输入输出缓冲区长度都再stack->Parameters.DeviceioControl.InputBufferLength/OutputBufferLength中...4缓冲内存IOCTL,在DeviceIoControl函数第二个参数的时候,使用CTL_CODE来产生该常数,其中Method字段设置为METHOD_BUFFERED,在内核模式中输入缓冲区很输出缓冲区都为...pIrp->AssociatedIrp.SystemBuffer, 5直接方式IOCTL,在DeviceIoControl函数第二个参数的时候,使用CTL_CODE来产生该常数,其中Method字段设置为...函数第二个参数的时候,使用CTL_CODE来产生该常数,其中Method字段设置为MEHTOD_NEITHER,输入缓冲区为stack->Parameters.DeviceIoControl.Tyep3InputBuffer

    1.2K30

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券