繁体   English   中英

程序从管理员升级到系统

Program escalates itself from admin to system

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我编写了一个程序,需要以SYSTEM身份运行。 我在'requireAdministrator'中添加了链接器选项'UAC Execution Level',它像应该的那样弹出UAC,但是现在我需要从admin升级到SYSTEM,我该怎么做? 我考虑过打开程序的令牌并将其注入SYSTEM令牌,但这不是合法的方法。 我该如何整齐地做,因为我知道一旦您成为管理员,您就可以成为SYSTEM。

2 个回复

编写Windows服务。 默认情况下它将以SYSTEM用户身份运行。

这里有一个简单的教程,但是请记住,安装服务需要管理员权限。

以管理员身份运行后,以下是一些选项:

  1. 如果您知道将不使用GUI功能,则可以创建一个计划任务,该任务在几秒钟内与NT AUTHORITY \\ SYSTEM运行相同的exe,然后在代码中检查运行该进程的帐户。

    从我的项目复制并稍作修改:

     #include <Windows.h> #include <WinNls.h> #include <shobjidl.h> #include <objbase.h> #include <ObjIdl.h> #include <ShlGuid.h> #include <taskschd.h> #include <comdef.h> #include <strsafe.h> #pragma comment(lib, "taskschd.lib") #pragma comment(lib, "comsupp.lib") HRESULT WINAPI CreateSchedTask(WCHAR *wszExePath) { ITaskService *pService = NULL; ITaskFolder *pRoot = NULL; ITaskDefinition *pTask = NULL; ITaskSettings *pSettings = NULL; IRegistrationInfo *pInfo = NULL; ITriggerCollection *pCollection = NULL; ITrigger *pTrigger = NULL; ITimeTrigger *pTime = NULL; IPrincipal *pPrincipal = NULL; IActionCollection *pActionCollection = NULL; IAction *pAction = NULL; IExecAction *pExecAction = NULL; IRegisteredTask *pRegTask = NULL; SYSTEMTIME stNow; WCHAR wFmt[100]; VARIANT vBlank = _variant_t(); CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); //CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT_PRIVACY, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, 0, NULL); CoCreateInstance(CLSID_TaskScheduler, NULL, CLSCTX_INPROC_SERVER, IID_ITaskService, (LPVOID *)&pService); pService->Connect(vBlank, vBlank, vBlank, vBlank); pService->GetFolder(SysAllocString(L"\\\\"), &pRoot); pService->NewTask(0, &pTask); pService->Release(); pTask->get_RegistrationInfo(&pInfo); pInfo->put_Author(SysAllocString(L"TASKNAMEHERE")); pInfo->Release(); pTask->get_Settings(&pSettings); pSettings->put_StartWhenAvailable(VARIANT_TRUE); pSettings->put_Enabled(VARIANT_TRUE); pSettings->Release(); pTask->get_Triggers(&pCollection); pCollection->Create(TASK_TRIGGER_TIME, &pTrigger); pCollection->Release(); pTrigger->QueryInterface(IID_ITimeTrigger, (void **)&pTime); GetLocalTime(&stNow); // Note: replace -07:00 with the appropriate UTC offset for your time zone StringCchPrintfW(wFmt, 100, L"%.4hu-%.2hu-%.2huT%.2hu:%.2hu:%.2hu-07:00", stNow.wYear, stNow.wMonth, stNow.wDay, stNow.wHour, stNow.wMinute, stNow.wSecond + 30); pTime->put_StartBoundary(SysAllocString(wFmt)); StringCchPrintfW(wFmt, 100, L"%.4hu-%.2hu-%.2huT%.2hu:%.2hu:%.2hu-07:00", stNow.wYear, stNow.wMonth, stNow.wDay, stNow.wHour, stNow.wMinute + 1, stNow.wSecond); pTime->put_EndBoundary(SysAllocString(wFmt)); pTime->put_Id(SysAllocString(L"TimeTrigger")); pTime->Release(); pTask->get_Actions(&pActionCollection); pActionCollection->Create(TASK_ACTION_EXEC, &pAction); pActionCollection->Release(); pAction->QueryInterface(IID_IExecAction, (void **)&pExecAction); pAction->Release(); pExecAction->put_Path(SysAllocString(wszExePath)); pExecAction->Release(); pTask->get_Principal(&pPrincipal); pPrincipal->put_RunLevel(TASK_RUNLEVEL_HIGHEST); pPrincipal->put_LogonType(TASK_LOGON_SERVICE_ACCOUNT); pTask->put_Principal(pPrincipal); pPrincipal->Release(); pRoot->RegisterTaskDefinition( SysAllocString(L"System Elevation"), pTask, TASK_CREATE_OR_UPDATE, _variant_t(L"NT AUTHORITY\\\\SYSTEM"), _variant_t(), TASK_LOGON_SERVICE_ACCOUNT, _variant_t(L""), &pRegTask); pRoot->Release(); pTask->Release(); pRegTask->Release(); CoUninitialize(); return S_OK; } INT APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, INT nShowCmd) { WCHAR wUsername[100], wExePath[MAX_PATH]; GetEnvironmentVariableW(L"USERNAME", wUsername, 100); if (!wcschr(wUsername, L'$')) { GetModuleFileNameW(hInstance, wExePath, MAX_PATH); CreateSchedTask(wExePath); } else { // NOTE: MessageBox and other GUI functions won't work since the process isn't running in winsta0\\default // File I/O instead HANDLE hLog = CreateFileW(L"C:\\\\Temp\\\\Log.txt", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); DWORD dwWritten; UINT uLen; CHAR szBuf[100]; SetFilePointer(hLog, 0, NULL, FILE_END); StringCchPrintfA(szBuf, 100, "Hello from NT AUTHORITY\\\\SYSTEM\\r\\n", wUsername); StringCbLengthA(szBuf, 100, &uLen); WriteFile(hLog, szBuf, uLen, &dwWritten, NULL); CloseHandle(hLog); } return 0; } 
  2. 使用Windows Process API提升到系统。 我没有太多的示例代码,但是您可以查看PAExec ,它是SysInternals PSExec工具的开源替代品,它允许创建新的交互式流程作为System。

  3. 在Windows上执行此操作的惯用方式是创建Windows服务。

1 升级到Mac应用程序中的管理员权限

我正在创建一个简单的应用程序,让您快速输入要运行的shell命令。 它工作得很好,但是存在sudo命令的问题。 目前,它检测到一个sudo命令,然后我尝试让它为用户的密码启动一个授权窗口,就像你在安装程序中看到的那样。 这是代码一旦检测到它是一个sudo命令: 现在,据我所知, ...

3 升级到 1.8.1 后 Django 管理员中断

我从 1.7.3 升级到 1.8.1,但我的管理员无法正常工作,站点无法加载,因为它在解析路径时失败。 例外: 这是堆栈跟踪: 我的TEMPLATE_CONTEXT_PROCESSORS确实有'django.contrib.auth.context_processors.auth ,所以不 ...

2015-05-02 17:08:31 1 9059   django
4 具有非管理员权限的WIX升级安装程序

我使用与“受限”产品相同的InstallPrivileges进行升级时遇到问题,InstallScope =“ perUser”。 初始/首次安装可以正常运行,并且不要求管理员特权。 但是,在尝试升级时需要UAC提升。 我如何让升级使用与以前安装的版本-&gt; nonAdmin相同的访问 ...

5 从1.9.0升级到1.9.1后的magento空白管理员

还有其他与此类似的帖子,但没有我可以通过解决方案找到的帖子 我有一个测试站点,我决定在Magento Connect升级过程中在Magento Connect中进行升级,连接超时,并留有空白的正面和管理页面,我使用SSH并能够完成升级,(我第一次使用SSH)全部成功完成,重新索引,权限设置 ...

7 升级到3.5.1后,WordPress管理员停止工作

今天,我尝试将Wordpress更新到最新版本(3.5.1)。 完成此操作后,我无法再打开wp-admin/index.php 。 它给我一个404错误。 我已经研究了index.php文件,当调用函数auth_redirect()时它会中断。 这是该函数的代码: 但是我找不到它 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM