阅读:3174回复:27
ir_pid怎么和GetCurrentProcessId取得的值对应啊?
小弟在学习WIN98下文件删除保护程序时遇上难题,
我安装了IFSMgr_InstallFileSystemApiHook钩子, 但拦截时无法判断删除操作是哪个程序发出的, 尤其是SHELL32发出的? ir_pid属性我已测试,但无法与前台程序找到的process ID相对应,请各位大侠帮助 例如取得的ir_pid是71875 客户端进程id用getcurrentprocessid得的是类似4294554249这样的 |
|
最新喜欢:![]() |
沙发#
发布于:2004-08-15 15:04
趁热打铁,再upup
谁解决了还是给100分 :mad: |
|
板凳#
发布于:2004-08-15 15:33
小弟在学习WIN98下文件删除保护程序时遇上难题, GetCurrentProcessId返回的值怎么这么大,是不是你的代码有问题? |
|
|
地板#
发布于:2004-08-15 15:51
可能AP得到的ID和R0得到的ID不一样。 ?
在driver中可以用下面的代码取进程名: PCHAR FilemonGetProcess( PCHAR ProcessName ) { PVOID CurProc; PVOID ring3proc; char *name; ULONG i; // // Get the ring0 process pointer. // CurProc = VWIN32_GetCurrentProcessHandle(); // // Now, map the ring3 PCB // ring3proc = (PVOID) SelectorMapFlat( Get_Sys_VM_Handle(), (DWORD) (*(PDWORD) ((char *) CurProc + 0x38)) | 0x7, 0 ); if( ring3proc == (PVOID) -1 ) { strcpy( ProcessName, "???"); } else { // // copy out the process name (max 8 characters) // name = ((char *)ring3proc) + 0xF2; if( name[0] >= 'A' && name[0] < 'z' ) { strcpy( ProcessName, name ); ProcessName[8] = 0; } else { strcpy( ProcessName, "???" ); } } return ProcessName; } |
|
地下室#
发布于:2004-08-15 15:55
98的PCB结构 俺也不是很了解, 那位大虾 来点解点解 ? :)
|
|
5楼#
发布于:2004-08-15 21:14
隐隐约约好像觉得是这样:
98把explore等等这些系统进程在R0里面规定成固定的id了,就像717875这样的5位数,然后可能在每次启动的时候,随机生成1个数和717875进行相加,然后就得出10位的那样424xxxxx 问题是现在我找不到资料,没看到官方怎么说的。所以我就没法搞定id值了。 现在每次操作我都能从ir_pid属性知道当前IFS操作的processid,然后我要对比一下我允许访问的processid表是否有它。可是我的processid表是R3应用程序取的10位processid,所以说我必须知道os是如何把5位的R0进程转换成R3的10位进程id的。这样我就可以直接把合法proceesid表保存数据都放5位R0的processid了 好罗嗦阿,不知道你们懂了么 |
|
6楼#
发布于:2004-08-16 10:03
upup
|
|
7楼#
发布于:2004-08-16 20:53
阿婆一下
|
|
8楼#
发布于:2004-08-18 09:54
顶到大牛们烦了,自然有人回答了 :P
|
|
9楼#
发布于:2004-08-18 10:25
帮你顶!!!!!!!!
|
|
10楼#
发布于:2004-08-20 11:13
丁阿
|
|
11楼#
发布于:2004-08-20 12:13
丁阿 |
|
12楼#
发布于:2004-08-23 10:24
顶到牛人烦我
|
|
13楼#
发布于:2004-08-23 20:40
aaaaaaaaaaa
|
|
14楼#
发布于:2004-08-26 11:38
果然憨厚
|
|
15楼#
发布于:2004-08-26 20:41
帮帮你
|
|
16楼#
发布于:2004-08-26 22:05
adfdsf
|
|
17楼#
发布于:2004-08-27 08:13
我考不累吗?
|
|
18楼#
发布于:2004-08-27 08:29
可能AP得到的ID和R0得到的ID不一样。 ? ring3proc = (PVOID) SelectorMapFlat( Get_Sys_VM_Handle(), (DWORD) (*(PDWORD) ((char *) CurProc + 0x38)) | 0x7, 0 ); 你把上句话的|0x7去掉试试,通过反汇编我发现没有这个,你试试 |
|
19楼#
发布于:2004-08-30 20:59
楼上的方法不行,帮楼主顶。
|
|
上一页
下一页