首页 > 解决方案 > 我正在尝试使用 COM Moniker 抑制 UAC 提示

问题描述

Windows 资源管理器在尝试将文件复制到特定位置(例如system32. 单击继续时,当当前 UAC 严格级别设置为倒数第二个值时,会在后台发生提升(仅在尝试对我的计算机进行更改时通知(默认))。

我已经看到其他程序(未进行数字签名)用于CoGetObject创建提升IFileOperation.我试图在我的应用程序中执行此操作,但 UAC 不断提示。是的,代码有效,但我想获得与第 3 方程序和 Windows 资源管理器在获取提升时获得的相同的静默结果IFileOperation.这是我到目前为止的代码。它是 C 而不是 C++。

CoInitializeEx(0, COINIT_APARTMENTTHREADED);
BIND_OPTS3 ops = {0};

//Random sized buffer large enough to hold values, THIS IS ONLY FOR TESTING!!
WCHAR clsidName[210],
    monikerName[500];

StringFromGUID2(&CLSID_FileOperation, clsidName, sizeof(clsidName) / sizeof(WCHAR));

StringCchPrintfW(monikerName, sizeof(monikerName) / sizeof(WCHAR), L"Elevation:Administrator!new:%s", clsidName);

ops.dwClassContext = CLSCTX_LOCAL_SERVER;
ops.cbStruct = sizeof(BIND_OPTS3);
IFileOperation ppv;
HRESULT hr = CoGetObject(monikerName, &ops, &IID_IFileOperation, &ppv);

标签: cwinapicomelevation

解决方案


推荐阅读