能力值:
( LV9,RANK:280 )
2 楼
给对应的设备驱动发请求呗。如果你说设备驱动是如何识别硬件的。。那你得问厂商
能力值:
( LV5,RANK:60 )
3 楼
这些请求有没有规定好的协议呢 或者windows是不是封装了API?
能力值:
( LV4,RANK:40 )
4 楼
每个硬件出厂之前都会把,硬件信息固化在ROM里的,程序直接去取就可以了,操作系统也是到硬件ROM里面取的。windows一般都会取出来放注册表里面的,我们编程一般去注册表去就可以了。
能力值:
( LV2,RANK:10 )
5 楼
通过Windows系统提供的WMI服务,可以查到
几乎你能想到的任何硬件、软件的状态和信息。
能力值:
( LV5,RANK:60 )
6 楼
请问ROM中的信息要如何去读 去获取呢
能力值:
( LV5,RANK:60 )
7 楼
WMI是通过注册表实现的 想要越过注册表并不难 所以我想在最底层实现信息的修改
能力值:
( LV5,RANK:60 )
8 楼
cpu是cpuid指令。
硬盘是用ioctl,比如可以读取厂商信息,磁盘序列号等,这个是工业界的ATA/APAPI标准
HANDLE hPhysicalDrive = NULL;
WCHAR wszDriveName[MAX_PATH]={0};
(void)StringCchPrintfW(wszDriveName,
_countof(wszDriveName),
L"\\\\.\\PhysicalDrive%d",
uDiskNumber);
hPhysicalDrive = CreateFileW(wszDriveName,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
if (hPhysicalDrive == INVALID_HANDLE_VALUE)
{
}
DWORD dwBytesReturned = 0;
// Get SMART version information
GETVERSIONINPARAMS VersionParams;
ZeroMemory(&VersionParams, sizeof(VersionParams));
if (!DeviceIoControl(hPhysicalDrive,
SMART_GET_VERSION,
NULL,
0,
(LPVOID)&VersionParams,
(DWORD)sizeof(VersionParams),
&dwBytesReturned,
NULL))
{
}
if (VersionParams.bIDEDeviceMap > 0)
{
BYTE btIdOutCmd[sizeof(SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE - 1] = {0};
// Setup SMART request
SENDCMDINPARAMS InParams;
ZeroMemory(&InParams, sizeof(InParams));
InParams.cBufferSize = IDENTIFY_BUFFER_SIZE;
InParams.irDriveRegs.bFeaturesReg = 0;
InParams.irDriveRegs.bSectorCountReg = 1;
InParams.irDriveRegs.bSectorNumberReg = 1;
InParams.irDriveRegs.bCylLowReg = 0;
InParams.irDriveRegs.bCylHighReg = 0;
InParams.irDriveRegs.bDriveHeadReg = (BYTE)(SMART_BASE_DRIVE_HEAD | ((uDiskNumber % 2) << 4));
InParams.irDriveRegs.bCommandReg = ID_CMD;
InParams.bDriveNumber = (BYTE)uDiskNumber;
// Get SMART information
if (DeviceIoControl(hPhysicalDrive,
SMART_RCV_DRIVE_DATA,
(LPVOID)&InParams,
sizeof(SENDCMDINPARAMS) - 1,
(LPVOID)&btIdOutCmd,
sizeof(SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE - 1,
&dwBytesReturned,
NULL) != FALSE)
{
}
}
CloseHandle(hPhysicalDrive); 网卡没搞过
能力值:
( LV2,RANK:10 )
9 楼
网卡也可以通过上述驱动设备来读取!
能力值:
( LV9,RANK:270 )
10 楼
应用层用API比较方便。
1. CPU,cpuid(8楼)
2. 硬盘,kernel32.CreateFile/kernel32.DeviceIoControl(8楼)
3. 显卡,读注册表
4. 网卡,iphlpapi.GetAdaptersInfo
底层驱动级的请楼下回答。
能力值:
( LV5,RANK:60 )
11 楼
显卡只能读注册表吗 用DeviceIoControl不行吗
能力值:
( LV2,RANK:10 )
12 楼
有两种方法:一种是搜索物理内存 0x000F0000-0x000FFFFF,找到EPS表之后,再通过它读取SMBIOS的数据结构表就行;另外一种是直接去注册表中的Local machine中去读取。两种方法读取的值可能会不一样。使用第一种方法要注意,在使用最新的win10纪念版时,检测出来的主板ID可能会发生变化,第二种方法则不会存在这种情况。
能力值:
( LV2,RANK:10 )
13 楼
注册表读取,设备请求读取
能力值:
( LV2,RANK:10 )
14 楼
额。。。我好想理解错了,@MistHill说的对
能力值:
( LV2,RANK:10 )
15 楼
显卡可以用CUDA来获取信息
能力值:
( LV3,RANK:30 )
16 楼
底层驱动级的表示原理是一样,只不过是底层的API和调用汇编更方便点。。。
能力值:
( LV2,RANK:10 )
17 楼
简洁明了。
能力值:
( LV2,RANK:10 )
18 楼
同问 驱动应该要在哪个环节下.
修改硬件信息好呢.
当然.不hook ssdt不触发pg 最好...
v校前段时间成提到说可以做到.
然而还没找出这种哪改好...
能力值:
( LV2,RANK:10 )
19 楼
我觉得应该读ROM吧
能力值:
( LV5,RANK:78 )
20 楼
默默的觉得wmi 最方便。。不过 跟你需求不太相关。。
能力值:
( LV5,RANK:60 )
21 楼
就是HOOK硬件通讯的捏个XXXIOXXX的捏个API就好了
能力值:
( LV2,RANK:10 )
22 楼
问题就是这个点..
这个api是属于ssdt的...
驱动下hook这个api.会触发pg..
所以...好头疼.
能力值:
( LV5,RANK:60 )
23 楼
用VT 或者老外貌似有一个过掉PG的东西 不过怎么说呢 都不是特别好的解决方案
能力值:
( LV2,RANK:10 )
24 楼
vt兼容性又是个问题.(好吧,其实是不会)
过pg的更是...
可不想写出只对某个系统能用的东西..这不符合也不是编程爱好者的想法.
要说"达到目的就行"这种话..
那硬编码多好.~缺点大家也都知道
能力值:
( LV5,RANK:60 )
25 楼
据说老外的捏个可以过掉WIN7-WIN10 具体如何实现就不知道了 在破解这块就不要把代码想的太美好了 因为没有代码没有框架 实施也是比较随意一些吧 总之不管什么方法 可以达到目的就算是成功了嘛 能够达到目的并且很稳定那就算是完美了