maverick4w
驱动牛犊
驱动牛犊
  • 注册日期2007-03-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:2536回复:0

如何获得windows任务管理器试图结束任务的进程信息

楼主#
更多 发布于:2007-12-26 11:16
我现在的目标是拦截任务管理器通过结束任务的方式关闭程序的行为

我已经完成的工作是:
1)发现通过Hook NtRequestWaitReplyPort后,分析参数RequestMessage中的MessageId,可以发现结束任务的行为
2)任务管理器调用NtRequestWaitReplyPort并非直接和期望被结束的程序进行通信,分析参数PortHandle后,发现任务管理器是和csrss.exe通信

现在我没有解决的问题:
还无法从NtRequestWaitReplyPort的输入参数中获取到目标进程的信息

下面是NtRequestWaitReplyPort和相关数据结构的定义

NTSYSAPI
NTSTATUS
NTAPI
NtRequestWaitReplyPort(
  IN HANDLE              PortHandle,
  IN PLPC_MESSAGE        Request,
  OUT PLPC_MESSAGE        IncomingReply );

typedef struct _LPC_MESSAGE {
  USHORT                  DataLength;
  USHORT                  Length;
  USHORT                  MessageType;
  USHORT                  DataInfoOffset;
  CLIENT_ID              ClientId;
  ULONG                  MessageId;
  ULONG                  CallbackId;
} LPC_MESSAGE, *PLPC_MESSAGE;

typedef struct _LPCP_PORT_OBJECT
{
    struct _LPCP_PORT_OBJECT *ConnectionPort;
    struct _LPCP_PORT_OBJECT *ConnectedPort;
    LPCP_PORT_QUEUE MsgQueue;
    CLIENT_ID Creator;
    PVOID ClientSectionBase;
    PVOID ServerSectionBase;
    PVOID PortContext;
    PETHREAD ClientThread;
    SECURITY_QUALITY_OF_SERVICE SecurityQos;
    SECURITY_CLIENT_CONTEXT StaticSecurity;
    LIST_ENTRY LpcReplyChainHead;
    LIST_ENTRY LpcDataInfoChainHead;
    union {
        PEPROCESS ServerProcess;
        PEPROCESS MappingProcess;
    };
    ULONG MaxMessageLength;
    ULONG MaxConnectionInfoLength;
    ULONG Flags;
    KEVENT WaitEvent;
} LPCP_PORT_OBJECT, *PLPCP_PORT_OBJECT;


各位牛牛们,帮忙帮忙,多谢啦!
游客

返回顶部