Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Decompiled with JetBrains decompiler
- // Type: Keyboard_Core.KeyboardControl
- // Assembly: Keyboard_Core, Version=1.0.6131.2377, Culture=neutral, PublicKeyToken=null
- // MVID: 149D34D9-1EDF-455C-AB79-AE28152A6A4D
- // Assembly location: C:\Users\All Users\Lenovo\ImController\Plugins\ThinkKeyboardPlugin\x86\Keyboard_Core.dll
- using <CppImplementationDetails>;
- using Lenovo.Modern.Contracts.Keyboard;
- using System;
- using System.Threading;
- using ThinkPad;
- namespace Keyboard_Core
- {
- public class KeyboardControl
- {
- public unsafe uint GetKeyboardBackLightLevel(out int level)
- {
- ErrorCodeType errorCodeType = ErrorCodeType.Success;
- CKeyboardLight* ckeyboardLightPtr1 = (CKeyboardLight*) <Module>.@new(4U);
- CKeyboardLight* ckeyboardLightPtr2;
- // ISSUE: fault handler
- try
- {
- ckeyboardLightPtr2 = (IntPtr) ckeyboardLightPtr1 == IntPtr.Zero ? (CKeyboardLight*) 0 : <Module>.ThinkPad.CKeyboardLight.{ctor}(ckeyboardLightPtr1);
- }
- __fault
- {
- <Module>.delete((void*) ckeyboardLightPtr1);
- }
- KBDLIGHT_LEVEL kbdlightLevel;
- if (<Module>.ThinkPad.CKeyboardLight.GetLevel(ckeyboardLightPtr2, &kbdlightLevel) != 0)
- {
- level = (int) kbdlightLevel;
- if (kbdlightLevel == (KBDLIGHT_LEVEL) 0)
- errorCodeType = ErrorCodeType.NoCapability;
- }
- else
- errorCodeType = ErrorCodeType.Unknown;
- if ((IntPtr) ckeyboardLightPtr2 != IntPtr.Zero)
- {
- CKeyboardLight* ckeyboardLightPtr3 = ckeyboardLightPtr2;
- int num = 1;
- // ISSUE: cast to a function pointer type
- // ISSUE: function pointer call
- void* voidPtr = __calli((__FnPtr<void* (IntPtr, uint)>) *(int*) *(int*) ckeyboardLightPtr2)((uint) ckeyboardLightPtr3, (IntPtr) num);
- }
- return (uint) errorCodeType;
- }
- public unsafe uint GetKeyboardBackLightStatus(out int nStatus)
- {
- ErrorCodeType errorCodeType = ErrorCodeType.Success;
- CKeyboardLight* ckeyboardLightPtr1 = (CKeyboardLight*) <Module>.@new(4U);
- CKeyboardLight* ckeyboardLightPtr2;
- // ISSUE: fault handler
- try
- {
- ckeyboardLightPtr2 = (IntPtr) ckeyboardLightPtr1 == IntPtr.Zero ? (CKeyboardLight*) 0 : <Module>.ThinkPad.CKeyboardLight.{ctor}(ckeyboardLightPtr1);
- }
- __fault
- {
- <Module>.delete((void*) ckeyboardLightPtr1);
- }
- KBDLIGHT_STATUS kbdlightStatus;
- if (<Module>.ThinkPad.CKeyboardLight.GetStatus(ckeyboardLightPtr2, &kbdlightStatus) != 0)
- nStatus = (int) kbdlightStatus;
- else
- errorCodeType = ErrorCodeType.Unknown;
- if ((IntPtr) ckeyboardLightPtr2 != IntPtr.Zero)
- {
- CKeyboardLight* ckeyboardLightPtr3 = ckeyboardLightPtr2;
- int num = 1;
- // ISSUE: cast to a function pointer type
- // ISSUE: function pointer call
- void* voidPtr = __calli((__FnPtr<void* (IntPtr, uint)>) *(int*) *(int*) ckeyboardLightPtr2)((uint) ckeyboardLightPtr3, (IntPtr) num);
- }
- return (uint) errorCodeType;
- }
- public unsafe uint SetKeyboardBackLightStatus(int nStatus)
- {
- CKeyboardLight* ckeyboardLightPtr1 = (CKeyboardLight*) <Module>.@new(4U);
- CKeyboardLight* ckeyboardLightPtr2;
- // ISSUE: fault handler
- try
- {
- ckeyboardLightPtr2 = (IntPtr) ckeyboardLightPtr1 == IntPtr.Zero ? (CKeyboardLight*) 0 : <Module>.ThinkPad.CKeyboardLight.{ctor}(ckeyboardLightPtr1);
- }
- __fault
- {
- <Module>.delete((void*) ckeyboardLightPtr1);
- }
- <Module>.ThinkPad.CKeyboardLight.SetStatus(ckeyboardLightPtr2, (KBDLIGHT_STATUS) nStatus);
- if ((IntPtr) ckeyboardLightPtr2 != IntPtr.Zero)
- {
- CKeyboardLight* ckeyboardLightPtr3 = ckeyboardLightPtr2;
- int num = 1;
- // ISSUE: cast to a function pointer type
- // ISSUE: function pointer call
- void* voidPtr = __calli((__FnPtr<void* (IntPtr, uint)>) *(int*) *(int*) ckeyboardLightPtr2)((uint) ckeyboardLightPtr3, (IntPtr) num);
- }
- return 0;
- }
- public void StartBackgroundMonitor()
- {
- new Thread(new ThreadStart(KeyboardControl.MonitorThread)).Start();
- }
- public unsafe void StopBackgroundMonitor()
- {
- void* voidPtr1 = <Module>.OpenEventW(2031619U, 0, (char*) &<Module>.??_C@_1DE@LNFKCALF@?$AAL?$AAn?$AAv?$AA_?$AAS?$AAt?$AAo?$AAp?$AAB?$AAa?$AAc?$AAk?$AAg?$AAr?$AAo?$AAu?$AAn?$AAd?$AAM?$AAo?$AAn?$AAi?$AAt?$AAo?$AAr?$AA?$AA@);
- if ((IntPtr) voidPtr1 != IntPtr.Zero)
- <Module>.SetEvent(voidPtr1);
- void* voidPtr2 = <Module>.OpenEventW(2031619U, 0, (char*) &<Module>.??_C@_1DK@HIDMJOCE@?$AAL?$AAn?$AAv?$AA_?$AAB?$AAa?$AAc?$AAk?$AAg?$AAr?$AAo?$AAu?$AAn?$AAd?$AAM?$AAo?$AAn?$AAi?$AAt?$AAo?$AAr?$AAS?$AAt?$AAo?$AAp?$AAp?$AAe?$AAd?$AA?$AA@);
- if ((IntPtr) voidPtr2 == IntPtr.Zero)
- return;
- int num = (int) <Module>.WaitForSingleObject(voidPtr2, uint.MaxValue);
- <Module>.CloseHandle(voidPtr2);
- }
- private static unsafe void MonitorThread()
- {
- void* eventW = <Module>.CreateEventW((_SECURITY_ATTRIBUTES*) 0, 0, 0, (char*) &<Module>.??_C@_1DK@HIDMJOCE@?$AAL?$AAn?$AAv?$AA_?$AAB?$AAa?$AAc?$AAk?$AAg?$AAr?$AAo?$AAu?$AAn?$AAd?$AAM?$AAo?$AAn?$AAi?$AAt?$AAo?$AAr?$AAS?$AAt?$AAo?$AAp?$AAp?$AAe?$AAd?$AA?$AA@);
- CPMServiceEvent cpmServiceEvent;
- <Module>.ThinkPad.CPMServiceEvent.{ctor}(&cpmServiceEvent);
- // ISSUE: fault handler
- try
- {
- $ArrayType$$$BY01PAX arrayTypeBy01Pax;
- // ISSUE: explicit reference operation
- // ISSUE: cast to a reference type
- // ISSUE: explicit reference operation
- ^(int&) @arrayTypeBy01Pax = (int) <Module>.CreateEventW((_SECURITY_ATTRIBUTES*) 0, 0, 0, (char*) &<Module>.??_C@_1DE@LNFKCALF@?$AAL?$AAn?$AAv?$AA_?$AAS?$AAt?$AAo?$AAp?$AAB?$AAa?$AAc?$AAk?$AAg?$AAr?$AAo?$AAu?$AAn?$AAd?$AAM?$AAo?$AAn?$AAi?$AAt?$AAo?$AAr?$AA?$AA@);
- // ISSUE: cast to a reference type
- // ISSUE: explicit reference operation
- ^(int&) ((IntPtr) &arrayTypeBy01Pax + 4) = (int) <Module>.ThinkPad.CPMServiceEvent.GetHandleForMonitoringType(&cpmServiceEvent);
- while (true)
- {
- void* voidPtr;
- do
- {
- _PMSVC_TYPE1 pmsvcTypE1;
- int num1;
- // ISSUE: cast to a reference type
- // ISSUE: explicit reference operation
- // ISSUE: cast to a reference type
- // ISSUE: explicit reference operation
- do
- {
- int num2;
- do
- {
- num2 = (int) <Module>.WaitForMultipleObjects(2U, (void**) &arrayTypeBy01Pax, 0, 30000U);
- if (num2 == 0)
- goto label_7;
- }
- while (num2 != 1);
- // ISSUE: explicit reference operation
- // ISSUE: cast to a reference type
- // ISSUE: explicit reference operation
- ^(int&) @pmsvcTypE1 = 0;
- // ISSUE: cast to a reference type
- // ISSUE: initblk instruction
- __memset((_PMSVC_TYPE1&) ((IntPtr) &pmsvcTypE1 + 4), 0, 12);
- _PMSVC_TYPE2 pmsvcTypE2;
- // ISSUE: explicit reference operation
- // ISSUE: cast to a reference type
- // ISSUE: explicit reference operation
- ^(int&) @pmsvcTypE2 = 0;
- // ISSUE: cast to a reference type
- // ISSUE: initblk instruction
- __memset((_PMSVC_TYPE2&) ((IntPtr) &pmsvcTypE2 + 4), 0, 40);
- num1 = 0;
- <Module>.ThinkPad.CPMServiceEvent.GetTypeNotification(&cpmServiceEvent, &pmsvcTypE1, &pmsvcTypE2, &num1);
- }
- while (^(int&) ((IntPtr) &pmsvcTypE1 + 8) == 0 && ^(int&) ((IntPtr) &pmsvcTypE1 + 12) == 0 && num1 == 0);
- voidPtr = <Module>.OpenEventW(2031619U, 0, (char*) &<Module>.??_C@_1DI@LMBNLIJN@?$AAL?$AAn?$AAv?$AA_?$AAB?$AAa?$AAc?$AAk?$AAl?$AAi?$AAg?$AAh?$AAt?$AA_?$AAS?$AAt?$AAa?$AAt?$AAu?$AAs?$AAC?$AAh?$AAa?$AAn?$AAg?$AAe?$AAd?$AA?$AA@);
- }
- while ((IntPtr) voidPtr == IntPtr.Zero);
- <Module>.SetEvent(voidPtr);
- }
- label_7:
- // ISSUE: explicit reference operation
- // ISSUE: cast to a reference type
- // ISSUE: explicit reference operation
- <Module>.CloseHandle((void*) ^(int&) @arrayTypeBy01Pax);
- if ((IntPtr) eventW != IntPtr.Zero)
- <Module>.SetEvent(eventW);
- }
- __fault
- {
- // ISSUE: method pointer
- // ISSUE: cast to a function pointer type
- <Module>.___CxxCallUnwindDtor((__FnPtr<void (void*)>) __methodptr(ThinkPad.CPMServiceEvent.{dtor}), (void*) &cpmServiceEvent);
- }
- <Module>.ThinkPad.CPMServiceEvent.{dtor}(&cpmServiceEvent);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement