我正在用C 开发一个COM代理对象,我的应用程序将使用它来为需要管理权限的某些操作调用UAC提升对话框.
计划是使它导出一个函数,该函数接受一个带有可变数量参数的函数的指针,并在不同的上下文中执行它.这样,应用程序可以使用此对象以管理员权限执行某些操作,他们需要做的就是使用该对象并将指针传递给必须使用所述权限执行的函数.
这部分工作,调用CoCreateInstance很好,函数指针传递,我的函数执行.但是,当我使用CoCreateInstanceAsAdmin创建此对象的实例时 ,会出现问题; 这是代码:
HRESULT CoCreateInstanceAsAdmin(HWND hwnd, REFCLSID rclsid, REFIID riid, __out void ** ppv)
{
// Manual implementation of CreateInstanceAsAdmin
CComPtr BindCtx;
HRESULT hr = CreateBindCtx(0,&BindCtx);
BIND_OPTS3 bo;
memset(&bo, 0, sizeof(bo));
bo.cbStruct = sizeof(bo);
bo.grfMode = STGM_READWRITE;
bo.hwnd = hwnd;
bo.dwClassContext = CLSCTX_LOCAL_SERVER;
hr = BindCtx->SetBindOptions(&bo);
if (SUCCEEDED(hr))
{
// Use the passed in CLSID to help create the COM elevation moniker string
CComPtr Moniker;
WCHAR wszCLSID[50];
WCHAR wszMonikerName[300];
StringFromGUID2(rclsid,wszCLSID,sizeof(wszCLSID) …Run Code Online (Sandbox Code Playgroud) 我遇到以下情况:
稍微修改了一下之后,我注意到它在调试时运行良好。我在读取文件的行上设置了一个断点,从而增加了一点延迟。之后 - 文件被读取并且更改就在那里。
因此,添加 atime.sleep(1)或以其他方式延迟执行似乎可以解决问题。否则我会收到一个过早的 IN_CLOSE_WRITE 事件。
我想知道该事件是在提交更改并关闭文件之后还是在此之前触发。IN_CLOSE_WRITE 之后似乎没有其他相关事件。同时,文档有点棘手:
使用 IN_CLOSE_WRITE 因为如果发出,则相应文件上的所有更改都会安全地写入文件中
我提交了关于常见问题解答中措辞的错误报告,但与此同时,我想就此事获得一些额外的意见。这是应该发生的吗?什么是“道德正确”的解决方法?
所有这些都发生在 Linux Mint 15 x64 上。