-4 c++ windows process command-prompt
我正在编写一个程序,以便在用户运行命令提示符时立即跟踪并终止(如果可能,则使用regedit).这是为了阻止用户运行我希望他们没有的命令.
我已经编写了代码,可以查看启动进程的时间并使用QueryFullProcessImageName检查其名称.问题是,如果有人要重命名命令提示符,那么我将无法再通过进程名称检测到它.我检测命令提示符的方式当前是"\ cmd.exe",但显然这不是很安全.
以下是我的代码.为简洁起见,我删除了所有错误检查.如果您需要更清晰,请告诉我.谢谢!
TCHAR exeName[MAX_PATH];
DWORD exeNameSize = MAX_PATH;
//the pid comes into the function as a parameter
HANDLE handle = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, 0, pid);
if (handle)
{
if (QueryFullProcessImageName(handle, 0, exeName, &exeNameSize))
{
tstring name = exeName;
/*
badProcs would contain the path identifiers such as
"\\cmd.exe" or "\\regedit.exe". This detection is
what I want to make better.
*/
for(int i=0; i < badProcs.size(); i++)
{
if(tstring::npos != name.find(badProcs.at(i)))
{
if(TerminateProcess(handle,0))
OutputDebugString(_T("Process should be dead\n\n"));
}
}
}
CloseHandle(handle);
}
Run Code Online (Sandbox Code Playgroud)
一些额外的信息:我写这篇文章的原因是为了控制其他桌面上发生的事情.我想这样做,以便当用户启动一个不同的桌面(通过任何专有程序)时,我可以控制他们是否可以访问对系统提出最大安全漏洞的项目.鉴于我只想控制其他桌面上的操作,我不想更改设置,以免损坏目标桌面之外的数据.腐败不是值得担心的吗?
我只对控制一个专有的桌面感兴趣,而不是想要用户在自己的空间中做什么.基本上,单独的桌面用于公司工作,我希望能够限制人们可以对公司信息等做些什么.
Sev*_*yev 10
别.Windows有内部手段.阅读策略编辑器和/或文件访问控制.
如果您是管理员且"用户"不是,则策略(或简单ACL)将完成工作; 如果"用户"也是管理员,他们将能够相当容易地击败你的程序.