DeviceIoControl错误代码ERROR_CRC [问题点数:50分]

Bbs1
本版专家分:0
结帖率 50%
Bbs1
本版专家分:0
通过DeviceIoControl获取U盘或移动硬盘的出品商、制造商和版本号等信息
本文通过DeviceIoControl获取插入计算机的USB设备的vender、producter和version
驱动开发(8)处理设备I/O控制函数DeviceIoControl
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:n在上面的两篇博文中,介绍了IRP与派遣函数,以及我们通过了一个例子“磁盘设备的绝对读写”来演示了在应用程序中是如何向一个设备发出I/O请求的。这篇博文将演示在驱动程序中处理一个非常简单的I/O请求——由DeviceIoControl这个Win32API经过一系列的调用,在内核中
DeviceIoControl
DeviceIoControl范例 IOCTL_INTERNAL_USB_CYCLE_PORT
通过DeviceIoControl获取真实网卡地址
我们可以通过DeviceIoControl接口与内核驱动通信来获取真实网卡以及当前网卡的地址。n首先包含头文件n#include n // 网卡标识,xp下可以在注册表下对应位置找到,本例: n // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\2\ServiceName nn HA
使用DeviceIoControl进行通信(直接方式)
一个WDM驱动,然后caller使用DeviceIoControl进行和驱动的通信。输出buffer使用METHOD_IN_DIRECT进行数据传输。
应用层与驱动层通信DeviceIoControl
驱动层与应用层通信是通过DeviceIoControl,rn首先驱动层要实现:rnpDriverObject->DriverUnload = MyDriverUnload;rnpDriverObject->MajorFunction[IRP_MJ_CREATE] = MyCreate;rnpDriverObject->MajorFunction[IRP_MJ_CLOSE] = MyClose;rn
查看DeviceIoControl控制码的值
VC++在使用DeviceIoControl函数时可以直接使用控制码的代号,VB(或者其它语言)就没这么方便了。本程序可以根据控制码的代号得到控制码的16进制值。
设备驱动函数deviceiocontrol实战实例
可以获取硬盘、光盘、软盘等设备的具体信息
DeviceIoControl读取无线网卡mac完整工程实例
DeviceIoControl CreateFile DeviceIoControl读取无线网卡mac完整工程实例 方便大家学习,如果还是看不懂,可以给我发邮件,帮你们解决
Ring3层通过直接扇区读写来修改文件,用到DeviceIoControl和FSCTL_GET_RETRIEVAL_POINTERS
通过扇区读写文件,类似于机器狗,但是是Ring3层实现的
DeviceIoControl解读
DeviceIoControl的技术应用,我刚从网上下来的,非常好的语言
C++获取电脑MAC/CPU/BIOS/硬盘等硬件信息
用C++语言实现获取电脑MAC/CPU/BIOS/硬盘序列号等硬件信息,在VC6和VS2010开发环境下编译通过,完整源码。
C++获取SMART信息
1. SMART信息介绍nS.M.A.R.T. 全称是“Self-Monitoring,Analysis and Reporting Technology”,中文意思是“自我监测分析与报告技术”,它可以对硬盘的温度、内部电路、盘片表面介质材料等进行监测,力求及时分析出硬盘可能发出的问题,并发出警告,从而保护数据不受损失。SMART在96年已经成为硬盘存储行业的一个技术标准,主流硬盘企业均支持此技术...
hook更改硬盘序列号 转载
在驱动层hook ZwDeviceIoControlFile,当有请求获取硬盘物理SN时,返回指定SN,从而达到模拟硬盘物理SN的效果. 本工具包含源码,可自行编译.
实战DeviceIoControl
实战DeviceIoControl教你如何运用实战DeviceIoControl函数读取硬件信息
HookdiskID_硬盘ID修改 程序
HookdiskID_硬盘ID修改,用来修改硬盘信息,可以重复试用软件了
IoctlDecoder
DeviceIoControl Decoder
举并读出USB设备的VID,PID信息
我完善了DDK里面的StorageEnum的例程,可以枚举并读出USB设备的VID,PID信息(可参看附件中的图片storageNum.JPG),关键点是ClassGuid的定义,这个可是困扰N多人的问题哦。
读取硬盘信息,包括硬盘型号,厂商,容量等
读取硬盘信息,包括硬盘型号,厂商,容量,缓存大小,序列号等信息
获取硬盘序列号,搞了半天,看来不行了
using System; using System.Drawing; using System.IO; using System.Runtime.InteropServices; using System.Security; using System.Text; //using Sanxing.Share.Properties; //Download by http://www.codefans.net namespace YPH { /// /// 执行需要调用 Win32 API 的操作辅助类。 /// [SuppressUnmanagedCodeSecurity()] public static partial class Win32 { #region 方法 /// /// 执行获取当前运行的操作系统版本。 /// /// 的值之一,他表示当前运行的操作系统版本。 private static Platform GetCurrentPlatform() { OperatingSystem os = Environment.OSVersion; Platform pt; switch (os.Platform) { case (PlatformID.Win32Windows): // Win95, Win98 or Me switch (os.Version.Minor) { case (0): // 95 pt = Platform.Windows95; break; case (10): // 98 if (os.Version.Revision.ToString() == "2222A") pt = Platform.Windows982ndEdition; else pt = Platform.Windows98; break; case (90): // winme pt = Platform.WindowsME; break; default: // Unknown pt = Platform.UnKnown; break; } break; case (PlatformID.Win32NT): //Win2k or Xp or 2003 switch (os.Version.Major) { case (3): pt = Platform.WindowsNT351; break; case (4): pt = Platform.WindowsNT40; break; case (5): if (os.Version.Minor == 0) pt = Platform.Windows2000; else if (os.Version.Minor == 1) pt = Platform.WindowsXP; else if (os.Version.Minor == 2) pt = Platform.Windows2003; else pt = Platform.UnKnown; break; default: pt = Platform.UnKnown; break; } break; case (PlatformID.WinCE): // WinCE pt = Platform.WindowsCE; break; case (PlatformID.Win32S): case (PlatformID.Unix): default: pt = Platform.UnKnown; break; } return pt; } /// /// 表示操作系统平台。 /// private enum Platform : byte { /// /// Windows 95 操作系统. /// Windows95, /// /// Windows 98 操作系统. /// Windows98, /// /// Windows 98 第二版操作系统. /// Windows982ndEdition, /// /// Windows ME 操作系统. /// WindowsME, /// /// Windows NT 3.51 操作系统. /// WindowsNT351, /// /// Windows NT 4.0 操作系统. /// WindowsNT40, /// /// Windows 2000 操作系统. /// Windows2000, /// /// Windows XP 操作系统. /// WindowsXP, /// /// Windows 2003 操作系统. /// Windows2003, /// /// Windows CE 操作系统. /// WindowsCE, /// /// 操作系统版本未知。 /// UnKnown } /// /// 表示IDE设备错误状态代码的常量与数值的对应。 /// /// 其数值与常量定义在 WinIoCtl.h 文件中。 private enum DriverError : byte { /// /// 设备无错误。 /// SMART_NO_ERROR = 0, // No error /// /// 设备IDE控制器错误。 /// SMART_IDE_ERROR = 1, // Error from IDE controller /// /// 无效的命令标记。 /// SMART_INVALID_FLAG = 2, // Invalid command flag /// /// 无效的命令数据。 /// SMART_INVALID_COMMAND = 3, // Invalid command byte /// /// 缓冲区无效(如缓冲区为空或地址错误)。 /// SMART_INVALID_BUFFER = 4, // Bad buffer (null, invalid addr..) /// /// 设备编号错误。 /// SMART_INVALID_DRIVE = 5, // Drive number not valid /// /// IOCTL错误。 /// SMART_INVALID_IOCTL = 6, // Invalid IOCTL /// /// 无法锁定用户的缓冲区。 /// SMART_ERROR_NO_MEM = 7, // Could not lock user's buffer /// /// 无效的IDE注册命令。 /// SMART_INVALID_REGISTER = 8, // Some IDE Register not valid /// /// 无效的命令设置。 /// SMART_NOT_SUPPORTED = 9, // Invalid cmd flag set /// /// 指定要查找的设别索引号无效。 /// SMART_NO_IDE_DEVICE = 10 } public static void ChangeByteOrder(byte[] charArray) { byte temp; for (int i = 0; i < charArray.Length; i += 2) { temp = charArray[i]; charArray[i] = charArray[i + 1]; charArray[i + 1] = temp; } } /// /// 根据指定的设备信息生成设备的详细信息。 /// /// 一个 /// private static HDiskInfo GetHardDiskInfo(IdSector phdinfo) { HDiskInfo hdd = new HDiskInfo(); hdd.ModuleNumber = Encoding.ASCII.GetString(phdinfo.sModelNumber).Trim(); hdd.Firmware = Encoding.ASCII.GetString(phdinfo.sFirmwareRev).Trim(); hdd.SerialNumber = Encoding.ASCII.GetString(phdinfo.sSerialNumber).Trim(); hdd.Capacity = phdinfo.ulTotalAddressableSectors / 2 / 1024; hdd.BufferSize = phdinfo.wBufferSize / 1024; return hdd; } /// /// 获取在NT平台下指定序列号的硬盘信息。 /// /// 物理磁盘的数量。 /// public static HDiskInfo GetHddInfoNT(byte driveIndex) { GetVersionOutParams vers = new GetVersionOutParams(); SendCmdInParams inParam = new SendCmdInParams(); SendCmdOutParams outParam = new SendCmdOutParams(); uint bytesReturned = 0; // 使用 Win2000 或 Xp下的方法获取硬件信息 // 获取设备的句柄。 IntPtr hDevice = CreateFile(string.Format(@"\\.\PhysicalDrive{0}", driveIndex), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero); // 开始检查 if (hDevice == IntPtr.Zero) throw new UnauthorizedAccessException("执行 Win32 API 函数 CreateFile 失败。"); if (0 == DeviceIoControl(hDevice, SMART_GET_VERSION, IntPtr.Zero, 0, ref vers, (uint)Marshal.SizeOf(vers), ref bytesReturned, IntPtr.Zero)) { CloseHandle(hDevice); //throw new IOException(string.Format(Resources.Win32_DeviceIoControlErr, "SMART_GET_VERSION")); } // 检测IDE控制命令是否支持 if (0 == (vers.fCapabilities & 1)) { CloseHandle(hDevice); //throw new IOException(Resources.Win32_DeviceIoControlNotSupport); } // Identify the IDE drives if (0 != (driveIndex & 1)) inParam.irDriveRegs.bDriveHeadReg = 0xb0; else inParam.irDriveRegs.bDriveHeadReg = 0xa0; if (0 != (vers.fCapabilities & (16 >> driveIndex))) { // We don't detect a ATAPI device. CloseHandle(hDevice); //throw new IOException(Resources.Win32_DeviceIoControlNotSupport); } else inParam.irDriveRegs.bCommandReg = 0xec; inParam.bDriveNumber = driveIndex; inParam.irDriveRegs.bSectorCountReg = 1; inParam.irDriveRegs.bSectorNumberReg = 1; inParam.cBufferSize = 512; if (0 == DeviceIoControl( hDevice, SMART_RCV_DRIVE_DATA, ref inParam, (uint)Marshal.SizeOf(inParam), ref outParam, (uint)Marshal.SizeOf(outParam), ref bytesReturned, IntPtr.Zero)) { CloseHandle(hDevice); //throw new IOException( // string.Format(Resources.Win32_DeviceIoControlErr, "SMART_RCV_DRIVE_DATA")); } CloseHandle(hDevice); ChangeByteOrder(outParam.bBuffer.sModelNumber); ChangeByteOrder(outParam.bBuffer.sSerialNumber); ChangeByteOrder(outParam.bBuffer.sFirmwareRev); return GetHardDiskInfo(outParam.bBuffer); } #endregion #region Win32 /// /// 取得指定窗口的系统菜单的句柄。 /// /// 指向要获取系统菜单窗口的 句柄。 /// 获取系统菜单的方式。设置为 true,表示接收原始的系统菜单,否则设置为 false 。 /// 指向要获取的系统菜单的 句柄。 [DllImport("user32.dll", SetLastError = true)] private static extern IntPtr GetSystemMenu(IntPtr hwnd, bool bRevert); /// /// 获取指定的菜单中条目(菜单项)的数量。 /// /// 指向要获取菜单项数量的系统菜单的 句柄。 /// 菜单中的条目数量 [DllImport("user32.dll", SetLastError = true)] private static extern int GetMenuItemCount(IntPtr hMenu); /// /// 删除指定的菜单条目。 /// /// 指向要移除的菜单的 。 /// 欲改变的菜单条目的标识符。 /// /// 非零表示成功,零表示失败。 /// /// 如果在 中使用了 ,则在 参数表示菜单项的索引; /// 如果在 中使用了 MF_BYCOMMAND,则在 中使用菜单项的ID。 /// [DllImport("user32.dll", SetLastError = true)] private static extern int RemoveMenu(IntPtr hMenu, int uPosition, int uFlags); /// /// 关闭一个指定的指针对象指向的设备。。 /// /// 要关闭的句柄 对象。 /// 成功返回 0 ,不成功返回非零值。 [DllImport("kernel32.dll", SetLastError = true)] private static extern int CloseHandle(IntPtr hObject); /// /// 执行打开/建立资源的功能。 /// /// 指定要打开的设备或文件的名称。 /// /// Win32 常量,用于控制对设备的读访问、写访问或读/写访问的常数。内容如下表: /// /// /// 名称 /// 说明 /// /// /// GENERIC_READ指定对设备进行读取访问。 /// /// /// GENERIC_WRITE指定对设备进行写访问。 /// /// 0如果值为零,则表示只允许获取与一个设备有关的信息。 /// /// /// /// 指定打开设备时的文件共享模式 /// /// Win32 常量,指定操作系统打开文件的方式。内容如下表: /// /// /// 名称说明 /// /// CREATE_NEW /// 指定操作系统应创建新文件。如果文件存在,则抛出 异常。 /// /// CREATE_ALWAYS指定操作系统应创建新文件。如果文件已存在,它将被改写。 /// /// /// /// /// /// 使用函数打开的设备的句柄。 /// /// 本函数可以执行打开或建立文件、文件流、目录/文件夹、物理磁盘、卷、系统控制的缓冲区、磁带设备、 /// 通信资源、邮件系统和命名管道。 /// [DllImport("kernel32.dll", SetLastError = true)] private static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile); /// /// 对设备执行指定的操作。 /// /// 要执行操作的设备句柄。 /// Win32 API 常数,输入的是以 FSCTL_ 为前缀的常数,定义在 /// WinIoCtl.h 文件内,执行此重载方法必须输入 SMART_GET_VERSION 。 /// 当参数为指针时,默认的输入值是 0 。 /// 输入缓冲区的字节数量。 /// 一个 GetVersionOutParams ,表示执行函数后输出的设备检查。 /// 输出缓冲区的字节数量。 /// 实际装载到输出缓冲区的字节数量。 /// 同步操作控制,一般不使用,默认值为 0 。 /// 非零表示成功,零表示失败。 [DllImport("kernel32.dll", SetLastError = true)] private static extern int DeviceIoControl(IntPtr hDevice, uint dwIoControlCode, IntPtr lpInBuffer, uint nInBufferSize, ref GetVersionOutParams lpOutBuffer, uint nOutBufferSize, ref uint lpBytesReturned, [Out] IntPtr lpOverlapped); /// /// 对设备执行指定的操作。 /// /// 要执行操作的设备句柄。 /// Win32 API 常数,输入的是以 FSCTL_ 为前缀的常数,定义在 /// WinIoCtl.h 文件内,执行此重载方法必须输入 SMART_SEND_DRIVE_COMMAND 或 SMART_RCV_DRIVE_DATA 。 /// 一个 SendCmdInParams 结构,它保存向系统发送的查询要求具体命令的数据结构。 /// 输入缓冲区的字节数量。 /// 一个 SendCmdOutParams 结构,它保存系统根据命令返回的设备相信信息二进制数据。 /// 输出缓冲区的字节数量。 /// 实际装载到输出缓冲区的字节数量。 /// 同步操作控制,一般不使用,默认值为 0 。 /// 非零表示成功,零表示失败。 [DllImport("kernel32.dll", SetLastError = true)] private static extern int DeviceIoControl(IntPtr hDevice, uint dwIoControlCode, ref SendCmdInParams lpInBuffer, uint nInBufferSize, ref SendCmdOutParams lpOutBuffer, uint nOutBufferSize, ref uint lpBytesReturned, [Out] IntPtr lpOverlapped); #endregion #region 结构 /// /// 保存当前计算机 IDE 设备(硬盘)的硬件信息的结构。 /// [Serializable] public struct HDiskInfo { /// /// 硬盘型号。 /// public string ModuleNumber; /// /// 硬盘的固件版本。 /// public string Firmware; /// /// 硬盘序列号。 /// public string SerialNumber; /// /// 硬盘容量,以M为单位。 /// public uint Capacity; /// /// 设备缓存大小(以M为单位)。 /// public int BufferSize; } /// /// 表示使用 DeviceIoControl 函数时保存返回的驱动器硬件信息的结构 /// /// >此数据结构定义在 WinIoCtl.h 文件名为 _GETVERSIONINPARAMS 结构中。 [StructLayout(LayoutKind.Sequential, Pack = 1)] private struct GetVersionOutParams { /// /// IDE设备的二进制硬件版本。 /// public byte bVersion; /// /// IDE设备的二进制修订版本。 /// public byte bRevision; /// /// 此值操作系统没有使用,使用此数据结构时被设置为 0 。 /// public byte bReserved; /// /// IDE设备的二进制映射。 /// public byte bIDEDeviceMap; /// /// IDE设备的二进制容量数据。 /// public uint fCapabilities; /// /// 保留内容,不使用。 /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public uint[] dwReserved; // For future use. } /// /// 一个数据结构,表示使用 DeviceIoControl 函数时发送到操作系统中的命令数据结构 SendCmdInParams 的成员结构。 /// 它表示要获取磁盘设备性能参数的具体定义规则。 /// /// /// 此数据结构定义在 WinIoCtl.h 文件名为 _IDEREGS 中。 [StructLayout(LayoutKind.Sequential, Pack = 1)] private struct IdeRegs { /// /// 发送到操作系统的注册命令,此为系统的 SMART Command 。 /// public byte bFeaturesReg; /// /// 获取IDE设备扇区数。 /// public byte bSectorCountReg; /// /// 获取IDE设备编号。 /// public byte bSectorNumberReg; /// /// 获取IDE设备低端柱面值。 /// public byte bCylLowReg; /// /// 获取IDE设备高端柱面值。 /// public byte bCylHighReg; /// /// 获取IDE设备的头信息。 /// public byte bDriveHeadReg; /// /// 获取IDE设备的真正命令。 /// public byte bCommandReg; /// /// 保留内容,此值应设置为 0 。 /// public byte bReserved; } /// /// 保存执行 DeviceIoControl 函数时向系统提交的执行操作命令。 /// /// /// 此数据结构定义在 WinIoCtl.h 文件名为 _SENDCMDINPARAMS 中。 [StructLayout(LayoutKind.Sequential, Pack = 1)] private struct SendCmdInParams { /// /// 输出的数据缓冲大小。 /// public uint cBufferSize; /// /// 保存向系统发送的磁盘设备命令的数据结构。 /// public IdeRegs irDriveRegs; /// /// 希望系统控制的物理磁盘的编号。 /// public byte bDriveNumber; /// /// 保留的数据,不使用。 /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] bReserved; /// /// 保留的数据,不使用。 /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public uint[] dwReserved; /// /// 保存当前 SendCmdInParams 结构填充数据后的大小。 /// public byte bBuffer; } /// /// 当执行 DeviceIoControl 函数后系统返回的 SendCmdOutParams 结构中 /// 保存磁盘设备当前错误信息的数据结构。 /// /// /// /// 此数据结构定义在 WinIoCtl.h 文件名为 _DRIVERSTATUS 中。 /// /// <em>错误代码</em>如下表: /// /// /// 名称 /// 说明 /// SMART_NO_ERROR = 0 /// 没有错误。 /// SMART_IDE_ERROR = 1 /// IDE控制器错误。 /// SMART_INVALID_FLAG = 2 /// 发送的命令标记无效。 /// SMART_INVALID_COMMAND = 3 /// 发送的二进制命令无效。 /// SMART_INVALID_BUFFER = 4 /// 二进制缓存无效(缓存为空或者无效地址)。 /// SMART_INVALID_DRIVE = 5 /// 物理驱动器编号无效。 /// SMART_INVALID_IOCTL = 6 /// 无效的IOCTL。 /// SMART_ERROR_NO_MEM = 7 /// 使用的缓冲区无法锁定。 /// SMART_INVALID_REGISTER = 8 /// IDE注册命令无效。 /// SMART_NOT_SUPPORTED = 9 /// 命令标记设置无效。 /// SMART_NO_IDE_DEVICE = 10 /// 发送的物理驱动器索引超过限制。 /// /// /// [StructLayout(LayoutKind.Sequential, Pack = 1)] private struct DriverStatus { /// /// 如果检查的IDE设备发生错误,保存的<em>错误代码</em>,0 表示没有错误。 /// public byte bDriverError; /// /// IDE设备被注册的错误内容。 /// public byte bIDEStatus; /// /// 保留的数据,不使用。 /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] bReserved; /// /// 保留的数据,不使用。 /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public uint[] dwReserved; } /// /// 表示当执行 DeviceIoControl 函数后保存系统根据查询命令返回的磁盘设备信息的数据结构。 /// [StructLayout(LayoutKind.Sequential, Pack = 1)] private struct SendCmdOutParams { /// /// 表示所有二进制信息的缓存大小。 /// public uint cBufferSize; /// /// 表示查询到设备的错误信息状态。 /// public DriverStatus DriverStatus; /// /// 表示系统返回的设备硬件信息的二进制数据结构。 /// public IdSector bBuffer; } /// /// 当执行 DeviceIoControl 函数后系统返回的 SendCmdOutParams 结构中 /// 保存磁盘设备的硬件信息的数据结构。 /// /// [StructLayout(LayoutKind.Sequential, Pack = 1, Size = 512)] private struct IdSector { /// /// 设备通用配置信息。 /// public ushort wGenConfig; /// /// 设备的柱面数。 /// public ushort wNumCyls; /// /// 保留内容,不使用。 /// public ushort wReserved; /// /// 设备的磁头数目。 /// public ushort wNumHeads; /// /// 设备的磁道数目。 /// public ushort wBytesPerTrack; /// /// 设备的扇区数目。 /// public ushort wBytesPerSector; /// /// 设备厂商设定的扇区磁道数目。 /// public ushort wSectorsPerTrack; /// /// 设备的出品厂商名称。 /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public ushort[] wVendorUnique; /// /// 设备出品厂商的全球唯一编码。 /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] public byte[] sSerialNumber; /// /// 设备的缓存类型。 /// public ushort wBufferType; /// /// 设备缓存容量(单位是byte)。 /// public ushort wBufferSize; /// /// 设备的错误检查和纠正(ECC)数据的大小。 /// public ushort wECCSize; /// /// 设备的固件版本。 /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] sFirmwareRev; /// /// 设备的型号。 /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)] public byte[] sModelNumber; /// /// 设备厂商名称的扩展内容(如果有)。 /// public ushort wMoreVendorUnique; /// /// 设备双指令输入输出模式。 /// public ushort wDoubleWordIO; /// /// 设备的容量大小(单位Byte)。 /// public ushort wCapabilities; /// /// 第一个保留的内容,不使用。 /// public ushort wReserved1; /// /// 设备的PIO模式巡道时间。 /// public ushort wPIOTiming; /// /// 设备DMA 模式巡道时间。 /// public ushort wDMATiming; /// /// 设备的总线类型,如SCSI,IDE等。 /// public ushort wBS; /// /// 设备的当前柱面数量。 /// public ushort wNumCurrentCyls; /// /// 设备当前磁头数量。 /// public ushort wNumCurrentHeads; /// /// 设备的当前扇区的磁道数量。 /// public ushort wNumCurrentSectorsPerTrack; /// /// 设备的当前扇区容量(单位byte)。 /// public uint ulCurrentSectorCapacity; /// /// 多扇区读写模式支持。 /// public ushort wMultSectorStuff; /// /// 用户是否可自定义扇区地址(LBA模式)支持。 /// public uint ulTotalAddressableSectors; /// /// 单指令DMA模式。 /// public ushort wSingleWordDMA; /// /// 多指令DMA模式。 /// public ushort wMultiWordDMA; /// /// 保留内容,不使用。 /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public byte[] bReserved; } /// /// /// [StructLayout(LayoutKind.Sequential)] public struct RECT { /// /// /// /// /// /// /// public RECT(int left, int top, int right, int bottom) { this.left = left; this.top = top; this.right = right; this.bottom = bottom; } /// /// /// /// public RECT(Rectangle r) { left = r.Left; top = r.Top; right = r.Right; bottom = r.Bottom; } /// /// /// public int left; /// /// /// public int top; /// /// /// public int right; /// /// /// public int bottom; /// /// /// /// /// /// /// /// public static RECT FromXYWH(int x, int y, int width, int height) { return new RECT(x, y, x + width, y + height); } /// /// /// public Size Size { get { return new Size(right - left, bottom - top); } } } /// /// /// [StructLayout(LayoutKind.Sequential)] public sealed class SCROLLINFO { public SCROLLINFO() { this.cbSize = Marshal.SizeOf(typeof(SCROLLINFO)); } public SCROLLINFO(int mask, int min, int max, int page, int pos) { this.cbSize = Marshal.SizeOf(typeof(SCROLLINFO)); this.fMask = mask; this.nMin = min; this.nMax = max; this.nPage = page; this.nPos = pos; } public int cbSize; public int fMask; public int nMin; public int nMax; public int nPage; public int nPos; public int nTrackPos; } #endregion #region 常量 /// /// Win32 API 常数,指示在使用 函数时指定使用索引数而不是使用ID。 /// private const int MF_BYPOSITION = 0x00000400; private const uint FILE_SHARE_READ = 0x00000001; private const uint FILE_SHARE_WRITE = 0x00000002; private const uint FILE_SHARE_DELETE = 0x00000004; private const uint SMART_GET_VERSION = 0x00074080; // SMART_GET_VERSION private const uint SMART_SEND_DRIVE_COMMAND = 0x0007c084; // SMART_SEND_DRIVE_COMMAND private const uint SMART_RCV_DRIVE_DATA = 0x0007c088; // SMART_RCV_DRIVE_DATA private const uint GENERIC_READ = 0x80000000; private const uint GENERIC_WRITE = 0x40000000; private const uint CREATE_NEW = 1; private const uint OPEN_EXISTING = 3; private const uint BUFFER_SIZE = 512; private static readonly Platform currentOs; #endregion } }
实战DeviceIoControl全集
网上有很多版本的《实战DeviceIoControl》,我这里做了一下整理,希望能对大家有所帮助。
GetLastError()== ERROR_CRC 为什么?怎么办????
我在向USB设备传输消息。为什么GetLastError()== ERROR_CRC,我该怎么办?GetLastError代码如下:rn if (!WriteFile(m_hPort, pData, nSize, &dwWritten, &osWrite)) rn rn if (GetLastError() == ERROR_IO_PENDING) rn rn //rn // write is delayedrn //rn dwRes = WaitForSingleObject( osWrite.hEvent, 1000);rn switch(dwRes)rn rn //rn // write event setrn //rn case WAIT_OBJECT_0:rn SetLastError(ERROR_SUCCESS);rn if (!GetOverlappedResult( m_hPort, &osWrite, &dwWritten, FALSE))rn rn DWORD LastErr = GetLastError();rn if (LastErr == ERROR_CRC)rn rn //Why come into this branch,What should I do?????rn rn .........................................rnrn分不够,另开帖给分。rn
FTP错误代码FTP错误代码FTP错误代码
FTP<em>错误代码</em>FTP<em>错误代码</em>FTP<em>错误代码</em>FTP<em>错误代码</em>FTP<em>错误代码</em>
实战DeviceIoControl:通过API访问设备驱动程序
实战DeviceIoControl:通过API访问设备驱动程序
Create File
CreateFile,ReadFile,WriteFile,DeviceIoControl,CloseHandle函数说明
卸载,弹出,安全移除驱动器 的区别
http://blog.warmcolor.net/?p=3510rnrnrn 卸载,弹出,安全移除驱动器 的区别rnrnrn 其实有一些Linux基础的从英文就能很清楚的知道是什么意思了,rnrnrn 卸载(umount) rnrnrn 只是解除挂载,可以直接重新挂载,rn简单来说,在软件上把访问设备中存储介质的链接去掉了,rnrnrn 一般来说,此时拔掉设备对其中的数据是安全的,rn因为数据读
Windows硬盘等存储设备读写查询分区格式化(二)
弄了一段时间Windows系统API,关于磁盘自定义设计,Windows的很多接口是不方便做软件设计的。在Windows系统上设备与文件操作区别还是非常大的。为了能够像Linux那样把存储设备当做文件来操作,我对WriteFile,ReadFile,SetFilePointerEx等函数进行了重新封装。nn 关于存储设备,比如硬盘,U盘,SD卡,TF卡等设备在Linux与Window...
Win64 驱动内核编程-2.基本框架(安装.通讯.HelloWorld)
驱动安装,通讯,Hello Worldrn开发驱动的简单流程是这样,开发驱动安装程序,开发驱动程序,然后安装程序(或者其他程序)通过通讯给驱动传命令,驱动接到之后进行解析并且执行,然后把执行结果返回。rn驱动程序Hello Worldrn之前总结了驱动环境的搭建,这里就直接继续之前搭建好的环境创建项目,打开vs2015创建一个驱动项目:rnrnrnrnrn写代码之前先配置下编译选项:rnrnrn然
ADSL错误代码ADSL错误代码
ADSL<em>错误代码</em>ADSL<em>错误代码</em>ADSL<em>错误代码</em>ADSL<em>错误代码</em>
yt888常见错误代码
YT888<em>错误代码</em>YT888<em>错误代码</em>YT888<em>错误代码</em>YT888<em>错误代码</em>
第18章LCD设备驱动之帧缓冲设备驱动的读写、mmap和ioctl函数
18.8 帧缓冲设备驱动的读写、mmap和ioctl函数     虽然帧缓冲设备的 file_operations 中的成员函数,即文件操作函数由内核在 fbmem.c 文件中实现,一般不再需要驱动工程师修改,但分析这些函数对于巩固字符设备驱动的知识以及加深对帧缓冲设备驱动的理解是大有好处的。    代码清单 18.12所示为 帧缓冲设备驱动的文件操作读写函数的源代码。代码清单 18.12 帧缓冲...
deviceiocontrol
最近作一个手机和pc的通信 pc是个stardard devicernrn所以只要用<em>deviceiocontrol</em>发送scsi指令就可以rnrn于是有个问题rnrn对于<em>deviceiocontrol</em>的参数为什么很多资料上都使用SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER这个结构体, rn为什么我们不自己定义自己的结构体呢rn这么做有什么好处呢?
API的HOOK拦截
API的HOOK拦截实用型
diskhook模拟硬盘物理序列号
模拟硬盘物理序列号,一般软件的注册码都和它有关
http错误代码含义
http<em>错误代码</em>含义 http<em>错误代码</em>含义 http<em>错误代码</em>含义 http<em>错误代码</em>含义 http<em>错误代码</em>含义
根据驱动路径获取无线网卡的mac
//// test.cpp : Defines the entry point for the console application.n#pragma oncen#include &amp;lt;winsock2.h&amp;gt;n#include &quot;winnt.h&quot;n#include &quot;windef.h&quot;nn#include &amp;lt;string&amp;gt;n#include &amp;lt;atlstr.h&amp;gt;...
实战DeviceIoControl:通过API访问设备驱动程序.rar
实战DeviceIoControl:通过API访问设备驱动程序
Winsock错误代码 Winsock错误代码
Winsock<em>错误代码</em> Winsock<em>错误代码</em> Winsock<em>错误代码</em>
Symbian错误代码.txt
Symbian<em>错误代码</em>Symbian<em>错误代码</em>Symbian<em>错误代码</em>
C#程序,读取U盘盘符
C#程序,当U盘插入后,读取U盘盘符!只需刷新一下,可以扩展,读取U盘里信息。
vs编译器常见错误代码及解析
编译器常见<em>错误代码</em>及解析编译器常见<em>错误代码</em>及解析编译器常见<em>错误代码</em>及解析编译器常见<em>错误代码</em>及解析
http响应码 错误代码
http响应码 <em>错误代码</em>http响应码 <em>错误代码</em>http响应码 <em>错误代码</em>http响应码 <em>错误代码</em>
Windows 错误代码查询系统
Windows <em>错误代码</em>查询系统 Windows <em>错误代码</em>查询系统 Windows <em>错误代码</em>查询系统 Windows <em>错误代码</em>查询系统
windows 拨号网络错误代码查询
windows 拨号网络<em>错误代码</em>查询 windows 拨号网络<em>错误代码</em>查询windows 拨号网络<em>错误代码</em>查询windows 拨号网络<em>错误代码</em>查询
短信下行错误代码,包括全网移动错误代码、广东移动错误代码、全网联通错误代码
短信下行<em>错误代码</em>,包括全网移动<em>错误代码</em>、广东移动<em>错误代码</em>、全网联通<em>错误代码</em>等
KernelIoControl和DeviceIoControl的区别
简单讲述了下KernelIoControl和DeviceIoControl的区别,及其使用方法
DeviceIoControl详解及例程
硬件设备读写的基本操作DeviceIoControl,入门级教程
MySQL错误代码查询
MySQL<em>错误代码</em>查询 MySQL<em>错误代码</em>查询 MySQL<em>错误代码</em>查询
内存错误代码解释
内存<em>错误代码</em>解释 内存<em>错误代码</em>解释 内存<em>错误代码</em>解释
HDHook(附源码)HookAPI改变硬盘串号和MAC地址
VC++源码 一个使用detours来HookAPI的简单例子 DeviceIoControl获取硬盘串号 GetAdaptersInfo获取MAC Hook这两个API改变获取的硬盘串号和MAC地址 HDHook工程 生成dll GetHDDSN工程 载入生成的dll 获取硬盘串号和MAC地址 需要自行安装detours
调用DeviceIoControl错误,错误代码:连接系统上的设备没有发挥作用
调用DeviceIoControl错误,<em>错误代码</em>:连接系统上的设备没有发挥rn哪位大神知道,告诉我一下,折磨我好久了rn USB_HUB_NAME USBName;rn BOOL GetReuslt = DeviceIoControl(DevHandle,IOCTL_INTERNAL_USB_GET_HUB_NAME,NULL,rn 0,&USBName,sizeof(USBName),&output,(LPOVERLAPPED)NULL);
DeviceIoControl访问OID_802_11_BSSID_LIST老是失败,错误代码31,求高手指点
DeviceIoControl访问OID_802_11_BSSID_LIST老是失败,<em>错误代码</em>31,网卡应该是好的,还连着无线网,怎么改?rncreatefileA成功的rnoidcode = OID_802_11_BSSID_LIST ;rn memset( m_pBSSIDList, 0, sizeof( NDIS_802_11_BSSID_LIST) * NUMBEROF_BSSIDS) ;rn oidcode = OID_802_11_BSSID_LIST_SCAN ;rnrn DeviceIoControl( m_handle,rn IOCTL_NDIS_QUERY_GLOBAL_STATS,rn &oidcode,rn sizeof( oidcode),rn ( ULONG *) NULL,rn 0,rn &bytesreturned,rn NULL) ;rnrn rn //Sleep( 2000) ;// i dont know...its seems we give him some time to let me knowrnrn memset( m_pBSSIDList, 0, sizeof( NDIS_802_11_BSSID_LIST) * NUMBEROF_BSSIDS) ;rn oidcode = OID_802_11_BSSID_LIST ;rn if( DeviceIoControl( m_handle,rn IOCTL_NDIS_QUERY_GLOBAL_STATS,rn &oidcode,rn sizeof( oidcode),rn ( ULONG *) m_pBSSIDList,rn sizeof( NDIS_802_11_BSSID_LIST) * NUMBEROF_BSSIDS,rn &bytesreturned,rn NULL) == 0) rn rnrn [color=#FF0000]int fak = GetLastError(); //返回31/color]rn rn // List failedrn return NULL;rn rn elsern rn return m_pBSSIDList;rn rn
SocketError
SocketError <em>错误代码</em>查询SocketError <em>错误代码</em>查询SocketError <em>错误代码</em>查询
IOCTL_SCSI_PASS_THROUGH_DIRECT的使用对设备进行操作
与U盘通信一般要先获取U盘设备句柄。可用nHANDLE CreateFile(n LPCTSTR lpFileName, // file namen DWORD dwDesiredAccess, // access moden DWORD dwShareMode,
Windows错误代码查询器
<em>错误代码</em>查询器<em>错误代码</em>查询器
VBScript错误代码及对应解释大全
VBScript<em>错误代码</em>及对应解释大全 VBScript<em>错误代码</em>及对应解释大全 VBScript<em>错误代码</em>及对应解释大全 VBScript<em>错误代码</em>及对应解释大全
Oracle常见错误代码的分析与解决
Oracle常见<em>错误代码</em>的分析与解决Oracle常见<em>错误代码</em>的分析与解决Oracle常见<em>错误代码</em>的分析与解决Oracle常见<em>错误代码</em>的分析与解决
Visual C++ Tips: 查询计算机主板的序列号
以下函数将通过命令行的方式查询计算机主板的序列号。一般情况下通过这个小程序可以得到主板序列号,但是如果OEM厂商没有在BIOS中写入主板序列号,那么我们可能不到主板序列号。
硬盘SMART信息数据结构
在Windows环境下我知道有两种方法可以读取硬盘SMART信息:一是通过DeviceIoControl这个Win API,还有就是通过wql语句查询。这两种方法已经在网上被说烂,本文主要要记录一个找到死都找不到的东西:无论是通过上面Api还是wql查询都会返回两个512字节的数据,一个记录Attributes,还有一个是SMART信息中的THRESHOLDS(对,它们是分开存储的)。那么这两个5
ORACLE常见错误代码的分析与解决
ORACLE常见<em>错误代码</em>的分析与解决ORACLE常见<em>错误代码</em>的分析与解决ORACLE常见<em>错误代码</em>的分析与解决ORACLE常见<em>错误代码</em>的分析与解决
实战DeviceIoControl.rar
实战DeviceIoControl。 Aida整理。希望与大家多交流驱动开发经验。
VC实现弹出CD
用CreateFile&#40;&#41;打开设备,DeviceIOControl()弹出cd
驱动中以文件句柄形式调用其他驱动程序(异步调用一)
EXE部分rn#include n#include n#include n#include "Ioctl.h"nnnnint main (void)n{n char linkname[]="\\\\.\\HelloDDKB";n HANDLE hDevice = CreateFileA(linkname,n GENERIC_READ | GENERIC_WRITE,n 0,n NULL,n
windows错误代码详解
windows<em>错误代码</em>详解 windows<em>错误代码</em>详解
戴尔服务器错误代码
戴尔服务器<em>错误代码</em>2011 戴尔服务器<em>错误代码</em>
Asdl错误代码含义
Asdl<em>错误代码</em>含义.txtAsdl<em>错误代码</em>含义.txt
C语言常见错误代码释义
C语言常见<em>错误代码</em>释义C语言常见<em>错误代码</em>释义C语言常见<em>错误代码</em>释义
SMG,SPMS错误代码说明
SMG,SPMS<em>错误代码</em>说明 广东联通SMG网关<em>错误代码</em>对照表 短信网关定义<em>错误代码</em>
Oracle常见错误代码
Oracle常见<em>错误代码</em> Oracle常见<em>错误代码</em>   以下表格中收集了Oracle中常见<em>错误代码</em>。
PPPOE拨号连接错误代码PPPOE拨号连接错误代码
PPPOE拨号连接<em>错误代码</em>PPPOE拨号连接<em>错误代码</em>PPPOE拨号连接<em>错误代码</em>
ATLS拧紧枪错误代码
ATLS拧紧枪<em>错误代码</em>;ATLS拧紧枪<em>错误代码</em>;ATLS拧紧枪<em>错误代码</em>; 大多数工业必备文档;
HTTP错误大全,HTTP错误代码
HTTP错误大全,HTTP<em>错误代码</em>。 HTTP错误大全,HTTP<em>错误代码</em>。 HTTP错误大全,HTTP<em>错误代码</em>。
IBM800技术支持的错误代码对照表
IBM800技术支持的<em>错误代码</em>对照表IBM800技术支持的<em>错误代码</em>对照表IBM800技术支持的<em>错误代码</em>对照表
symbian os 错误代码.rar
symbian os <em>错误代码</em> C++ symbian os <em>错误代码</em> C++ symbian os <em>错误代码</em> C++
DELL错误代码意义列表
DELL<em>错误代码</em>意义列表,DELL<em>错误代码</em>意义列表,DELL<em>错误代码</em>意义列表
VB.NET 获取驱动信息
在.NET框架中本身就提供了一套API接口,包含在System.ServiceProcess中n你可能会有疑惑,驱动与系统服务是不一样的 对的它们的确不一样、这样说n吧、驱动是跟随系统最先启动的程序,当然这个前提必须建立在你的驱动安n装在%WINDIR%\[32/64]\Drivers中,然后是系统组件包括系统服务两个部分、n.NET可以开发系统服务但不可以开发驱动这是因为,在驱动随系统映
金蝶K3报错补丁错误代码430(1AEH) Source KISEBSGLVouch
<em>错误代码</em>430(1AEH) Source KISEBSGLVouch<em>错误代码</em>430(1AEH) Source KISEBSGLVouch
IIS错误代码大汇总
IIS<em>错误代码</em>大汇总IIS<em>错误代码</em>大汇总
Intermec PX4i错误代码
Intermec PX4i<em>错误代码</em>,所有Intermec PX4i<em>错误代码</em>的信息都在里面。
oracle常见错误代码的分析与解决
oracle常见<em>错误代码</em>的分析与解决,oracle常见<em>错误代码</em>的分析与解决
dell错误代码
dell <em>错误代码</em> 可以参考下载 对于查找<em>错误代码</em>非常好用
asp.net中IIS错误代码集合
IIS<em>错误代码</em>集合 自己整理的部分<em>错误代码</em>说明
Dell服务器错误代码及说明
Dell服务器<em>错误代码</em>及说明 <em>错误代码</em>意思说明,处理建议。
DeviceIoControl 的问题
C++中rnrn我用 DeviceIoControl 传递一个用 new 分配的内存给驱动程序, 驱动程序可以读取,但是不能写入rnrn请教各位是什么地方有问题?rnrnBOOL retCode = DeviceIoControl(driverHandle, //驱动的句柄rn code, //消息代码rn NULL, //InBuffer 不用rn 0, //InBuffer Size 不用rn buffer, //使用 new 分配的内存rn count, //该内存大小rn &bytesReturned,rn NULL);rnrn是不是要使用 NonPagedPool 分配?
DeviceIOControl 求救!!!!
最近要做一个分区调整的工具,在MSDN上找到可以用DeviceIoControl实现。rnControl Code分别是:rnFSCTL_SHRINK_VOLUME,FSCTL_EXTEND_VOLUME。(如果我没理解错的话)rnrn但是经过几番尝试,始终无法成功调用,不知道是否有哪位兄弟有这方面的经验,能否给一些指导。rn如果有源代码能参考一下也行,谢谢。rn邮箱:robin_luo@hotmail.comrnrn已经几天都没什么进展了,有点急,谢谢。
广东联通SMG网关错误代码对照表
<em>错误代码</em>_tosp(广东联通SMG网关<em>错误代码</em>对照表).xls
JCL错误代码汇总
JCL<em>错误代码</em>汇总,各种JCL编译过程中的出现的<em>错误代码</em>。
STEAM解决错误108,105等
解决steam进入个人信息<em>错误代码</em>108,<em>错误代码</em>105等问题。
Microsoft_VBScript_编译器错误代码含义大全
编译器<em>错误代码</em>含义大全,认识<em>错误代码</em>,更有效修正错误。
backblaze 2018年磁盘smart属性数据集
https://f001.backblazeb2.com/file/Backblaze-Hard-Drive-Data/data_Q3_2018.zipnhttps://f001.backblazeb2.com/file/Backblaze-Hard-Drive-Data/data_Q2_2018.zipnhttps://f001.backblazeb2.com/file/Backblaze-Ha...
较全的ADSL拨号错误代码解析
较全的ADSL拨号<em>错误代码</em>解析较全的ADSL拨号<em>错误代码</em>解析较全的ADSL拨号<em>错误代码</em>解析
MM7移动协议的协议和错误代码
MM7移动协议的协议和<em>错误代码</em> MM7移动协议的协议和<em>错误代码</em> MM7移动协议的协议和<em>错误代码</em> 全集
DeviceIoControl问题
驱动:rnRtlInitUnicodeString(&FilDevName,L"\\Device\\TdiFilter");rnRtlInitUnicodeString(&FilDevLink,L"\\DosDevices\\TdiFilter");rn//Create Devicernstatus = IoCreateDevice(pDriObj,0,NULL,FILE_DEVICE_UNKNOWN,0,TRUE,&g_DevObj);rn//Create SymbolicLinkrnstatus = IoCreateSymbolicLink(&FilDevLink,&FilDevName);rn应用程序:rnhFile = CreateFile("\\\\.\\TdiFilter",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);rn怎么hFIle总是INVALID_HANDLE_VALUE
驱动DeviceIOControl
有没有什么工具可以把驱动支持的IOControlCode列出来?
DeviceIoControl failed
DeviceIoControl failed. Error = 0xa1010017.rnFailed to complete ioctrl 0x00120808, input = 00000000/0, output = 028EFF44/24.rnDeviceIoControl failed. Error = 0xa1010017.rnFailed to complete ioctrl 0x00120808, input = 00000000/0, output = 028EFF44/24.rnDeviceIoControl failed. Error = 0xa1010017.rnFailed to complete ioctrl 0x00120808, input = 00000000/0, output = 028EFF44/24.rnDeviceIoControl failed. Error = 0xa1010017.rnFailed to complete ioctrl 0x00120808, input = 00000000/0, output = 028EFF44/24.rnrn请高手指教,我程序运行完后没有错误提示。但在VC输出栏中有上述信息(非常多)。请大家指教,以上是什么问题。
晴窗中文大侠4.2注册机下载
晴窗中文大侠4.2注册机,提供注册码 晴窗中文大侠4.2注册机,提供注册码 晴窗中文大侠4.2注册机,提供注册码 相关下载链接:[url=//download.csdn.net/download/YUGUOTIANQING1233210/2300569?utm_source=bbsseo]//download.csdn.net/download/YUGUOTIANQING1233210/2300569?utm_source=bbsseo[/url]
vist窗体,用vb做出vist效果窗体下载
vist窗体,用vb做出vist效果窗体 vist窗体,用vb做出vist效果窗体 vist窗体,用vb做出vist效果窗体 vist窗体,用vb做出vist效果窗体 相关下载链接:[url=//download.csdn.net/download/wdtcom/2588570?utm_source=bbsseo]//download.csdn.net/download/wdtcom/2588570?utm_source=bbsseo[/url]
MySQL5.1中文帮助文档下载
MySQL5.1中文帮助文档,学习MySQL的最佳资料。 相关下载链接:[url=//download.csdn.net/download/fanfanfan111/2617379?utm_source=bbsseo]//download.csdn.net/download/fanfanfan111/2617379?utm_source=bbsseo[/url]
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 怎么学习互联网大数据 村干部学习大数据心得
我们是很有底线的