设为首页 收藏本站
查看: 1395|回复: 0

Win7中普通管理员权限的进程如何创建受限制的进程,该进程可以接受Explorer进程的拖拽

[复制链接]

尚未签到

发表于 2015-5-18 09:22:17 | 显示全部楼层 |阅读模式
       最近在工作中遇到在win7环境下管理员权限进程创建的进程无法支持文件拖拽的问题,关于这个问题困恼了好长时间,发现网上关于这个问题文章较少。终于找到一篇整理代码如下。


  1 //
  2 //   FUNCTION: CreateLowIntegrityProcess(PCWSTR)
  3 //
  4 //   PURPOSE: The function launches an application at low integrity level.
  5 //
  6 //   PARAMETERS:
  7 //   * pszCommandLine - The command line to be executed. The maximum length
  8 //     of this string is 32K characters. This parameter cannot be a pointer
  9 //     to read-only memory (such as a const variable or a literal string).
10 //     If this parameter is a constant string, the function may cause an
11 //     access violation.
12 //
13 //   RETURN VALUE: If the function succeeds, the return value is TRUE. If the
14 //   function fails, the return value is zero. To get extended error
15 //   information, call GetLastError.
16 //
17 //   COMMENT:
18 //   To start a low-integrity process,
19 //   1) Duplicate the handle of the current process, which is at medium
20 //      integrity level.
21 //   2) Use SetTokenInformation to set the integrity level in the access
22 //      token to Low.
23 //   3) Use CreateProcessAsUser to create a new process using the handle to
24 //      the low integrity access token.
25 //
26 BOOL CreateLowIntegrityProcess(LPCTSTR pszApplicationName)
27 {
28     DWORD dwError = ERROR_SUCCESS;
29     HANDLE hToken = NULL;
30     HANDLE hNewToken = NULL;
31     SID_IDENTIFIER_AUTHORITY MLAuthority = SECURITY_MANDATORY_LABEL_AUTHORITY;
32     PSID pIntegritySid = NULL;
33     TOKEN_MANDATORY_LABEL tml = { 0 };
34     STARTUPINFO si = { sizeof(si) };
35     PROCESS_INFORMATION pi = { 0 };
36
37     // Open the primary access token of the process.
38     if (!OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE | TOKEN_QUERY |
39         TOKEN_ADJUST_DEFAULT | TOKEN_ASSIGN_PRIMARY, &hToken))
40     {
41         dwError = GetLastError();
42         goto Cleanup;
43     }
44
45     // Duplicate the primary token of the current process.
46     if (!DuplicateTokenEx(hToken, 0, NULL, SecurityImpersonation,
47         TokenPrimary, &hNewToken))
48     {
49         dwError = GetLastError();
50         goto Cleanup;
51     }
52
53     // Create the low integrity SID.
54     if (!AllocateAndInitializeSid(&MLAuthority, 1, SECURITY_MANDATORY_LOW_RID,
55         0, 0, 0, 0, 0, 0, 0, &pIntegritySid))
56     {
57         dwError = GetLastError();
58         goto Cleanup;
59     }
60
61     tml.Label.Attributes = SE_GROUP_INTEGRITY;
62     tml.Label.Sid = pIntegritySid;
63
64     // Set the integrity level in the access token to low.
65     if (!SetTokenInformation(hNewToken, TokenIntegrityLevel, &tml,
66         (sizeof(tml) + GetLengthSid(pIntegritySid))))
67     {
68         dwError = GetLastError();
69         goto Cleanup;
70     }
71
72     // Create the new process at the Low integrity level.
73     if (!CreateProcessAsUser(hNewToken, pszApplicationName, NULL, NULL, NULL,
74         FALSE, 0, NULL, NULL, &si, &pi))
75     {
76         dwError = GetLastError();
77         goto Cleanup;
78     }
79
80 Cleanup:
81     // Centralized cleanup for all allocated resources.
82     if (hToken)
83     {
84         CloseHandle(hToken);
85         hToken = NULL;
86     }
87     if (hNewToken)
88     {
89         CloseHandle(hNewToken);
90         hNewToken = NULL;
91     }
92     if (pIntegritySid)
93     {
94         FreeSid(pIntegritySid);
95         pIntegritySid = NULL;
96     }
97     if (pi.hProcess)
98     {
99         CloseHandle(pi.hProcess);
100         pi.hProcess = NULL;
101     }
102     if (pi.hThread)
103     {
104         CloseHandle(pi.hThread);
105         pi.hThread = NULL;
106     }
107
108     if (ERROR_SUCCESS != dwError)
109     {
110         // Make sure that the error code is set for failure.
111         SetLastError(dwError);
112         return FALSE;
113     }
114     else
115     {
116         return TRUE;
117     }
118 }  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-67961-1-1.html 上篇帖子: win7下安装配置ftp服务器 下篇帖子: 转载:NC6400安装Win7系统驱动列表及注意事项
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表