无法在Procmon中配置test.exe读文件过滤项,求解决方案
Procmon过滤规则配置步骤(适配你的test.exe文件读取场景)
一、添加进程名过滤规则
- 打开Procmon,按
Ctrl+L调出过滤规则编辑窗口(或点击顶部「过滤器」按钮)。 - 第一个下拉框选择Process Name,第二个选择is,输入框填入
test.exe,点击「Add」加入规则。
二、添加文件读取操作过滤规则
Procmon没有直接命名为「读取文件」的选项,对应你代码里的操作,需要筛选以下关键操作:
- 针对
ReadFile调用:选Operation → is → 输入ReadFile,点击「Add」。 - (可选)如果要包含打开文件的操作(对应代码里的
CreateFileA):添加另一条规则,选Operation → is → 输入CreateFile,点击「Add」。 - 底层读取请求:也可以选Operation → contains → 输入
Read,匹配所有读取类操作。
三、关键注意事项
- 必须在运行
test.exe之前启动Procmon的捕获功能(点击顶部蓝色的捕获按钮,确保处于开启状态)。 - 如果仍然看不到目标操作,点击过滤窗口里的「Reset Filter」清空原有规则,再重新添加上述规则,避免其他规则屏蔽结果。
- 你的代码逻辑正常,
CreateFileA(只读打开)、ReadFile、CloseHandle都会被Procmon捕获,只要规则配置正确。
你的代码(中文注释版)
#include <windows.h> #include <stdio.h> int main() { // 指定文件路径 LPCSTR fileName = "C:\\TestFolder\\test.txt"; // 尝试打开文件 HANDLE fileHandle = CreateFileA( fileName, // 文件名 GENERIC_READ, // 只读权限 0, // 不共享 NULL, // 安全属性 OPEN_EXISTING, // 仅打开已存在文件 FILE_ATTRIBUTE_NORMAL, // 文件属性 NULL // 无模板文件 ); if (fileHandle == INVALID_HANDLE_VALUE) { printf("无法打开文件(错误码 %d)\n", GetLastError()); return 1; } // 存储读取数据的缓冲区 char buffer[1024]; DWORD bytesRead; // 读取文件内容 BOOL readResult = ReadFile( fileHandle, // 文件句柄 buffer, // 数据缓冲区 sizeof(buffer) - 1, // 读取字节数(留一位给结束符) &bytesRead, // 实际读取字节数 NULL // 非重叠IO ); if (!readResult) { printf("无法读取文件(错误码 %d)\n", GetLastError()); CloseHandle(fileHandle); return 1; } // 给缓冲区添加字符串结束符 buffer[bytesRead] = '\0'; // 打印文件内容 printf("文件内容:\n%s\n", buffer); // 关闭文件句柄 CloseHandle(fileHandle); return 0; }
内容的提问来源于stack exchange,提问作者yarden
相关产品推荐
相关产品推荐

