Если вы запускаете приложение с правами администратора в Vista, то работает ли оно?
Вы также можете создать COM-объект с повышенными привилегиями с помощью этого кода:
HRESULT __stdcall CreateElevatedComObject(HWND hwnd, REFCLSID rclsid, REFIID riid, __out IUnknown ** ppv)
{
OSVERSIONINFO ver={sizeof(ver)};
if (GetVersionEx(&ver) && ver.dwMajorVersion > 5)
{
BIND_OPTS3 bo;
WCHAR wszCLSID[50];
WCHAR wszMonikerName[300];
if (StringFromGUID2(rclsid, wszCLSID, ELEMENTS(wszCLSID)))
{
HRESULT hr = StringCchPrintf(wszMonikerName,
ELEMENTS(wszMonikerName),
L"Elevation:Administrator!new:%s",
wszCLSID);
if (FAILED(hr))
return hr;
memset(&bo, 0, sizeof(bo));
bo.cbStruct = sizeof(bo);
bo.hwnd = hwnd;
bo.dwClassContext = CLSCTX_LOCAL_SERVER;
return CoGetObject(wszMonikerName, &bo, riid, (void **)ppv);
}
return E_FAIL;
}
else
return ::CoCreateInstance(rclsid,NULL,CLSCTX_ALL,riid,(void**)ppv);
}
Запуск под UAC, он представит диалоговое окно высоты. Объект закончит процесс в dllhost (я думаю), но с полными правами администратора.
Также посмотрите на step by step guide for UAC in Vista.
Благодарим за ответ. Нет, он не работает с правами администратора. Я могу поместить этот код в мой текущий OCX, не так ли? Это вызовет диагоп. Имейте в виду, что OCX работает с веб-страницы. Спасибо за помощь. – LilMoke
Нет, вам нужно запустить это вместо обычного кода, который вы используете для создания COM-объекта. Если вы работаете внутри IE, то это обеспечивает дополнительные границы безопасности, поскольку он будет умышленно отбрасывать привилегии при запуске. –
Если вы щелкните правой кнопкой мыши IE и выберите «Запуск от имени администратора», это приведет к тому, что IE будет запущен как полный нефильтрованный администратор - если вы просто запустите его в обычном режиме, то Vista заставит IE (или любой процесс действительно) работать без фактических привилегий администратора, даже если они администратор на машине –