如何在筛选器驱动中获取当前进程映像文件的全名?

编程入门 行业动态 更新时间:2024-10-24 23:26:47
本文介绍了如何在筛选器驱动中获取当前进程映像文件的全名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

在过滤驱动中,可以调用IoGetCurrentProcess获取PEPROCESS结构,然后调用PsGetProcessImageFileName获取文件名。

我的问题是如何获取进程图像文件的完整名称?

推荐答案

here我找到了类似@Martin drab代码的完整代码

编辑:新增修复代码

NTSTATUS GetProcessImageName( PEPROCESS eProcess, PUNICODE_STRING* ProcessImageName ) { NTSTATUS status = STATUS_UNSUCCESSFUL; ULONG returnedLength; HANDLE hProcess = NULL; PAGED_CODE(); // this eliminates the possibility of the IDLE Thread/Process if (eProcess == NULL) { return STATUS_INVALID_PARAMETER_1; } status = ObOpenObjectByPointer(eProcess, 0, NULL, 0, 0, KernelMode, &hProcess); if (!NT_SUCCESS(status)) { DbgPrint("ObOpenObjectByPointer Failed: %08x ", status); return status; } if (ZwQueryInformationProcess == NULL) { UNICODE_STRING routineName = RTL_CONSTANT_STRING(L"ZwQueryInformationProcess"); ZwQueryInformationProcess = (QUERY_INFO_PROCESS)MmGetSystemRoutineAddress(&routineName); if (ZwQueryInformationProcess == NULL) { DbgPrint("Cannot resolve ZwQueryInformationProcess "); status = STATUS_UNSUCCESSFUL; goto cleanUp; } } /* Query the actual size of the process path */ status = ZwQueryInformationProcess(hProcess, ProcessImageFileName, NULL, // buffer 0, // buffer size &returnedLength); if (STATUS_INFO_LENGTH_MISMATCH != status) { DbgPrint("ZwQueryInformationProcess status = %x ", status); goto cleanUp; } *ProcessImageName = kmalloc(returnedLength); if (ProcessImageName == NULL) { status = STATUS_INSUFFICIENT_RESOURCES; goto cleanUp; } /* Retrieve the process path from the handle to the process */ status = ZwQueryInformationProcess(hProcess, ProcessImageFileName, *ProcessImageName, returnedLength, &returnedLength); if (!NT_SUCCESS(status)) kfree(*ProcessImageName); cleanUp: ZwClose(hProcess); return status; } FLT_POSTOP_CALLBACK_STATUS PostCreate( _Inout_ PFLT_CALLBACK_DATA Data, _In_ PCFLT_RELATED_OBJECTS FltObjects, _In_opt_ PVOID CompletionContext, _In_ FLT_POST_OPERATION_FLAGS Flags ) { PUNICODE_STRING pni = NULL; NTSTATUS status = STATUS_UNSUCCESSFUL; status = GetProcessImageName(IoThreadToProcess(Data->Thread), &pni); if (NT_SUCCESS(status)) { DbgPrint("ProcessName = %ws ", pni->Buffer); kfree(pni); } else { DbgPrint("GetProcessImageName status = %x ", status); } // ... }

更多推荐

如何在筛选器驱动中获取当前进程映像文件的全名?

本文发布于:2023-11-17 11:48:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1609913.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:全名   映像   进程   文件   如何在

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!