访问东芝笔记本电脑加速计设备驱动程序

时间:2009-07-09 19:40:48

标签: device-driver accelerometer drivers kmdf

我有一台新的东芝Satellite Pro S300笔记本电脑(运行Windows XP),它配备了3D加速度计,用于硬盘保护。我想点击这个传感器发送的数据。 较旧的东芝笔记本电脑/平板电脑有一个可以访问的DLL来提取加速度数据。不幸的是,S300似乎没有这个DLL(DLL hack已在别处记录,例如here)。

HDD保护应用程序(具有与笔记本电脑的位置和动作同步旋转的旋转HDD的可爱3D可视化)似乎不依赖于任何“非标准”/自定义DLL(根据DependencyWalker) 。 似乎通过服务和/或通过.sys设备驱动程序访问数据。我想我设法识别相关文件,但我不知道如何查找,命名,访问,加载(或“反汇编”)相关功能。

如何发现和使用加速度计数据?

3 个答案:

答案 0 :(得分:3)

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

  • Sysinternals Process Monitor - 可以概括介绍东芝的流程:它打开的设备(CreateFile)以及它发出的I / O控制请求(DeviceIoControl)。
  • 一个反汇编程序 - 我最喜欢的是IDA

您可能很幸运,并发现东芝的流程包含IDA乐意使用的额外调试信息。然后,利用所有可用的信息,您必须自己理解事物。

祝你好运!

答案 1 :(得分:1)

为了记录,我只是filed a tightly related issue进入Gecko(Firefox等人的应用程序集)加速度计支持,它对几个设备的支持可能能够与下一个主要版本一起提供。 : - )

答案 2 :(得分:1)

我已经能够使用此代码(在Toshiba 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来解决这个问题,顺便说一句。