在项目中随便找了段代码 你自己去看看void CMTServerDlg::OnBnClickedGsRstart()
{
//扫描进程是否包含
HANDLE hToken = INVALID_HANDLE_VALUE;    
HANDLE hProcess = INVALID_HANDLE_VALUE; HANDLE hNewToken;
SID_IDENTIFIER_AUTHORITY MLAuthority = SECURITY_MANDATORY_LABEL_AUTHORITY;
PSID pIntegritySid;
TOKEN_MANDATORY_LABEL tml;
DWORD dwCreationFlag;
LPVOID pEnvironment; hToken = NULL;
hNewToken = 0;
pIntegritySid = NULL; STARTUPINFO Si = {0};
PROCESS_INFORMATION Pi = {0}; Si.cb = sizeof(Si);
Si.lpDesktop = TEXT("winsta0\\default");
Si.wShowWindow = SW_SHOW; dwCreationFlag =  NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT; OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE | TOKEN_QUERY | TOKEN_ADJUST_DEFAULT | TOKEN_ASSIGN_PRIMARY, &hToken); DuplicateTokenEx(hToken, 0, NULL, SecurityImpersonation,TokenPrimary, &hNewToken); // 创建一个低权限的SID
AllocateAndInitializeSid(&MLAuthority, 1, SECURITY_MANDATORY_MEDIUM_RID, 0, 0, 0, 0, 0, 0, 0, &pIntegritySid); tml.Label.Attributes = SE_GROUP_INTEGRITY;
tml.Label.Sid = pIntegritySid; // 设置这个低权限SID到令牌
SetTokenInformation(hNewToken, TokenIntegrityLevel, &tml, (sizeof(tml) + GetLengthSid(pIntegritySid))); // 创建一个环境变量
CreateEnvironmentBlock(&pEnvironment, hToken, FALSE);
/************************************************************************/
/* 处理GateServer                                                       */
/************************************************************************/
if (FindProcessByName(hProcess,"GATESERVER.EXE",TRUE))
{
AddMsg("已删除GateServer.exe进程...\r\n");
}
else
{
AddMsg("删除GateServer.exe进程失败...\r\n");
return;
} STARTUPINFO siGateWay; 
memset(&siGateWay, 0, sizeof(STARTUPINFO));
siGateWay.cb = sizeof(STARTUPINFO);
siGateWay.dwFlags = STARTF_USESHOWWINDOW;
siGateWay.wShowWindow = SW_HIDE;
PROCESS_INFORMATION piGateWay; char szPath[MAX_PATH] = {0};
char szModuleName[MAX_PATH] = {0};
GetModuleFileName(NULL,szPath,MAX_PATH);
strncpy(szModuleName,szPath,strlen(szPath) + 1);
PathStripPath(szModuleName);
char* p = szPath;
while (*p++ != '\0');
while (1)
{
if (*p == '\\')
{
*(p + 1) = '\0';
break;
}
p--;
}
strcat(szPath,"GateServer.exe");
if(CreateProcessAsUser(hToken,szPath,NULL,NULL,NULL,FALSE,0,NULL,NULL,&siGateWay,&piGateWay))
{
CloseHandle(piGateWay.hThread);
m_hGate = piGateWay.hProcess;
AddMsg("已开启GateServer.exe进程...\r\n");
}
else
{
CString strOutMsg;
strOutMsg.Format("开启GateServer.exe进程失败...错误码:%d\r\n",GetLastError());
AddMsg(strOutMsg.GetBuffer());
}
}

解决方案 »

  1.   

    http://www.docin.com/p-256049820.htmlhttp://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=monline_5_dg&wd=vc%E6%8F%90%E6%9D%83%E6%8F%90%E6%9D%83&rsv_enter=0&rsv_sug3=58&rsv_sug4=2369&rsv_sug1=47&rsv_sug2=0&inputT=2691&rsv_sug=1&oq=sql%20%E5%AD%97%E6%AE%B5%E5%8C%85%E5%90%AB&rsp=0
      

  2.   


    有相关链接吗,或代码?这个会弹出 UAC 确认框吗?兄弟