`
mmdev
  • 浏览: 13243065 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

在内核模块中通过系统调用ioctl获取ATA/SCSI硬盘序列号

阅读更多

open, read, ioctl 这些系统调用本来是提供给用户空间的程序访问的,所以,对传递给它的参数,它默认会认为来自用户空间,在->write()函数中,为了保护内核空间,一般会用get_fs()得到的值来和USER_DS进行比较,从而防止用户空间程序“蓄意”破坏内核空间;

而现在要在内核空间使用系统调用,此时传递给->ioctl()的参数地址就是内核空间的地址了,在USER_DS之上(USER_DS ~ KERNEL_DS),如果不做任何其它处理,在ioctl()函数中,会认为该地址超过了USER_DS范围,所以会认为是用户空间的“蓄意破坏”,从而不允许进一步的执行; 为了解决这个问题; set_fs(KERNEL_DS);将其能访问的空间限制扩大到KERNEL_DS,这样就可以在内核顺利使用系统调用了!

以下是实现代码, dbg.h中主要是DBG_ERROR这些调试宏,所有不列出来了.

Makefile:

参考:
SCSI Inquiry Command
http://en.wikipedia.org/wiki/SCSI_Inquiry_Command
SCSI INQUIRY 命令的详细解说;

The sdparm utility
http://sg.danny.cz/sg/sdparm.html
lsscsi http://sg.danny.cz/scsi/lsscsi.html
The Linux sg3_utils package http://sg.danny.cz/sg/sg3_utils.html
linux下访问SCSI设备参数的几个工具, 对VPD pages有较详细的解说;

The Linux SCSI Generic (sg) HOWTO
http://www.tldp.org/HOWTO/SCSI-Generic-HOWTO/index.html
The Linux 2.4 SCSI subsystem HOWTO http://tldp.org/HOWTO/SCSI-2.4-HOWTO/index.html

分享到:
评论

相关推荐

    Delphi获取硬盘序列号(支持IDE和SCSI硬盘)

    在Delphi程序中,你可以根据需要调用`GetHardDriveSerialNumber`函数,传入驱动器字母(如'A'表示'C盘'),来获取对应硬盘的序列号。这个函数可以支持各种版本的Windows操作系统,因为它依赖于Windows API,这些API...

    c#通过系统api获取硬盘序列号

    在C#编程中,获取硬盘序列号通常涉及到操作系统级别的交互,这可以通过调用Windows API(应用程序接口)来实现。在给定的场景中,我们关注的是如何使用C#通过系统API获取硬盘序列号,这个过程涉及到对硬件设备的低...

    Linux和WindowsC语言获取(CPU序列号、硬盘序列号、网卡信息、IP地址、MAC地址、网卡是否插入网线)硬件信息源码

    本文将详细讨论如何使用C语言在Linux和Windows操作系统中获取CPU序列号、硬盘序列号、网卡信息(包括网卡名称、IP地址、MAC地址以及网络连接状态)。 首先,我们来探讨CPU序列号的获取。在Windows系统中,可以使用...

    ioctl系统调用流程

    Ioctl系统调用流程是Linux操作系统中的一种系统调用机制,用于控制设备文件的行为。该机制通过系统调用函数sys_ioctl来实现,下面将详细介绍ioctl系统调用流程。 一、系统调用框架 在Linux操作系统中,每个系统...

    linux下获取硬盘序列号、U盘序列号的C源码

    在Linux系统中,获取硬件设备的信息是常见的任务之一,其中包括获取硬盘和U盘的序列号。这些信息在设备管理、故障排查、数据安全等方面都具有重要作用。本文将详细讲解如何通过C语言源码来实现这一功能,以标题中的`...

    C#4种方式获取硬盘物理序列号

    在IT领域,尤其是在系统管理和软件开发中,有时我们需要获取计算机硬件的特定信息,例如硬盘物理序列号。硬盘序列号是每个硬盘独特的标识符,对于跟踪设备、验证软件许可证或者进行故障排查都非常重要。本文将详细...

    易语言源码取硬盘序列号.rar

    获取硬盘序列号在某些软件开发场景中是必要的,例如系统管理、设备追踪或防盗保护。易语言通过调用系统API函数或者自定义的库文件,可以实现对硬盘序列号的读取。 在压缩包内,"取硬盘序列号.e" 文件是易语言的工程...

    C语言获取硬件信息(CPU序列号,硬盘序列号,网卡IP、MAC地址、是否插入网线).zip

    本文将详细讲解如何使用C语言在Linux和Windows操作系统下获取CPU序列号、硬盘序列号以及网卡的相关信息,如网卡名称、IP地址、MAC地址和网络连接状态。 首先,让我们关注CPU序列号的获取。在Windows系统中,可以...

    scsi硬盘

    在Linux系统中,SCSI硬盘的驱动主要通过内核模块实现。其中最关键的两个模块分别是`scsi_mod.o`(SCSI核心模块)和`sd_mod.o`(SCSI硬盘驱动模块)。这些模块通过相互协作,共同完成SCSI硬盘的识别、初始化和数据...

    目前VB6.0读硬盘序列号最完美的代码

    在VB6.0环境下,开发人员经常需要获取计算机硬件的相关信息,其中硬盘序列号是一个常见的需求,例如用于软件授权验证或者设备唯一标识。本篇将详细介绍如何使用VB6.0来读取硬盘序列号,并结合提供的代码进行解析。 ...

    delphi_获取硬盘序列号、cpu号、bios号、网卡号

    在Delphi中获取计算机硬件信息(如硬盘序列号、CPU号、BIOS号、网卡号等)通常涉及到与底层硬件和操作系统接口的交互。这些信息可以通过调用Windows API函数来实现。具体来说,可以使用设备控制(DeviceIoControl)...

    c语言获取 CPU序列号(CPUID) 硬盘序列号 (vs2010工程)支持64位编译

    获取硬盘序列号通常需要用到操作系统提供的API,例如在Windows中,可以使用`Win32_DiskDrive` WMI类,或者使用`DeviceIoControl`函数配合`IOCTL_DISK_GET_DRIVE_GEOMETRY_EX`控制代码。在C语言中,这可能涉及到...

    vc 获取硬盘序列号

    在VC++编程环境中,获取硬盘序列号是一项常见的需求,特别是在软件授权、系统识别或数据安全等领域。硬盘序列号是每个硬盘制造商在生产过程中赋予的独特标识,通常存储在硬盘的固件区域。本篇将深入探讨如何使用VC++...

    通过smart获取硬盘序列号等信息的C++源码

    标题中的“通过smart获取硬盘序列号等信息的C++源码”指的是利用SMART(Self-Monitoring, Analysis, and Reporting Technology)技术来读取硬盘的详细信息,包括但不限于硬盘序列号。SMART是一种内置在现代硬盘驱动...

    C++获取电脑MAC/CPU/BIOS/硬盘等硬件信息

    在Windows下,可以通过`CreateFile`打开`\\.\PhysicalDriveX`(X为硬盘编号),然后使用`DeviceIoControl`函数传递`IOCTL_STORAGE_QUERY_PROPERTY`控制代码来获取硬盘属性,包括序列号。在Linux中,可以读取`/dev/...

    java 通过jni技术实现获取linux的硬盘序列号.pdf

    在这段代码中,使用Linux下的相关库函数来访问硬盘设备(如`/dev/sda`),调用系统调用`ioctl()`来获取硬盘序列号。 - 这段C代码应包含对错误处理的考虑,例如在打开设备文件失败或无法获取序列号时应返回相应的...

    MFC获取电脑硬盘序列号(源程序可运行)

    在Windows操作系统中,硬盘序列号是一个独特的标识符,用于区分不同的硬盘驱动器。MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,它为开发者提供了构建Windows应用程序的框架,包括用户界面、文件...

    获取硬盘序列号

    在IT领域,获取硬盘序列号是一项常见的操作,特别是在系统管理和软件开发中。硬盘序列号是硬盘制造商赋予每个硬盘的独特标识,用于区分不同的硬盘。在本文中,我们将详细探讨如何使用C++编程语言来获取硬盘的序列号...

    硬盘序列号的获取

    在Windows操作系统中,通过编程方式获取硬盘序列号通常会涉及到对系统API的调用。 MSDN(Microsoft Developer Network)是微软提供的一份详尽的技术资源库,包含了Windows API的详细文档和示例代码。在这个场景中,...

    获取硬盘序列号的C程序

    在C语言中,获取硬盘序列号通常涉及操作系统级别的系统调用或者使用特定的库函数,例如Windows API。在Windows环境下,可以使用DeviceIoControl函数配合IOCTL_STORAGE_QUERY_PROPERTY控制代码来获取硬盘信息,其中就...

Global site tag (gtag.js) - Google Analytics