Tag: uac

是否可以仅通过代码以管理员身份运行

操作系统:Windows语言:C 我有一个要求,例如,我不应该更改exe的清单或exe文件的属性来以管理员身份运行它。 有没有机会用createprocess / createprocessasuser api来完成我的需求。 这可以通过shellexecute api完成,但是我需要在挂起状态下创建我的进程。 这只能通过createprocess或createprocessasuser api来完成。 如果有人可以通过这些API指导我以管理员身份运行程序,那将不胜感激。

使用Vista UAC的CreateDesktop()(C Windows)

我正在使用CreateDesktop()来创建一个临时桌面,其中应用程序将运行,执行清理操作(同时保持不受影响)并终止。 一旦应用程序消失,我就关闭了桌面。 使用Windows XP甚至Vista时,一切都很好。 启用(恼人的)UAC时会出现问题。 创建桌面时一切正常,但是当您调用CreateProcess()在该桌面上打开程序时,它会导致打开的应用程序崩溃,User32.dll上出现exception。 我一直在阅读很多关于Windows上不同桌面和图层以及内存限制的内容。 但是,我打开的大多数程序(作为测试场景)都可以,但是一些程序(如IE,Notepad,Calc和我自己的应用程序)会导致崩溃。 任何人都知道为什么会在使用UAC的Vista上发生这种情况,或者更具体地针对这些特定程序? 以及如何解决这个问题? 任何人都有一个很好的例子来说明如何创建一个桌面并在那里打开一个应用程序,而无需在Vista下使用UAC切换到它? 代码表示赞赏。 谢谢 编辑:这是我正在使用的代码。 //Security SECURITY_ATTRIBUTES sa; HDESK dOld; HDESK dNew; BOOL switchdesk, switchdesk2, closedesk; int AppPid; sa.bInheritHandle = TRUE; sa.lpSecurityDescriptor = NULL; sa.nLength = sizeof(SECURITY_ATTRIBUTES); //Get handle to current desktop dOld = OpenDesktopA(“default”, 0, TRUE, DESKTOP_SWITCHDESKTOP| DESKTOP_WRITEOBJECTS| DESKTOP_READOBJECTS| DESKTOP_ENUMERATE| DESKTOP_CREATEWINDOW| DESKTOP_CREATEMENU); if(!dOld) { printf(“Failed […]

对于具有UIAccess =“true”的进程,CreateProcessAsUser失败并显示ERROR_ELEVATION_REQUIRED

我正在尝试使用以下代码从我的服务应用程序(作为local system运行)运行用户模式进程。 用户模式进程的要求是在没有提升的情况下运行,但要在其清单中使用UIAccess=”true” ,以便能够在Windows 8下正确显示top-most窗口 。 所以我这样做(从我的服务)来运行我的用户模式过程: //NOTE: Error checking is omitted for readability //’dwSessionID’ = user session ID to run user-mode process in //’pUserProcPath’ = L”C:\\Program Files (x86)\\Company\\Software\\user_process.exe” HANDLE hToken = NULL; WTSQueryUserToken(dwSessionID, &hToken); HANDLE hToken2; DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, NULL, SecurityIdentification, TokenPrimary, &hToken2); LPVOID pEnvBlock = NULL; CreateEnvironmentBlock(&pEnvBlock, hToken2, FALSE); STARTUPINFO si; ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb […]