进程的名字
来源:互联网 发布:mac全灭 编辑:程序博客网 时间:2024/04/28 05:42
typedef NTSTATUS (*QUERY_INFO_PROCESS) (
__in HANDLE ProcessHandle,
__in PROCESSINFOCLASS ProcessInformationClass,
__out_bcount(ProcessInformationLength) PVOID ProcessInformation,
__in ULONG ProcessInformationLength,
__out_opt PULONG ReturnLength
);
QUERY_INFO_PROCESS ZwQueryInformationProcess;
NTSTATUS GetProcessImageName(PUNICODE_STRING ProcessImageName)
{
NTSTATUS status;
ULONG returnedLength;
ULONG bufferLength;
PVOID buffer;
PUNICODE_STRING imageName;
PAGED_CODE(); // this eliminates the possibility of the IDLE Thread/Process
if (NULL == ZwQueryInformationProcess) {
UNICODE_STRING routineName;
RtlInitUnicodeString(&routineName, L"ZwQueryInformationProcess");
ZwQueryInformationProcess =
(QUERY_INFO_PROCESS) MmGetSystemRoutineAddress(&routineName);
if (NULL == ZwQueryInformationProcess) {
DbgPrint("Cannot resolve ZwQueryInformationProcess/n");
}
}
//
// Step one - get the size we need
//
status = ZwQueryInformationProcess( NtCurrentProcess(),
ProcessImageFileName,
NULL, // buffer
0, // buffer size
&returnedLength);
if (STATUS_INFO_LENGTH_MISMATCH != status) {
return status;
}
//
// Is the passed-in buffer going to be big enough for us?
// This function returns a single contguous buffer model...
//
bufferLength = returnedLength - sizeof(UNICODE_STRING);
if (ProcessImageName->MaximumLength < bufferLength) {
ProcessImageName->Length = (USHORT) bufferLength;
return STATUS_BUFFER_OVERFLOW;
}
//
// If we get here, the buffer IS going to be big enough for us, so
// let's allocate some storage.
//
buffer = ExAllocatePoolWithTag(PagedPool, returnedLength, 'ipgD');
if (NULL == buffer) {
return STATUS_INSUFFICIENT_RESOURCES;
}
//
// Now lets go get the data
//
status = ZwQueryInformationProcess( NtCurrentProcess(),
ProcessImageFileName,
buffer,
returnedLength,
&returnedLength);
if (NT_SUCCESS(status)) {
//
// Ah, we got what we needed
//
imageName = (PUNICODE_STRING) buffer;
RtlCopyUnicodeString(ProcessImageName, imageName);
}
//
// free our buffer
//
ExFreePool(buffer);
//
// And tell the caller what happened.
//
return status;
}
- 进程的名字
- 进程名字的赋值
- 进程的id获得进程的名字
- 查看当前端口对应的进程名字
- 通过HWND获取相应进程的名字
- 10.会改变自己名字的进程
- 如何结束某个名字的所有进程?
- 如何kill所有名字一样的进程
- 一条命令杀死指定名字的进程
- android 获得当前进程的名字
- Linux killall --杀死指定名字的进程
- 《android获得进程名字的方法》
- 一个根据进程名字,返回进程id的命令
- Linux下进程名字前面带[ ]的是什么进程
- 如何通过进程名字关闭系统正在运行的进程
- Linux下根据进程的名字杀死进程
- 知道进程的进程号,或进程名字,给进程发送信号
- 修改进程名字
- Java学习笔记之SWING -- 基本SWING程序(基础的ActionListener响应)
- 服务器端数据验证
- 将gridview的内容导出到excel中去
- 谁帮我调试下这个Socket编程的代码?
- INSERT INTO语句中直接插入一条SELECT语句
- 进程的名字
- 2005年毕业论文----J2ME手机游戏开发高计
- .net
- 进入net世界
- windows下svn-1.4.0环境布置和eclipse集成
- const
- 抽象工厂模式的好处
- 框架
- J2ME程序开发新手入门九大要点