标签: ioctl

HDD序列号在Windows XP,Vista和7中每2字节翻转一次,但在Windows 8中则不翻

我需要获取HDD序列号,以将其用作许可软件的密钥.我在这个url中使用了diskid32代码:http://www.winsim.com/diskid32/diskid32.html 它使用了DeviceIoControl Win32 API和IO控制代码IOCTL_STORAGE_QUERY_PROPERTY.

有效.但是,当我仔细检查硬盘本身上印刷的实际序列号时,我发现该号码的每2个字节都被翻转了.

一个简单的解决方案可能是简单地将字节翻转回来.它适用于Windows XP,Vista和7,但在Windows 8中不需要翻转!

我想知道在Windows XP,Vista和7中翻转字节的确切原因,以及为什么不在Windows 8中翻转.下一个Windows怎么

部分代码略有变化:

  int drive = 0;
  HANDLE hPhysicalDriveIOCTL = 0;
  char driveName [256];
  sprintf (driveName, "\\\\.\\PhysicalDrive%d", drive);
  //  Windows NT, Windows 2000, Windows XP - admin rights not required
  hPhysicalDriveIOCTL = CreateFile (driveName, 0,
                           FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
                           OPEN_EXISTING, 0, NULL);
  if (hPhysicalDriveIOCTL != INVALID_HANDLE_VALUE)
  {
     _STORAGE_PROPERTY_QUERY query;
     DWORD cbBytesReturned = 0; …
Run Code Online (Sandbox Code Playgroud)

ioctl windows-8 deviceiocontrol

14
推荐指数
1
解决办法
2937
查看次数

在Linux上使用I2C读/写

我正在尝试读取/写入FM24CL64-GTR FRAM通过地址上的I2C总线连接的芯片0b 1010 011.

当我试图写3个字节(数据地址2个字节,+数据一个字节)时,我得到一个内核消息([12406.360000] i2c-adapter i2c-0: sendbytes: NAK bailout.),以及写返回!= 3.参见下面的代码:

#include <linux/i2c-dev.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdint.h>

int file;
char filename[20];
int addr = 0x53; // 0b1010011; /* The I2C address */
uint16_t dataAddr = 0x1234;
uint8_t val = 0x5c;
uint8_t buf[3];

sprintf(filename,"/dev/i2c-%d",0);
if ((file = open(filename,O_RDWR)) < 0)
    exit(1);

if (ioctl(file,I2C_SLAVE,addr) < 0)
    exit(2);

buf[0] = dataAddr >> 8;
buf[1] = dataAddr & 0xff;
buf[2] = val;

if (write(file, buf, 3) …
Run Code Online (Sandbox Code Playgroud)

c linux ioctl i2c

13
推荐指数
2
解决办法
5万
查看次数

Linux驱动程序:ioctl还是sysfs?

我正在编写一个驱动程序来控制一些自定义硬件.

在过去(即15年前),我正在这样做ioctls,但现在正在挖掘sysfs作为一种可能的选择.

  • 据我了解,ioctls并没有完全弃用,但sysfs是首选(?)
  • 我需要同时读取/写入值集,即通过一个sysfs条目.我读过这不理想,但必要时可以接受(?)
  • 需要对mutex驱动程序进行" 保护",以便一次只能有一个应用程序写入.(我确实有一些只读'信息'条目,我希望所有人都可以随时访问这些条目).

鉴于上述情况,最好的方法是什么 - ioctl或sysfs?

如果是sysfs,那我该如何实现独占访问?

如果sysfs,那么如果驱动程序没有读/写/ ioctl fops,它是否需要打开/释放?!

(这是一个'私人'司机,所以我不在乎大规模;)但是如果新的方式更适用,那么我可能会抓住它们!)

谢谢.

ioctl linux-device-driver sysfs

13
推荐指数
1
解决办法
4382
查看次数

检索node.js中的网络接口列表(ioctl SIOCGIFCONF)

我是节点的新手,正在利用node_pcap将节点应用程序混合在一起,以捕获数据包数据并用它做有趣的事情.捕获数据的输入之一是要监听的网络接口,即"eth0".

我认为如果我能够以编程方式查找系统上的可用接口并将它们呈现给程序的用户并允许它们选择要监听的接口,那将是非常好的.在C中,我将使用SIOCGIFCONF 使用ioctl(或使用winsock的ioctlsocket).

我的问题是,目前是否存在在节点中执行此操作的机制?我搜索了很多,没有达到任何这样的解决方案.

如果当前不存在此功能,我会假设我能够使用ioctl在C/C++中编写模块绑定来实现此目的.

感谢您的时间!

javascript ioctl v8 interface node.js

12
推荐指数
1
解决办法
7279
查看次数

用C语言在Linux上发出哔哔声

我想使用系统蜂鸣器生成具有特定频率和长度(针对不同声音信号)的蜂鸣声(并且如果蜂鸣器不可用/可访问则仅扬声器).我知道可以通过使用ioctl来实现这一点,但这需要root访问权限,这是我不想要的.

我知道我可以使用"beep"命令,但这将是一个依赖项,如果可能的话,不应该使用它(根本没有外部依赖项,只有基本的linux库和C).

我目前拥有的是以下代码(但这需要超级用户权限才能运行):

#include <stdlib.h>
#include <fcntl.h>
#include <linux/kd.h>

int main(int argc, char *argv[])
{
 int fd = open("/dev/console", O_RDONLY);
 if (fd == -1 || argc != 3) return -1;
 return ioctl(fd, KDMKTONE, (atoi(argv[2])<<16)+(1193180/atoi(argv[1])));
}
Run Code Online (Sandbox Code Playgroud)

如果没有其他方法可以做到这一点,那么我将使用蜂鸣声,但我真的想避免依赖并将蜂鸣声直接集成到我的脚本中,但我相信这里有人会知道解决方案/解决方法.

我真的不想要外部库,因为程序应该尽可能轻量级.

c linux ioctl external-dependencies beep

12
推荐指数
2
解决办法
2万
查看次数

Linux - 使用FIONREAD的ioctl始终为0

我想知道我的TCP套接字有多少字节可读.我用标志"FIONREAD"调用ioctl,它实际上应该给我这个值.当我调用函数时,我得到返回值0(所以没有错误),但我的整数参数得到值0.这没有问题但是当我调用recv()方法时,我实际上从套接字中读取了一些字节.我究竟做错了什么?

//这里有一些代码:

char recBuffer[BUFFERLENGTH] = {0};
int bytesAv = 0;
int bytesRead = 0;
int flags = 0;
if ( ioctl (m_Socket,FIONREAD,&bytesAv) < 0 )
{
    // Error
}
if ( bytesAv < 1 )
{
    // No Data Available
}
bytesRead = recv(m_Socket,recBuffer,BUFFERLENGTH,flags);
Run Code Online (Sandbox Code Playgroud)

当我调用recv函数时,我实际读取了一些有效的数据(我预期的)

sockets ioctl

11
推荐指数
3
解决办法
5万
查看次数

如果cmd = 2,则不调用ioctl

我正在开发一个使用unlocked_ioctl的内核模块.我用内核版本2.6.24-23-generic测试了它,它运行得很好.现在我尝试使用内核版本3.3.1-1-ARCH并且发生了一些奇怪的事情:当请求值(cmd)为2时,不会执行ioctl函数.它返回0,但函数未执行.为了检查它是否未执行,我执行了以下操作:

static long midriver_ioctl(struct file *file,
    unsigned int cmd, unsigned long arg) {

printk("Called with cmd = %d\n", cmd);
Run Code Online (Sandbox Code Playgroud)

我写了一个测试程序,从0到4096调用此设备的ioctl,我可以在dmesg中看到所有这些值的消息"用cmd = n调用",除了"2",唯一没有显示的值.

关于我做错了什么的线索?

先感谢您,

c ioctl module linux-kernel

11
推荐指数
1
解决办法
3090
查看次数

这个宏_IOR(MY_MACIG,0,int)是什么意思?

我正在通过ioctl示例程序来检查它与内核空间的通信方式.在程序WRITE_IOCTL中用作命令

#define WRITE_IOCTL _IOW(MY_MACIG, 1, int)
ioctl(fd, WRITE_IOCTL, "hello world")
Run Code Online (Sandbox Code Playgroud)

我无法理解它是什么_IOW(MY_MACIG, 1, int).这是我下载程序的链接.请帮我. http://people.ee.ethz.ch/~arkeller/linux/multi/kernel_user_space_howto-4.html

unix linux kernel ioctl netlink

11
推荐指数
2
解决办法
2万
查看次数

如何在Linux设备驱动程序中设置errno?

我正在设计一个Linux角色设备驱动程序.我想在ioctl()系统调用中发生错误时设置errno.

long my_own_ioctl(struct file *file, unsigned int req, unsigned long arg)
{
    long ret = 0;
    BOOL isErr = FALSE;

    // some operation
    // ...

    if (isErr) {
        // set errno
        // ...                 <--- What should I do?
        ret = -1;
    }

    return ret;
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能实现这一目标?提前谢谢你!


请允许我更详细地解释我的申请.

我的设备位于/ dev/myCharDev中.我的用户空间应用程序是这样的:

#define _COMMAND                    (1)
#define _ERROR_COMMAND_PARAMETER    (-1)

int main()
{
    int fd = open("/dev/myCharDec", O_RDONLY);
    int errnoCopy;

    if (fd) {
        if (ioctl(fd, _COMMAND, _ERROR_COMMAND_PARAMETER) < 0) {      // should cause error in …
Run Code Online (Sandbox Code Playgroud)

linux ioctl driver errno device-driver

10
推荐指数
2
解决办法
5969
查看次数

gpg:错误设备的 ioctl 不合适

我正在运行一个自托管的 Renovate 实例,我需要使用 GPG 密钥签署对 GitLab 的提交。
为此,我使用我的 GitLab 用户的 PGP 私钥块设置环境变量 RENOVATE_GIT_PRIVATE_KEY,并且该变量会自动导入。
但当我尝试这样做时,出现以下错误:

gpg: directory '/home/ubuntu/.gnupg' created
gpg: keybox '/home/ubuntu/.gnupg/pubring.kbx' created
gpg: /home/ubuntu/.gnupg/trustdb.gpg: trustdb created
gpg: key 72A96C0D4FA8543C: public key "Dummy User <dummyuser@company.com>" imported
gpg: key 72A96C0D4FA8543C/72A96C0D4FA8543C: error sending to agent: Inappropriate ioctl for device
gpg: error building skey array: Inappropriate ioctl for device
gpg: error reading '/tmp/git-private.key': Inappropriate ioctl for device
gpg: import from '/tmp/git-private.key' failed: Inappropriate ioctl for device
gpg: Total number processed: 0
gpg:               imported: 1 …
Run Code Online (Sandbox Code Playgroud)

ioctl gnupg renovate

9
推荐指数
1
解决办法
6285
查看次数