阅读:2521回复:11
如何在WDM File Filter System Driver里得到调用者名字?
我在指定目录下有一组加密过的文件,现在希望只有在指定应用程序调用时,才给出正确内容。所以需要得到调用者名字。
翻遍了手头的资料,都只有说Driver内部是如何运做的,没有提到这方面问题。 哪位大侠知道,请赐教。 |
|
最新喜欢:flyfox |
沙发#
发布于:2001-06-26 12:36
我不知道你的wdm filter是指什么东西? 我有办法获得, 但不是wdm模型, 仅仅是一个中间driver.
|
|
板凳#
发布于:2001-06-26 12:47
我需要在NT/2000上的Driver里取到。如果你的做法是在NT/2000上的,那请先告诉我吧。
谢谢。 |
|
地板#
发布于:2001-06-26 13:04
希望你能说的详细点, 不知道我的代码对你能不能用! 你是自己写的fileter还是借鉴别的例子? 一般这样的sample里都有这些代码. ifsk里的filspy就有!
|
|
地下室#
发布于:2001-06-26 13:10
我就是基于filespy做的啊,可是我还是没找到有关于调用者名字的地方。
比如是“c:\winnt\notepad.exe”。。。。 |
|
5楼#
发布于:2001-06-26 13:24
这个问题绝对能解决, 你有qq吗? 想跟你聊几句?
|
|
6楼#
发布于:2001-06-26 13:28
haha~~~
57187836 add me... |
|
7楼#
发布于:2001-06-26 13:56
贴出来呀,我也想知道。
|
|
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; |
|
|
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呢? |
|
10楼#
发布于:2001-06-27 12:21
在KERNEL MODE是不能区分调用者的.除非你查看KERNEL MODE的
STACK. 看返回地址属于哪个DLL. 但是STACK是不确定的. 因为 读写操作进入FILE SYS HOOK时可能不在调用者的CONTEXT. 你只有在USER MODE在调用时加特殊标记了. |
|
|
11楼#
发布于:2001-06-27 12:49
哥们, 你的问题解决了, 但我的问题你碰到吗?
|
|