Windows services 为什么CreateProcessAsUser会因“失败”;“拒绝访问”;从服务子进程调用时
我正在尝试使用CreateProcessAsUser函数从我的服务中以其他用户的身份运行该进程。下面是代码示例。 操作系统-视窗10 当我在主服务进程中运行代码时,代码运行良好。但我需要从子服务进程运行相同的代码。在本例中,CreateProcessAsUser返回0,GetLastError=5(访问Dennied) 子服务进程由下一次调用创建Windows services 为什么CreateProcessAsUser会因“失败”;“拒绝访问”;从服务子进程调用时,windows-services,createprocessasuser,Windows Services,Createprocessasuser,我正在尝试使用CreateProcessAsUser函数从我的服务中以其他用户的身份运行该进程。下面是代码示例。 操作系统-视窗10 当我在主服务进程中运行代码时,代码运行良好。但我需要从子服务进程运行相同的代码。在本例中,CreateProcessAsUser返回0,GetLastError=5(访问Dennied) 子服务进程由下一次调用创建 CreateProcess(NULL, "d:\\child.exe", NULL, NULL, FALSE, 0u, NULL, NULL, &am
CreateProcess(NULL, "d:\\child.exe", NULL, NULL, FALSE, 0u, NULL, NULL, &si.StartupInfo, &pi)
我的代码在“child.exe”二进制文件中工作,应该再创建一个进程,以这种方式启动“d:\test.exe”二进制文件
CreateProcessAsUser(hUserTokenDup,
NULL,
"d:\\test.exe",
NULL,
NULL,
FALSE,
CREATE_NEW_CONSOLE | /*CREATE_BREAKAWAY_FROM_JOB |*/ NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&si,
&pi);
对于测试,我将启动“test.exe”的代码移动到了“child.exe”启动(服务主进程)和“test.exe”正常启动的相同位置。对于测试,我用相同的参数(用户令牌除外)替换了CreateProcess上的CreateProcessAsUser,test.exe也可以正常启动
但我需要从服务子进程(从“child.exe”)启动“test.exe”,并通过CreateProcessAsUser启动它。我尝试了很多来自互联网的解决方案(添加创建、脱离工作、使用DuplicateTokenEx、使用linkedToken、启用所有可能的特权等等),但没有任何解决方案对我有帮助。我不期望服务流程和子流程之间有任何区别。但看起来有些不同,我找不到它是什么
有人能告诉我,主服务器进程和它的子进程有什么区别吗?我的同事找到了解决方案 我在这里发表: 在创建服务子进程之前,服务子进程可以在将标记JOB_OBJECT_LIMIT_BREAKAWAY_OK | JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK传递给服务器进程中的SetInformationJobObject函数后启动子进程。在那之后 WTSGetActiveConsoleSessionId( WTSQueryUserToken( CreateProcessAsUser(…从作业中创建分离 在不创建重复句柄的情况下正常工作事件