Articles of ioctl

所有接口的C / C ++ Linux MAC地址

我正在使用以下代码来检索当前计算机的所有MAC地址: ifreq ifr; ifconf ifc; char buf[1024]; int sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); if (sock == -1) { … }; ifc.ifc_len = sizeof(buf); ifc.ifc_buf = buf; if (ioctl(sock, SIOCGIFCONF, &ifc) == -1) { … } ifreq *it = ifc.ifc_req; const ifreq* const end = it + (ifc.ifc_len / sizeof(ifreq)); for (; it != end; ++it) […]

USBDEVFS_RESET与IOCTL_USB_RESET

我似乎纠结在USB堆栈上不同的抽象之间.. IOCTL_USB_RESET和USBDEVFS_RESET针对USB设备发射之间有什么区别? 这两个调用是否会最终在接口上触发相同的低级别操作,还是有区别? 我注意到USBDEVFS_RESET有时被描述为“等同于重新devise和重新枚举设备”,而我自己发现,触发IOCTL_USB_RESET (由libusb的usb_reset()调用完成)在dmesg中触发重置消息,但没有新的“枚举”这将导致通常的多线USB检测和识别消息我猜。 由于IOCTL_USB_RESET不能解决我的问题(卡住usb设备),甚至不会触发reenumeration,有没有什么机会USBDEVFS_RESET会做得更好?

如何知道一个过滤设备驱动程序被挂接到一个COM端口

我一直在试图确定USB串行端口(COM)端口是否被系统总线驱动程序监控,但没有成功。 基本上我有一个应用程序,通过过滤设备驱动程序监视COM端口。 在阅读Dobb博士杂志的这篇文章后,我能够做到这一点。 现在试图在一个单独的应用程序中实现的是能够确定是否有一个应用程序挂钩到一个特定的COM端口使用过滤设备驱动程序。 任何人都可以帮助或引导我

SIO_FLUSH的行为

当在Windows环境(用户空间)中使用SIO_FLUSH套接字ioctl时,我对发生什么感到困惑。 这样做是否:(1)将TCP / IP发送队列中的数据完全丢弃到黑洞中,或者(2)通过连接推送排队的发送数据,直到缓冲区为空,或者(3)其他内容? 谢谢!

closures远程PC上的显示

我正在修复用于Windows的远程控制(远程桌面)应用程序中的一些错误。 而且还有一个function,就是可以在远程机器上进行黑屏 – 所有的程序都不受影响,但是在远程PC上查看显示器的人只能看黑屏。 它通过发送未logging的IoCtl请求IOCTL_VIDEO_SET_OUTPUT_DEVICE_POWER_STATE来实现。 而这个要求不适用于Vista和以上。 有另外的方法去做我想要的吗? 事实上, SendMessage(-1,WM_SOMMAND,SC_MONITORPOWER,2)做到这一点,但如果有人点击键盘/鼠标,屏幕将会重新开启。

如何加载和启动Windows驱动程序?

您好我有一个简单的驱动程序helloworld.sys里面,它有一些打印语句,如kdprint(“加载成功”)等。现在我需要加载驱动程序,并启动服务。 怎么做..?? 提前致谢

内核模式驱动程序和IOCTL

我在做什么: 用户模式应用程序发送进程ID给驱动程序 驱动程序获取指定的进程ID的句柄 驱动程序将打开的句柄传递给用户模式应用 我不确定这个代码是否完全正常工作。 我对驱动程序相当陌生,所以我还没有设置debugging,虚拟机还没有完成下载(慢连接问题)。 从用户模式应用程序获取进程ID应该工作正常,它应该被作为ProcessId存储在PROCESS_INFO结构中。 打开的句柄与ProcessHandle存储在同一个结构中,以便发送回用户模式应用程序。 我不知道如何将数据从内核返回到用户模式,也许有人可以简单地解释。 这是我的代码: #include <ntifs.h> #include <wdf.h> DRIVER_INITIALIZE DriverEntry; UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\GetSysHandle"), SymbolicLink = RTL_CONSTANT_STRING(L"\\DosDevices\\GetSysHandle"); typedef struct _PROCESS_INFO { HANDLE ProcessId; HANDLE ProcessHandle; }PROCESS_INFO, *PPROCESS_INFO; BOOLEAN GetSysHandle(PPROCESS_INFO ProcessInfo) { NTSTATUS status = STATUS_ACCESS_DENIED; PEPROCESS eProcess = NULL; status = PsLookupProcessByProcessId(ProcessInfo->ProcessId, &eProcess); if ((!NT_SUCCESS(status)) || (!eProcess)) { return […]

Windows IOCTL:如何写入SD卡外部CSD寄存器?

任何人都可以通过IOCTL指导我如何在Windows上写入SD卡的外部CSD寄存器。 我正在使用IOCTL_SFFDISK_DEVICE_COMMAND发送CMD6(SWITCH)并修改eMMC External CSD寄存器的某些字段。 但是,DeviceIoControl引发错误(ERROR_ACCESS_DENIED),我无法写入寄存器。 例如,我正试图写入值= 0x00到POWER_OFF_NOTIFICATION字段,即ExCSD [34]。 以下在linux中如何填充mmc_ioc_cmd结构 UINT32 value = (MMC_SWITCH_MODE_WRITE_BYTE << 24) | (index << 16) | (val << 8) | EXT_CSD_CMD_SET_NORMAL; 我正在填充命令数据为: SFFDISK_DEVICE_COMMAND_DATA &sdcd = GetCommandData(); sdcd.HeaderSize = sizeof(SFFDISK_DEVICE_COMMAND_DATA); sdcd.Command = SFFDISK_DC_DEVICE_COMMAND; sdcd.ProtocolArgumentSize = sizeof(SDCMD_DESCRIPTOR); sdcd.DeviceDataBufferSize = BufferSize; 和我的描述符数据为: SDCMD_DESCRIPTOR Desc; Desc.Cmd = SDCMD_SWITCH ; /*CMD6*/ Desc.CmdClass = SDCC_STANDARD; Desc.TransferDirection = […]

我怎样才能在内核模式(Windows)的IOCTL调用

在用户模式下,可以通过DeviceIoControlfunction进行IOCTL调用。 我可以在内核模式下使用什么来发出IOCTL呼叫? 我必须在文件系统微型filter驱动程序中使用它。 背景 我正在编写一个文件系统微filter驱动程序 ,我必须发出IOCTL调用存储设备,以找出他们的序列号和function(可移动或不可移动)。

如何在Windows下打开一个Linux分区的样式/ dev / sdXY?

如何在Windows下打开一个Linux分区的样式 /dev/sdXY ? 目前,我正在打开\\\\.\\PhysicalDrive%d然后调用DeviceIoControl(IOCTL_DISK_GET_DRIVE_LAYOUT, …)以获取分区布局,并存储包含文件系统的区域的偏移量和大小。 在我的代码中,我偏移到分区的偏移设备上的IO操作。 此外, 我如何去除明显的同步行为? Windows上的物理驱动器原始设备上的操作非常缓慢,我宁愿操作系统在可能的情况下进行caching。