Frage

Ich habe einen neuen Toshiba Satellite Pro S300 Laptop (mit Windows XP), die ein 3D-Beschleunigungsmesser für HDD Schutz Sport. Ich möchte in die Daten von diesem Sensor gesendet erschließen. Ältere Toshiba Laptop / hatte Tabletten eine DLL, auf die zugegriffen werden, um die Beschleunigungsdaten zu extrahieren. Leider hat das S300 nicht scheinen, um diese DLL zu haben (Die DLL-Hack an anderer Stelle wurde dokumentiert, zum Beispiel hier ).

Die HDD Protection-App (die eine nette 3D-Visualisierung einer rotierenden Festplatte hat, die mit der Laptop-Position und Bewegung synchron dreht) scheint nicht auf irgendwelchen „non-standard“ / custom DLLs abhängen (nach Dependency Walker) . Es scheint, dass die Daten entweder über einen Dienst zugegriffen werden und / oder durch einen Sys Gerätetreiber. Ich denke, dass ich es geschafft, die entsprechenden Dateien zu identifizieren, aber ich habe keine Ahnung, wie zu finden, Name, Zugang, Last (oder „auseinanderbauen“) die entsprechenden Funktionen.

Wie kann ich erkennen und verwenden, um die Daten des Beschleunigungsmessers?

War es hilfreich?

Lösung

Ich habe in der Lage, es zu bekommen mit diesem Code zu arbeiten (auf einem 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);
}

Es ist vielleicht nicht sehr hübsch noch sein, aber wir können anfangen zu spielen:)

Ich benutzte die TPCHCTL.dll, die mit dem Toshiba Hardware Monitor kommt dies, um herauszufinden, btw.

Andere Tipps

Im Allgemeinen Ihre Werkzeuge sind:

  • Sysinternals Process Monitor - können Sie einen allgemeinen Überblick geben von was Toshiba Prozess tut., welche Geräte es öffnet (Createfile) und die I / O-Steuerungsanforderungen macht (DeviceIoControl)
  • ein Disassembler - mein Favorit wäre IDA

Vielleicht haben Sie ja Glück und finden heraus, dass Toshiba Prozess zusätzliche Debug-Informationen enthält, die IDA glücklich Gebrauch machen würde. Dann mit allen verfügbaren Informationen, man müsste Sinn der Dinge auf eigene Faust machen.

Viel Glück!

Für das Protokoll, sie habe gerade reichte ein eng verwandtes Thema in Gecko (Firefox et. al. Satz von Anwendungen) Beschleunigungsaufnehmer Unterstützung, deren Unterstützung für mehrere Geräte könnten mit der nächsten großen Version versenden kann. : -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top