Windows进程权限

Windows Via C/C++:vista下的应用程序权限控制

http://blog.csdn.net/xiewneqi/article/details/4643650


说说ShellExecuteEx

http://blog.csdn.net/kesalin/article/details/4076061


BOOL ExecutePackageWithPrivilege(LPCWSTR fileName, LPCWSTR args, LPCWSTR baseDir, BOOL bWait)
{
SHELLEXECUTEINFOW sei = { 0 };


ZeroMemory(&sei, sizeof(sei));


//sei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.hwnd = NULL;
sei.cbSize = sizeof(SHELLEXECUTEINFOW);
sei.lpVerb = _TEXT("runas");
sei.lpFile = fileName;
sei.nShow = SW_HIDE;
//sei.nShow = SW_SHOW;
sei.lpParameters = args;
sei.lpDirectory = baseDir;


wxMessageBox(wxString::Format(wxT("CMD: %s, Args: %s."), fileName, args));


//CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);


if (!ShellExecuteEx(&sei))
{


DWORD dwStatus = GetLastError();
switch (dwStatus)
{
case ERROR_FILE_NOT_FOUND:
wxMessageBox(wxString::Format(wxT("ERROR_FILE_NOT_FOUND, ERROR Code: %d."), dwStatus));
break;
case ERROR_PATH_NOT_FOUND:
wxMessageBox(wxString::Format(wxT("ERROR_PATH_NOT_FOUND, ERROR Code: %d."), dwStatus));
break;
case ERROR_DDE_FAIL:
wxMessageBox(wxString::Format(wxT("ERROR_DDE_FAIL, ERROR Code: %d."), dwStatus));
break;
case ERROR_NO_ASSOCIATION:
wxMessageBox(wxString::Format(wxT("ERROR_NO_ASSOCIATION, ERROR Code: %d."), dwStatus));
break;
case ERROR_ACCESS_DENIED:
wxMessageBox(wxString::Format(wxT("ERROR_ACCESS_DENIED, ERROR Code: %d."), dwStatus));
break;
case ERROR_DLL_NOT_FOUND:
wxMessageBox(wxString::Format(wxT("ERROR_DLL_NOT_FOUND, ERROR Code: %d."), dwStatus));
break;
case ERROR_CANCELLED:
wxMessageBox(wxString::Format(wxT("ERROR_CANCELLED, ERROR Code: %d."), dwStatus));
break;
case ERROR_NOT_ENOUGH_MEMORY:
wxMessageBox(wxString::Format(wxT("ERROR_NOT_ENOUGH_MEMORY, ERROR Code: %d."), dwStatus));
break;
case ERROR_SHARING_VIOLATION:
wxMessageBox(wxString::Format(wxT("ERROR_SHARING_VIOLATION, ERROR Code: %d."), dwStatus));
break;
default:
break;
}


return FALSE;
}


//CoUninitialize();


if (bWait)
{
HANDLE hProcess = sei.hProcess;
if (hProcess != 0)
{
WaitForSingleObject(hProcess, INFINITE);
CloseHandle(hProcess);
}
else
{
wxMessageBox(wxT("sei.hProcess is NULL!"));
}
}


return TRUE;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值