Articles of 进程

监视Windows中进程完成的某些系统调用

我希望能够监视某个进程所做的某些系统调用,主要是文件I / O调用。 在Linux上,我可能会用适当的参数使用strace,但是我怎么能在Windows上做到这一点? 我主要感兴趣的是运行一个进程,并找出它已经读取和写入的文件。 编辑:我想从另一个进程编程。 我知道ProcessMonitor,但我想以一种可导入另一个程序的forms接收数据以供进一步分析。 编辑:如果我进一步缩小我的要求,它可能足以能够监视CreateFile()的调用。 我真的只关心打开哪些文件,如果打开它们来读/写或者只读。 另一个我没有真正说明的要求是速度是相当重要的, 我打算做这样的事情,如编译一个C ++文件,并拉起一个完整的graphics用户界面,生成一个20MB的日志文件将有非常高的开销。 编辑:这也不错,如果它不需要pipe理权限。

找不到w3wp进程

我使用Visual Studio 2010在本地机器上debugging一个asp.net MVC项目。 步骤是: 单击debugging,并尝试执行“w3wp.exe”进程。 但是它不在列表中。 我确定点击“在所有会话中显示进程”。

如何确定一个System.Diagnostics.Process是32位还是64位?

我试过了: process.MainModule.FileName.Contains("x86") 但它引发了一个x64进程的exception: Win32Exception:只有ReadProcessMemory或WriteProcessMemory请求的一部分完成

如何从32位WOW进程获取Program Files文件夹path(不是Program Files(x86))?

我需要从32位WOW进程获取本地(而不是WOW)程序文件目录的path。 当我将CSIDL_PROGRAM_FILES(或CSIDL_PROGRAM_FILESX86)传递到SHGetSpecialFolderPath时,它将返回WOW(Program Files(x86))文件夹path。 如果可能的话,我宁愿避免使用环境variables。 我想比较一下从registry中读取的一些值,如果这些值指向我的应用程序的WOW或本地版本的path,那么我的代码会执行某些操作,如果没有,则会执行其他操作。 要找出我的应用程序的本地和WOW版本的预期,我需要得到的path“程序文件(x86)”和“程序文件”。

有没有一种方法来识别Windows命令提示符而不pipe文件名或位置?

我正在编写一个程序,以便在用户运行命令提示符时立即跟踪和终止(如果可能,则使用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 […]

如何使用pid从Python中终止进程?

我想在Python中写一些简短的脚本,如果不是已经开始其他的terminal和应用程序(Linux),将启动子stream程中的另一个Python代码。 所以它看起来像: #!/usr/bin/python from subprocess import Popen text_file = open(".proc", "rb") dat = text_file.read() text_file.close() def do(dat): text_file = open(".proc", "w") p = None if dat == "x" : p = Popen('python StripCore.py', shell=True) text_file.write( str( p.pid ) ) else : text_file.write( "x" ) p = # Assign process by pid / pid from int( […]

64位.Net应用程序中的内存限制?

在我的笔记本电脑上,运行64位Windows 7和2 GB可用内存(由任务pipe理器报告),我能够做到: var x = new Dictionary<Guid, decimal>( 30 * 1024 *1024 ); 没有更多的RAM在我手中的计算机,我想知道这是否会扩大,以便在具有4 GB可用内存的计算机上,我将能够分配60M项目而不是“只是”30M等等? 还是有其他的限制(.Net和/或Windows),我会碰到之前,我能够消耗所有可用的RAM? 更新:好的,所以我不能分配一个大于2GB的单个对象。 知道这一点很重要! 但是,我当然好奇地想知道,如果能够像这样分配2 Gb的块,我能够充分利用所有的内存: var x = new List<Dictionary<Guid, decimal>>(); for ( var i = 0 ; i < 10 ; i++ ) x.Add( new Dictionary<Guid, decimal>( 30 * 1024 *1024 ) ); 如果电脑具有> 20Gb的可用内存,这是否工作?

CreateProcess()错误

STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si, 0, sizeof(si)); memset(&pi, 0, sizeof(pi)); si.cb = sizeof(si); LPCWSTR procName =(LPCWSTR)"D:\\test dir 1\\Calc.exe"; LPWSTR procArg =(LPWSTR)"blacknull"; if(CreateProcess(procName,procArg,0,0,0,CREATE_DEFAULT_ERROR_MODE,0,0,&si,&pi)) { //do some work } printf( "CreateProcess failed (%d).\n", GetLastError()); system("Pause"); 它一直抛出错误(2) – > The System cannot find the file specified 。 我不知道什么是错的。 我也试图使用在同一个目录中的“Calc.exe”。 但它不工作。