november
驱动牛犊
驱动牛犊
  • 注册日期2002-11-10
  • 最后登录2005-05-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2321回复:11

XFILTER的代码怎么是这样的?

楼主#
更多 发布于:2004-02-20 23:22
今天找到一XFILTER2.0的代码
发现其中一段代码

INT GetProcessFileName(char* buf, DWORD nSize, BOOL IsOnlyName)
{
PCWSTR pFullName = NULL;
int i, j;

if(buf == 0 || nSize == 0)
return PS_INVALID_PARAMETER;

if((!IsOnlyName && nSize < MAX_PATH) || nSize < 16)
return PS_BUFFER_SO_SMALL;

// not get full path name
{
char* pName = PsGetProcessName();
if(pName == NULL)
strcpy(buf, "SYSTEM");
else
strcpy(buf, pName);

return PS_SYSTEM_PROCESS;
}

if(IsOnlyName)
{
char* pName = PsGetProcessName();
if(pName == NULL)
strcpy(buf, "SYSTEM");
else
strcpy(buf, pName);
return PS_SYSTEM_PROCESS;
}

pFullName = PsGetModuleFileNameW();
if(pFullName == NULL)
{
char* pName = PsGetProcessName();
if(pName == NULL)
strcpy(buf, "SYSTEM");
else
strcpy(buf, pName);
return PS_SYSTEM_PROCESS;
}
else
{
UNICODE_STRING usFileName;
ANSI_STRING asFileName;

RtlInitUnicodeString(&usFileName, pFullName);

asFileName.Length = 0;
asFileName.MaximumLength = MAX_PATH;
asFileName.Buffer = buf;

RtlUnicodeStringToAnsiString(&asFileName, &usFileName, FALSE);
}

return PS_USER_PROCESS;
}

这段代码不是成了不管什么情况都返回PS_SYSTEM_PROCESS;吗?后面的代码完全没有必要啊,因为根本执行不到,,,
作者怎么会犯这种错误?

[编辑 -  2/20/04 by  november]
bobo_lei
驱动牛犊
驱动牛犊
  • 注册日期2003-03-26
  • 最后登录2008-11-16
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望14点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-02-21 11:52
兄弟,能不能给我一份2.0的代码啊,我的邮箱是bobo_lei@163.com
我想学习学习啊
xautofzx
驱动牛犊
驱动牛犊
  • 注册日期2003-11-23
  • 最后登录2008-04-20
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-22 18:09
大哥,我也想学习学习。
zx-xaut@sohu.com

给一份看看吧。先谢了。
Henry_Young
驱动牛犊
驱动牛犊
  • 注册日期2003-11-08
  • 最后登录2008-01-31
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-02-23 11:20
大哥,我也想学习学习。
mryh@sina.com

给一份看看吧。先谢了。
anna_liu123
驱动牛犊
驱动牛犊
  • 注册日期2004-02-01
  • 最后登录2004-02-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-02-23 11:23
大哥,我也想学习学习。
anna_liu123@yahoo.com

给一份看看吧。先谢了。
deamon
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2005-04-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-02-24 21:32
可以加我一个吧,xflit 2.0 source code , I love you. Thanks very much !
peta@21cn.com
lidf
驱动牛犊
驱动牛犊
  • 注册日期2001-04-24
  • 最后登录2010-10-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-03-02 19:39
嘿嘿,我的E-MAIL是:cisc@263.net
cisc
sam801025
驱动牛犊
驱动牛犊
  • 注册日期2004-03-06
  • 最后登录2004-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-03-06 19:02
大侠你好,我也想学学,能给我发一份它的源代码吗?
谢谢 !!,我的email: sam801025@163.com
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
8楼#
发布于:2004-03-06 19:48
费尔获得process的方法是错误的,因为这段代码常常在dpc上运行,
dpc是不确定process context的。通常应该在passive level上获得。
或者从tdi层获得。

正确的方法是,在tdi获得process id,然后把这个id放到包里面,
然后在ndis hook或者imd中统一判断过滤规则。

今天找到一XFILTER2.0的代码
发现其中一段代码

INT GetProcessFileName(char* buf, DWORD nSize, BOOL IsOnlyName)
{
PCWSTR pFullName = NULL;
int i, j;

if(buf == 0 || nSize == 0)
return PS_INVALID_PARAMETER;

if((!IsOnlyName && nSize < MAX_PATH) || nSize < 16)
return PS_BUFFER_SO_SMALL;

// not get full path name
{
char* pName = PsGetProcessName();
if(pName == NULL)
strcpy(buf, "SYSTEM");
else
strcpy(buf, pName);

return PS_SYSTEM_PROCESS;
}

if(IsOnlyName)
{
char* pName = PsGetProcessName();
if(pName == NULL)
strcpy(buf, "SYSTEM");
else
strcpy(buf, pName);
return PS_SYSTEM_PROCESS;
}

pFullName = PsGetModuleFileNameW();
if(pFullName == NULL)
{
char* pName = PsGetProcessName();
if(pName == NULL)
strcpy(buf, "SYSTEM");
else
strcpy(buf, pName);
return PS_SYSTEM_PROCESS;
}
else
{
UNICODE_STRING usFileName;
ANSI_STRING asFileName;

RtlInitUnicodeString(&usFileName, pFullName);

asFileName.Length = 0;
asFileName.MaximumLength = MAX_PATH;
asFileName.Buffer = buf;

RtlUnicodeStringToAnsiString(&asFileName, &usFileName, FALSE);
}

return PS_USER_PROCESS;
}

这段代码不是成了不管什么情况都返回PS_SYSTEM_PROCESS;吗?后面的代码完全没有必要啊,因为根本执行不到,,,
作者怎么会犯这种错误?

[编辑 -  2/20/04 by  november]
不再回忆从前,我已经生活在幸福当中。
xautofzx
驱动牛犊
驱动牛犊
  • 注册日期2003-11-23
  • 最后登录2008-04-20
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-03-06 21:22
分析的真是透彻。
syking
驱动牛犊
驱动牛犊
  • 注册日期2003-06-30
  • 最后登录2010-03-23
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-03-07 10:06
能给我一份吗,万分感谢!!
syking1@163.com
3x!
yuke
驱动牛犊
驱动牛犊
  • 注册日期2001-09-02
  • 最后登录2009-04-09
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-03-07 15:07
实际上这段代码有问题,但是没有影响XFILT的工作,这一点是可以肯定的,XFILT的源码是不能随意给的,因为这个会影响XFILT的作者,也是不应该的,对于想要的人来说价格也是可以接受的。

你可以登录 http://www.110i.net,通过 110i@110i.net 和我联系,我们一起来研究和探讨一下。

再见!
[color=blue]
游客

返回顶部