الوصول إلى برنامج تشغيل جهاز تسارع الكمبيوتر المحمول Toshiba

StackOverflow https://stackoverflow.com/questions/1106042

سؤال

لدي جهاز كمبيوتر محمول جديد Toshiba Satellite Pro S300 (تشغيل نظام التشغيل Windows XP) الرياضي الذي يسبق تسارع ثلاثي الأبعاد لحماية الأقراص الصلبة. أرغب في الاستفادة من البيانات المرسلة بواسطة هذا المستشعر. كان لدى Toshiba Laptop / أجهزة الكمبيوتر المحمول الأقدم التي يمكن الوصول إليها لاستخراج بيانات التسارع. لسوء الحظ، لا يبدو أن S300 يحتوي على DLL هذا (تم توثيق DLL Hack في مكان آخر، على سبيل المثال هنا).

لا يبدو أن تطبيق حماية الأقراص الصلبة (الذي يحتوي على تصور ثلاثي الأبعاد لطيف ل HDD الدوارة الذي يدور في مزامنة موقع وحركة الكمبيوتر المحمول) يعتمد على أي dlls "غير القياسية" / dlls مخصصة (وفقا ل decorencywalker). يبدو أنه يتم الوصول إلى البيانات إما من خلال خدمة و / أو من خلال برنامج تشغيل الجهاز .sys. أعتقد أنني تمكنت من تحديد الملفات ذات الصلة، لكن ليس لدي أي فكرة عن كيفية العثور على واسم أو الوصول أو الحمل (أو "تفكيك") الوظائف ذات الصلة.

كيف يمكنني اكتشاف واستخدام بيانات التسارع واستخدامها؟

هل كانت مفيدة؟

المحلول

لقد تمكنت من الحصول عليها للعمل مع هذا الرمز (على 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 التي تأتي مع شاشة توشيبا للأجهزة لمعرفة ذلك، راجع للشغل.

نصائح أخرى

بشكل عام، ستكون أدواتك:

  • مراقبة عملية SYSINTERNALS. - هل يمكن أن تعطيك نظرة عامة عامة على ما تقوم به عملية توشيبا: الأجهزة التي تفتح (createfile) والتي تطلب التحكم في الإدخال / الإخراج التي تصنعها (deviceiocontrol).
  • disarsembler - المفضلة لدي سيكون إيدا

قد تكون محظوظا واكتشف أن عملية توشيبا تتضمن معلومات تصحيح إضافية والتي ستستخدمها IDA بسعادة. ثم، مع كل المعلومات المتاحة، يجب عليك فهم الأشياء بنفسك.

حظ سعيد!

للسجل، أنا فقط قدمت مشكلة ذات صلة بإحكام في أبو بريص (فايرفوكس وآخرون. مجموعة من التطبيقات) دعم مقياس التسارع، الذي قد يكون دعمه للعديد من الأجهزة قادرا على الشحن مع الإصدار الرئيسي التالي. :-)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top