草庐IT

多进程架构

全部标签

c++ - Process Explorer 如何从 XP Guest 帐户枚举所有进程名称?

我正在尝试枚举所有正在运行的进程EXE名称,但在XPGuest帐户上尝试此操作时遇到了麻烦。我能够使用EnumProcesses枚举所有进程ID,但是当我尝试使用PROCESS_QUERY_INFORMATION或PROCESS_VM_READ进行OpenProcess时,函数失败。我在XPGuest帐户下启动了ProcessExplorer,它能够枚举所有进程名称(尽管正如预期的那样,来自Guest用户空间之外的进程的大多数其他信息不存在)。所以,我的问题是,我如何复制ProcessExplorer魔法来获取在Guest帐户用户空间之外运行的服务和其他进程的进程名称?

windows - 是否有一种编程方式来检测进程是否可以与桌面交互

我有一个可以正常运行或作为服务运行的可执行文件。在启动时,如果有错误(使用MessageBoxapi),它可能会显示错误消息。如果应用程序作为服务运行但不允许与桌面交互,这可能会导致失败。该进程可能看起来挂起。是否有一种编程方式来检测应用程序是否可以与桌面交互?然后我可以使用其他一些错误通知机制(日志文件等) 最佳答案 您可以在调用MessageBox()时指定MB_SERVICE_NOTIFICATION,这将在当前事件的session中显示消息。但是,在服务中显示消息框并不是您真正想要的。服务应该在后台运行,而不是直接与用户交互

c - 你如何在 C 中创建一个在父进程死后运行的进程?

我正在用C编写一个简单的程序,它使用exec函数打开Internet浏览器。但是,在我关闭互联网浏览器之前,该程序不会终止。编写此程序以打开Internet浏览器然后结束的最佳方法是什么? 最佳答案 当您使用exec时,您的整个进程将被替换为新进程的镜像,而当前进程将不复存在。相反,预先fork一个新进程(如果需要setsid将其从父进程中分离)和然后exec新的进程镜像。fork的进程将被新的进程镜像替换,父进程将保持事件状态。如果您想让父进程保持打开状态直到子进程退出,请查看waitpid。编辑:为了将来的引用,是的,setsi

c - 如果我打算通过多个进程访问文件的多个部分,使用 CreateFileMapping 和 MapViewOfFile 的正确方法是什么?

我正在用C编写一个组件,它将被几个不同的进程使用,它们都访问同一个文件。每个进程将同时访问文件的不同部分,主要用于读取,也用于写入。我想弄清楚正确的方法是:选项A:对于每个进程,为整个文件调用一次CreateFileMapping,然后在不同部分多次使用MapViewOfFile来访问它需要的部分,这意味着如果我有10个部分我想访问,我将为整个文件调用一次CreateFileMapping,端到端,然后MapViewOfFile10次,文件的每个部分一次。或选项B:对于每个要访问的每个特定部分调用CreateFileMapping和MapViewOfFile的进程,这意味着如果我有10

windows - 在 XP 中如何查看哪些进程/程序正在通过 Internet 发送/接收数据?

在WindowsXP中是否可以编写脚本来查看哪些进程/程序正在通过Internet发送/接收数据?我有完全的管理员权限,我想找到一种方法来监控我机器上的数据交换,而无需安装任何额外的软件。 最佳答案 第一步:WindowsXP同时按Windows键和R打开“运行”框。输入CMD,然后按OK。命令提示符窗口将打开:第二步在打开的命令提示符窗口中,输入以下内容:netstat-b5>activity.txt然后按回车键。(注意:要将某些内容粘贴到命令提示符中,您需要右键单击并单击粘贴。)如果您忘记以管理员身份运行提示(就像我在上面的屏幕

windows - 如果在特定地址写入,则暂停进程

在Windows(最好是XP)上,当进程在特定地址(在它的虚拟地址空间中)写入时,通常可以挂起进程吗?加载的DLL执行写操作而不是进程本身的(PE)镜像中的代码这一事实使问题变得复杂。 最佳答案 您可以使用VirtualProtect和PAGE_GUARD或其他选项保护包含感兴趣地址的页面,并在地址写入时出现异常。此类异常可以由未处理的异常过滤器处理(视情况而定,应用程序可能会自行处理),或由进程外调试器应用程序处理,例如众所周知的调试器或通过API自定义应用程序调试进程。调试器应用程序可以在必要时暂停进程,或者使用快照进行小型转储

c++ - "SendMessage"到 C++ 中的 3 个不同进程

我想将击键发送到多个进程。例如,如果我按“1”,那么我想将“1”发送到3个“记事本窗口”。首先,我想尝试向记事本发送击键,但在HWND上失败了://HANDLEhWin;HWNDwindowHandle=FindWindowA(NULL,"Notepad");//Can’tfindaproccess//Sendakeyif(windowHandle)//Thisonefails{while(true){if(GetAsyncKeyState(VK_F12)!=0){SendMessageA(windowHandle,WM_KEYDOWN,VK_NUMPAD1,0);Sleep(1000

.net - 如果某些进程需要分配超过 2 GB 的内存,会发生什么情况?

据我所知-Windows中的任何进程都会获得2GB的虚拟内存地址空间(在某些情况下为3GB)用于分配用途。在什么情况下进程将获得3GB而不是2GB?应用程序开发人员是否可以通过某种方式“要求”操作系统分配超过2/3GB的虚拟地址空间?如果进程需要超过3/2GB会怎样?(我猜系统会遇到一些“内存不足异常”——但有什么方法可以避免这种情况吗?)例如-如果进程是“MicrosoftSQLServer”,需要分配比2/3GB多得多的内存,会发生什么 最佳答案 一个32位进程有4GB地址空间,其中通常为硬件保留1GB,为Windows保留1G

c# - 检测进程的两个窗口

假设我有2个pdf文档,我已经用acrobatfinereader打开了它们。所以我有2个不同的窗口。但是当我使用这段代码时:foreach(ProcesspinProcess.GetProcesses(".")){try{Console.WriteLine("\r\n");Console.WriteLine("\r\nWindowTitle:"+p.MainWindowTitle.ToString());Console.WriteLine("\r\nProcessName:"+p.ProcessName.ToString());Console.WriteLine("\r\nWindo

windows - 如果 Windows 中存在进程,则终止

我只想在进程存在时终止进程,我想这样做是因为我有一个工具,只有在没有错误的情况下才会运行,我做了一些测试,当我试图终止一个进程时确实有错误不存在的过程。这是我用来终止进程的行:taskkill/f/IMnotepad.exe但我想验证它只在进程存在时执行。谢谢!!! 最佳答案 取自this问题,你应该试试这个代码:taskkill/f/imnotepad.exe/fi"memusagegt40"2>NUL|findstrSUCCESS>NUL&&iferrorlevel1(echoNotepadwasnotkilled)else(e