我有一个新的东芝卫星Pro S300笔记本电脑(运行Windows XP)哪些体育3D加速度计的硬盘的保护。我想来点击进入该数据发送过这个传感器。旧的东芝台笔记本电脑/片DLL,可以提取的加速度数据。不幸的是,S300似乎没有这DLL(DLL哈克已经记录在其他地方,例如 在这里,).

在硬盘的保护应用程序(其中有一个可爱的3D可视化的一个硬盘旋转,旋转,同步的笔记本电脑的位置和运动)似乎并不依赖于任何"非标准"的定Dll(根据DependencyWalker).它似乎是访问数据要么通过服务和/或通过一个.系统的设备司机。我认为我成功地确定相关文件,但我们不知道如何找到、名称、访问、负载(或"拆卸")有关的职能。

我怎么可以发现并使用的加速计数据?

有帮助吗?

解决方案

我已经能够得到它与此代码的工作(在东芝Satellite Pro的S300L-120,Windows 7中):

void ReadAccel(float a[3])
{
    HANDLE h = CreateFile(L"\\\\.\\TVALZ", GENERIC_ALL, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    struct dummy
    {
        unsigned long magic1; /* = 0x0000FE00 */
        unsigned long magic2; /* = 0x000000A6 */
        unsigned short x, y;
        unsigned long unknown, z;
        unsigned long direction;
    } d;
    memset(&d, 0, sizeof(d));
    unsigned long retlen;
    d.magic1 = 0x0000FE00;
    d.magic2 = 0xA6;
    d.direction = 0;

    DeviceIoControl(h, 0x222880, &d, sizeof(d), &d, sizeof(d), &retlen, NULL);
    d.magic1 = 0x0000FE00;
    d.direction = 1;
    Sleep(20); /* Doesn't seem to work without the wait */
    DeviceIoControl(h, 0x222880, &d, sizeof(d), &d, sizeof(d), &retlen, NULL);
    signed short x = (d.x & 0x7FFF) * (d.x & 0x8000?-1:1);
    signed short y = (d.y & 0x7FFF) * (d.y & 0x8000?-1:1);
    signed short z = (d.z & 0x7FFF) * (d.z & 0x8000?-1:1);
    a[2] = -(float)z * 9.8 / 205; /* this is just an estimate to go to SI units */
    a[1] = (float)y * 9.8 / 205;
    a[0] = (float)x * 9.8 / 205;
    CloseHandle(h);
}

这可能不是很漂亮,但我们可以开始游戏:)

我使用随附东芝硬件监视器TPCHCTL.dll算出这个,顺便说一句。

其他提示

一般来说,您的工具将是:

  • 微软过程监视器 -可以给你一个一般性概述的什么东芝的过程:哪些设备,它打开了(调用)和其I/O控制请它使(DeviceIoControl).
  • 一个拆卸器--我最喜欢的就是 IDA

你可能是幸运的,并找出那东芝的过程包括额外的"调试"的信息开发协会愉快地会使使用。然后,用所有可用的信息,你必须要使你自己的事情。

祝你好运!

有关记录,我只是提起紧密相关的问题到蛤蚧(火狐等人一套应用程序)加速的支持,它的几个设备的支持也许能下一个主要版本出货。 : - )

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top