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程序中,你可以根据需要调用`GetHardDriveSerialNumber`函数,传入驱动器字母(如'A'表示'C盘'),来获取对应硬盘的序列号。这个函数可以支持各种版本的Windows操作系统,因为它依赖于Windows API,这些API...
在C#编程中,获取硬盘序列号通常涉及到操作系统级别的交互,这可以通过调用Windows API(应用程序接口)来实现。在给定的场景中,我们关注的是如何使用C#通过系统API获取硬盘序列号,这个过程涉及到对硬件设备的低...
本文将详细讨论如何使用C语言在Linux和Windows操作系统中获取CPU序列号、硬盘序列号、网卡信息(包括网卡名称、IP地址、MAC地址以及网络连接状态)。 首先,我们来探讨CPU序列号的获取。在Windows系统中,可以使用...
Ioctl系统调用流程是Linux操作系统中的一种系统调用机制,用于控制设备文件的行为。该机制通过系统调用函数sys_ioctl来实现,下面将详细介绍ioctl系统调用流程。 一、系统调用框架 在Linux操作系统中,每个系统...
在Linux系统中,获取硬件设备的信息是常见的任务之一,其中包括获取硬盘和U盘的序列号。这些信息在设备管理、故障排查、数据安全等方面都具有重要作用。本文将详细讲解如何通过C语言源码来实现这一功能,以标题中的`...
在IT领域,尤其是在系统管理和软件开发中,有时我们需要获取计算机硬件的特定信息,例如硬盘物理序列号。硬盘序列号是每个硬盘独特的标识符,对于跟踪设备、验证软件许可证或者进行故障排查都非常重要。本文将详细...
获取硬盘序列号在某些软件开发场景中是必要的,例如系统管理、设备追踪或防盗保护。易语言通过调用系统API函数或者自定义的库文件,可以实现对硬盘序列号的读取。 在压缩包内,"取硬盘序列号.e" 文件是易语言的工程...
本文将详细讲解如何使用C语言在Linux和Windows操作系统下获取CPU序列号、硬盘序列号以及网卡的相关信息,如网卡名称、IP地址、MAC地址和网络连接状态。 首先,让我们关注CPU序列号的获取。在Windows系统中,可以...
在Linux系统中,SCSI硬盘的驱动主要通过内核模块实现。其中最关键的两个模块分别是`scsi_mod.o`(SCSI核心模块)和`sd_mod.o`(SCSI硬盘驱动模块)。这些模块通过相互协作,共同完成SCSI硬盘的识别、初始化和数据...
在VB6.0环境下,开发人员经常需要获取计算机硬件的相关信息,其中硬盘序列号是一个常见的需求,例如用于软件授权验证或者设备唯一标识。本篇将详细介绍如何使用VB6.0来读取硬盘序列号,并结合提供的代码进行解析。 ...
在Delphi中获取计算机硬件信息(如硬盘序列号、CPU号、BIOS号、网卡号等)通常涉及到与底层硬件和操作系统接口的交互。这些信息可以通过调用Windows API函数来实现。具体来说,可以使用设备控制(DeviceIoControl)...
获取硬盘序列号通常需要用到操作系统提供的API,例如在Windows中,可以使用`Win32_DiskDrive` WMI类,或者使用`DeviceIoControl`函数配合`IOCTL_DISK_GET_DRIVE_GEOMETRY_EX`控制代码。在C语言中,这可能涉及到...
在VC++编程环境中,获取硬盘序列号是一项常见的需求,特别是在软件授权、系统识别或数据安全等领域。硬盘序列号是每个硬盘制造商在生产过程中赋予的独特标识,通常存储在硬盘的固件区域。本篇将深入探讨如何使用VC++...
标题中的“通过smart获取硬盘序列号等信息的C++源码”指的是利用SMART(Self-Monitoring, Analysis, and Reporting Technology)技术来读取硬盘的详细信息,包括但不限于硬盘序列号。SMART是一种内置在现代硬盘驱动...
在Windows下,可以通过`CreateFile`打开`\\.\PhysicalDriveX`(X为硬盘编号),然后使用`DeviceIoControl`函数传递`IOCTL_STORAGE_QUERY_PROPERTY`控制代码来获取硬盘属性,包括序列号。在Linux中,可以读取`/dev/...
在这段代码中,使用Linux下的相关库函数来访问硬盘设备(如`/dev/sda`),调用系统调用`ioctl()`来获取硬盘序列号。 - 这段C代码应包含对错误处理的考虑,例如在打开设备文件失败或无法获取序列号时应返回相应的...
在Windows操作系统中,硬盘序列号是一个独特的标识符,用于区分不同的硬盘驱动器。MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,它为开发者提供了构建Windows应用程序的框架,包括用户界面、文件...
在IT领域,获取硬盘序列号是一项常见的操作,特别是在系统管理和软件开发中。硬盘序列号是硬盘制造商赋予每个硬盘的独特标识,用于区分不同的硬盘。在本文中,我们将详细探讨如何使用C++编程语言来获取硬盘的序列号...
在Windows操作系统中,通过编程方式获取硬盘序列号通常会涉及到对系统API的调用。 MSDN(Microsoft Developer Network)是微软提供的一份详尽的技术资源库,包含了Windows API的详细文档和示例代码。在这个场景中,...
在C语言中,获取硬盘序列号通常涉及操作系统级别的系统调用或者使用特定的库函数,例如Windows API。在Windows环境下,可以使用DeviceIoControl函数配合IOCTL_STORAGE_QUERY_PROPERTY控制代码来获取硬盘信息,其中就...