代码之家  ›  专栏  ›  技术社区  ›  Adi Shavit

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

  •  2
  • Adi Shavit  · 技术社区  · 17 年前

    here ).

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

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

    3 回复  |  直到 17 年前
        1
  •  3
  •   Ilya    17 年前

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

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

        2
  •  1
  •   user188747 user188747    17 年前

    为了记录在案,我刚刚 filed a tightly related issue Gecko(Firefox et al.set of applications)的加速计支持,其对多种设备的支持可能会随下一个主要版本一起发布。:-)

        3
  •  1
  •   Pruyque    13 年前

    我已经能够让它与此代码一起工作(在东芝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);
    }
    

    它可能还不是很漂亮,但我们可以开始玩:)

    推荐文章