| 
			 
					阅读:2752回复:11
				 
				如何在WDM File Filter System Driver里得到调用者名字?
					我在指定目录下有一组加密过的文件,现在希望只有在指定应用程序调用时,才给出正确内容。所以需要得到调用者名字。
 
							翻遍了手头的资料,都只有说Driver内部是如何运做的,没有提到这方面问题。 哪位大侠知道,请赐教。  | 
	|
					
						最新喜欢: | 
	
| 
			 沙发# 
								发布于: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				
			
					哥们, 你的问题解决了, 但我的问题你碰到吗?				 
							 | 
	|