lushan
驱动牛犊
驱动牛犊
  • 注册日期2001-06-26
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2521回复:11

如何在WDM File Filter System Driver里得到调用者名字?

楼主#
更多 发布于:2001-06-26 10:56
我在指定目录下有一组加密过的文件,现在希望只有在指定应用程序调用时,才给出正确内容。所以需要得到调用者名字。
翻遍了手头的资料,都只有说Driver内部是如何运做的,没有提到这方面问题。
哪位大侠知道,请赐教。

最新喜欢:

flyfoxflyfox
xuye
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2008-05-05
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-06-26 12:36
我不知道你的wdm filter是指什么东西? 我有办法获得, 但不是wdm模型, 仅仅是一个中间driver.
lushan
驱动牛犊
驱动牛犊
  • 注册日期2001-06-26
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-06-26 12:47
我需要在NT/2000上的Driver里取到。如果你的做法是在NT/2000上的,那请先告诉我吧。
谢谢。
xuye
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2008-05-05
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-06-26 13:04
希望你能说的详细点, 不知道我的代码对你能不能用! 你是自己写的fileter还是借鉴别的例子? 一般这样的sample里都有这些代码. ifsk里的filspy就有!
lushan
驱动牛犊
驱动牛犊
  • 注册日期2001-06-26
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-06-26 13:10
我就是基于filespy做的啊,可是我还是没找到有关于调用者名字的地方。
比如是“c:\winnt\notepad.exe”。。。。
xuye
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2008-05-05
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-06-26 13:24
这个问题绝对能解决, 你有qq吗? 想跟你聊几句?
lushan
驱动牛犊
驱动牛犊
  • 注册日期2001-06-26
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-06-26 13:28
haha~~~
57187836

add me...
qsc
qsc
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2010-12-24
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-06-26 13:56
贴出来呀,我也想知道。
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-06-26 15:17
有2个方法。
1.查EPROCESS的IMAGE NAME。
2。查PEB结构。记住,PEB是USER MODE的数据结构。 只有当当前
进程就是调用者时才能行。
typedef
{
  ULONG                                     AllocationSize;
  ULONG                                     Unknown1;
  HINSTANCE                             ProcessHinstance;
  PVOID                                       ListDlls;
  PPROCESS_PARAMETERS ProcessParameters;
  ULONG                                      Unknown2;
  HANDLE                                    Heap;
} PEB;

typedef
{
  ULONG                     AllocationSize;
  ULONG                     ActualSize;
  ULONG                     Flags;
  ULONG                     Unknown1;
  UNICODE_STRING Unknown2;
  HANDLE                   InputHandle;
  HANDLE                   OutputHandle;
  HANDLE                   ErrorHandle;
  UNICODE_STRING CurrentDirectory;
  HANDLE                   CurrentDirectoryHandle;
  UNICODE_STRING SearchPaths;
  UNICODE_STRING ApplicationName;
  UNICODE_STRING CommandLine;
  PVOID                      EnvironmentBlock;
  ULONG                     Unknown[9];
  UNICODE_STRING Unknown3;
  UNICODE_STRING Unknown4;
  UNICODE_STRING Unknown5;
  UNICODE_STRING Unknown6;
} PROCESS_PARAMETERS;
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
lushan
驱动牛犊
驱动牛犊
  • 注册日期2001-06-26
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-06-26 17:00
#define SYSNAME    "System"
#define NT_PROCNAMELEN  16
ULONG ProcessNameOffset;

ULONG FilemonGetProcessNameOffset(VOID)
{
    PEPROCESS       curproc;
    int             i;

    curproc = PsGetCurrentProcess();

    for( i = 0; i < 3*PAGE_SIZE; i++ ) {
        if( !strncmp( SYSNAME, (PCHAR) curproc + i, strlen(SYSNAME) )) {
            return i;
        }
    }
    return 0;
}

PCHAR FilemonGetProcess(PCHAR ProcessName)
{
    PEPROCESS       curproc;
    char            *nameptr;
    ULONG           i;

    if( ProcessNameOffset ) {
        curproc = PsGetCurrentProcess();
        nameptr   = (PCHAR) curproc + ProcessNameOffset;
        
        strncpy( ProcessName, nameptr, NT_PROCNAMELEN-1 );
        ProcessName[NT_PROCNAMELEN-1] = 0;
        sprintf( ProcessName + strlen(ProcessName), ":%d", PsGetCurrentProcessId());

    } else {
        strcpy( ProcessName, "???" );
    }
    return ProcessName;
}

NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT  DriverObject,
    IN PUNICODE_STRING RegistryPath
)
{
...
...
ProcessNameOffset = FilemonGetProcessNameOffset();

}

呵呵,能找到了,谢谢各位。
不过我还有个问题,我要HOOK的是IIS调用ASP文件的这个时间点,这时候的调用者都是dllhost.exe,我怎么能知道这个dllhost.exe里面是asp.dll呢?
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2001-06-27 12:21
在KERNEL MODE是不能区分调用者的.除非你查看KERNEL MODE的
STACK. 看返回地址属于哪个DLL. 但是STACK是不确定的. 因为
读写操作进入FILE SYS HOOK时可能不在调用者的CONTEXT.
你只有在USER MODE在调用时加特殊标记了.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
xuye
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2008-05-05
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2001-06-27 12:49
哥们, 你的问题解决了, 但我的问题你碰到吗?
游客

返回顶部