在内核层如何获取当前应用程序的路径

auqvjjj333 2011-06-19 06:03:00
找了半天API,没找到得到当前应用程序路径的。
现在写个软件需要通过ID,或其它方式来得到当前应用程序的路径,然后返回给用户层,劳烦知道贴出来下。
...全文
229 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lactoferrin 2011-06-20
  • 打赏
  • 举报
回复
这两个定义了一些相同的东西,我只用ntddk.h
auqvjjj333 2011-06-20
  • 打赏
  • 举报
回复
好的,windows.h 和ntddk.h我放一起老是冲突,您编写驱动的时候有没有这两个头文件在一起的例子啊,还是根本就不能在一起?
Lactoferrin 2011-06-20
  • 打赏
  • 举报
回复
windows.h也没有PROCESS_PARAMETERS
HINSTANCE就是void*
你的另一个帖子里面我发了PROCESS_PARAMETERS的结构
auqvjjj333 2011-06-20
  • 打赏
  • 举报
回复
请教个问题,windows.h头文件是不是不能在驱动工程里包含啊。
PPROCESS_PARAMETERS
HINSTANCE
PEB结构的这两个成员,好像也不认识,说未声明
Lactoferrin 2011-06-19
  • 打赏
  • 举报
回复
你需要对可信任进程做保护
auqvjjj333 2011-06-19
  • 打赏
  • 举报
回复
我现在还没写,在做一个教程的题目,天书夜读的反病毒那一课。
对一些总是信任的进程维护一个表,我的思路是将一些可信任进程的绝对路径添加一个文件中,然后通过路径来判断第一关,第二关再用MD5来检验,你看这样可行么?
Lactoferrin 2011-06-19
  • 打赏
  • 举报
回复
居然忘了PsGetProcessPeb
你调用PsGetProcessPeb(PsGetCurrentProcess())就可以得到当前进程的PebBaseAddress,不过PsGetProcessPeb是未公开的函数
Lactoferrin 2011-06-19
  • 打赏
  • 举报
回复
贴一下你的代码
auqvjjj333 2011-06-19
  • 打赏
  • 举报
回复
恩。先把贴结了再慢慢研究,谢谢你的帮助,非常有用。虽然现在还没弄出来。
Lactoferrin 2011-06-19
  • 打赏
  • 举报
回复
读这些东西的时候irql需要是PASSIVE_LEVEL,因为它们可能不在物理内存
auqvjjj333 2011-06-19
  • 打赏
  • 举报
回复
好的。我试试先,一会给你结贴,两个贴的分都给你了,一会不懂的请指教。非常感谢
Lactoferrin 2011-06-19
  • 打赏
  • 举报
回复
你hook也得有人去执行
而且不如这个方便,效果也不好
auqvjjj333 2011-06-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lactoferrin 的回复:]
如果是当前进程就不用KeStackAttachProcess
[/Quote]

请问,可不可以通过HOOK某个函数,从那里的参数获取
Lactoferrin 2011-06-19
  • 打赏
  • 举报
回复
如果是当前进程就不用KeStackAttachProcess
Lactoferrin 2011-06-19
  • 打赏
  • 举报
回复
ZwQueryInformationProcess可以得到进程的peb地址
typedef struct _PEB
{
UCHAR InheritedAddressSpace;
UCHAR ReadImageFileExecOptions;
UCHAR BeingDebugged;
UCHAR BitField;
/*ULONG ImageUsesLargePages: 1;
ULONG IsProtectedProcess: 1;
ULONG IsLegacyProcess: 1;
ULONG IsImageDynamicallyRelocated: 1;
ULONG SpareBits: 4;*/
PVOID Mutant;
PVOID ImageBaseAddress;
PPEB_LDR_DATA Ldr;
PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
PVOID SubSystemData;
PVOID ProcessHeap;
PRTL_CRITICAL_SECTION FastPebLock;
.........
从peb结构找到ProcessParameters的地址
typedef struct _RTL_USER_PROCESS_PARAMETERS
{
ULONG MaximumLength;
ULONG Length;
ULONG Flags;
ULONG DebugFlags;
PVOID ConsoleHandle;
ULONG ConsoleFlags;
PVOID StandardInput;
PVOID StandardOutput;
PVOID StandardError;
CURDIR CurrentDirectory;
UNICODE_STRING DllPath;
UNICODE_STRING ImagePathName;
UNICODE_STRING CommandLine;
PVOID Environment;
ULONG StartingX;
ULONG StartingY;
ULONG CountX;
ULONG CountY;
ULONG CountCharsX;
ULONG CountCharsY;
ULONG FillAttribute;
ULONG WindowFlags;
ULONG ShowWindowFlags;
UNICODE_STRING WindowTitle;
UNICODE_STRING DesktopInfo;
UNICODE_STRING ShellInfo;
UNICODE_STRING RuntimeData;
RTL_DRIVE_LETTER_CURDIR CurrentDirectores[32];
ULONG EnvironmentSize;
} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
ImagePathName就是exe路径
读取这些东西要先KeStackAttachProcess后才行,因为这些东西在用户空间

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧