wlrwx
驱动小牛
驱动小牛
  • 注册日期2002-04-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望11点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:2818回复:8

如何获取启动进程的程序目录??

楼主#
更多 发布于:2002-04-15 11:35
大家好,有一个小问题请教一下:

在DRIVER中,知道了进程的ID及进程的名字,如:
Oicq.exe 1072

我如何才能知道这个进程的详细路径??
比如:D:\\Program Files\\Oicq\\Oicq.exe

How can I do this?
 :P :P :P

最新喜欢:

ljmmaryljmmar... hongsinghongsi...
真正的浪子―――― 是掠过城市的微风,每个人都能感到他的清新,可没有人能留住...... 亦是划过天际的流星,所有人都能仰望他夺目的光芒,没有人能触及...... 风止于森林,流星损于黄土......非凡浪子归于他的最爱......
wilton
驱动牛犊
驱动牛犊
  • 注册日期2001-04-23
  • 最后登录2005-03-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-15 16:52
和Ring3通信,在Ring3用GetModuleFileNameEx得到。
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-04-15 17:09
用户被禁言,该主题自动屏蔽!
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-04-15 17:50
这是前一阵子哪位大侠的贴子,我把它存了下来,仅作参考:

if ( Irp )
{
pEthread = Irp->Tail.Overlay.Thread;
}else
{
pEthread = PsGetCurrentThread();
}

if (!pEthread)... //error


pREProcess = pEthread->ThreadsProcess;

if (!pREProcess ).... //error

dwRProcessId = pREProcess->UniqueProcessId;

InitializeObjectAttributes( &RObjectAttributes, 0, 0, 0, 0 );
RClientId.UniqueProcess = (HANDLE)dwRProcessId;
RClientId.UniqueThread = 0;


ntRStatus = ZwOpenProcess( &hRProcess, PROCESS_ALL_ACCESS,&RObjectAttributes, &RClientId );

if( !NT_SUCCESS(ntRStatus) ) .. //error

ntRStatus = ZwReadVirtualMemory( hRProcess, pREProcess->Peb,&Peb, sizeof(Peb), &dwRReturnedBytes );

if( !NT_SUCCESS(ntRStatus) ) .. //error

if(! Peb.ProcessParameters )... //error

ntRStatus = ZwReadVirtualMemory( hRProcess, Peb.ProcessParameters, &PebParams, sizeof(PebParams), &dwRReturnedBytes );


if( !NT_SUCCESS(ntRStatus) ) .. //error


pRCommandLine = PebParams.ApplicationName.Buffer;
nRSize = PebParams.ApplicationName.Length;
if( pRCommandLine && nRSize > 0 && nRSize < 2048 )
{
pLocalCommandLine = ExAllocatePool( NonPagedPool, nRSize +2);

RtlZeroMemory(pLocalCommandLine , nRSize +2);
ntRStatus = ZwReadVirtualMemory( hRProcess, pRCommandLine,
pLocalCommandLine, nRSize, &dwRReturnedBytes );


if( !NT_SUCCESS(ntRStatus)) ..//error

RtlInitUnicodeString(&UCmdLine,pLocalCommandLine);
AnsiStr.Buffer = NULL;
RtlUnicodeStringToAnsiString (&AnsiStr, &UCmdLine, TRUE);
strncpy(ProcessName, AnsiStr.Buffer, min (AnsiStr.Length, PROCNAMELEN -1));
RtlFreeAnsiString(&AnsiStr);

Tom_lyd
AChen
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2002-10-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-18 01:06
这段代码可是有许多函数找不到原型呀,如ZwReadVirtualMemory,
ZwOpenProcess,等等。

哪位可以告诉我,如何让楼上的代码执行!!
This posting is provided "AS IS" with no warranties, and confers no rights.
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-04-18 10:19
NTSYSAPI
NTSTATUS
NTAPI
ZwReadVirtualMemory(
IN HANDLE hProcess,
IN PVOID BaseAddress,
OUT PVOID Buffer,
IN ULONG BytesToRead,
OUT PULONG BytesRead
);


NTSYSAPI
NTSTATUS
NTAPI
ZwOpenProcess(
OUT PHANDLE phProcess,
IN ACCESS_MASK AccessMask,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID pClientId
);

你要自己加原型,link时有ntoskrnl.lib就成
AChen
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2002-10-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-04-18 16:49
很想给分呀,兄弟干脆,把PEB, ETHREAD的结果也贴出来吧

因为我似乎调不出来

This posting is provided "AS IS" with no warranties, and confers no rights.
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-04-18 17:30
“结果”?是“结构”吗?
typedef struct _KTHREAD {
    DISPATCHER_HEADER           Header;
    LIST_ENTRY                  MutantListHead;
    PVOID                       InitialStack;
    PVOID                       StackLimit;
    struct _TEB                 *Teb;
    PVOID                       TlsArray;
    PVOID                       KernelStack;
    BOOLEAN                     DebugActive;
    UCHAR                       State;
    USHORT                      Alerted;
    UCHAR                       Iopl;
    UCHAR                       NpxState;
    UCHAR                       Saturation;
    UCHAR                       Priority;
    KAPC_STATE                  ApcState;
    ULONG                       ContextSwitches;
    NTSTATUS                    WaitStatus;
    UCHAR                       WaitIrql;
    UCHAR                       WaitMode;
    UCHAR                       WaitNext;
    UCHAR                       WaitReason;
    PKWAIT_BLOCK                WaitBlockList;
    LIST_ENTRY                  WaitListEntry;
    ULONG                       WaitTime;
    UCHAR                       BasePriority;
    UCHAR                       DecrementCount;
    UCHAR                       PriorityDecrement;
    UCHAR                       Quantum;
    KWAIT_BLOCK                 WaitBlock[4];
    ULONG                       LegoData;
    ULONG                       KernelApcDisable;
    ULONG                       UserAffinity;
    BOOLEAN                     SystemAffinityActive;
#if (_WIN32_WINNT < 0x0500)
    UCHAR                       Pad[3];
#else // (_WIN32_WINNT >= 0x0500)
    UCHAR                       PowerState;
    UCHAR                       NpxIrql;
    UCHAR                       Pad[1];
#endif // (_WIN32_WINNT >= 0x0500)
    PSERVICE_DESCRIPTOR_TABLE   ServiceDescriptorTable;
    PKQUEUE                     Queue;
    KSPIN_LOCK                  ApcQueueLock;
    KTIMER                      Timer;
    LIST_ENTRY                  QueueListEntry;
    ULONG                       Affinity;
    BOOLEAN                     Preempted;
    BOOLEAN                     ProcessReadyQueue;
    BOOLEAN                     KernelStackResident;
    UCHAR                       NextProcessor;
    PVOID                       CallbackStack;
    PVOID                       Win32Thread;
    PKTRAP_FRAME                TrapFrame;
    PKAPC_STATE                 ApcStatePointer[2];
#if (_WIN32_WINNT >= 0x0500)
    UCHAR                       PreviousMode;
#endif // (_WIN32_WINNT >= 0x0500)
    BOOLEAN                     EnableStackSwap;
    BOOLEAN                     LargeStack;
    UCHAR                       ResourceIndex;
#if (_WIN32_WINNT < 0x0500)
    UCHAR                       PreviousMode;
#endif // (_WIN32_WINNT < 0x0500)
    ULONG                       KernelTime;
    ULONG                       UserTime;
    KAPC_STATE                  SavedApcState;
    BOOLEAN                     Alertable;
    UCHAR                       ApcStateIndex;
    BOOLEAN                     ApcQueueable;
    BOOLEAN                     AutoAlignment;
    PVOID                       StackBase;
    KAPC                        SuspendApc;
    KSEMAPHORE                  SuspendSemaphore;
    LIST_ENTRY                  ThreadListEntry;
    UCHAR                       FreezeCount;
    UCHAR                       SuspendCount;
    UCHAR                       IdealProcessor;
    BOOLEAN                     DisableBoost;
} KTHREAD, *PKTHREAD;

typedef struct _ETHREAD {
    KTHREAD                         Tcb;
    LARGE_INTEGER                   CreateTime;
    union {
        LARGE_INTEGER               ExitTime;
        LIST_ENTRY                  LpcReplyChain;
    };
    union {
        NTSTATUS                    ExitStatus;
        PVOID                       OfsChain;
    };
    LIST_ENTRY                      PostBlockList;
    LIST_ENTRY                      TerminationPortList;
    KSPIN_LOCK                      ActiveTimerListLock;
    LIST_ENTRY                      ActiveTimerListHead;
    CLIENT_ID                       Cid;
    KSEMAPHORE                      LpcReplySemaphore;
    PLPC_MESSAGE                    LpcReplyMessage;
    ULONG                           LpcReplyMessageId;
    ULONG                           PerformanceCountLow;
    PPS_IMPERSONATION_INFORMATION   ImpersonationInfo;
    LIST_ENTRY                      IrpList;
    PVOID                           TopLevelIrp;
    PDEVICE_OBJECT                  DeviceToVerify;
    ULONG                           ReadClusterSize;
    BOOLEAN                         ForwardClusterOnly;
    BOOLEAN                         DisablePageFaultClustering;
    BOOLEAN                         DeadThread;
#if (_WIN32_WINNT >= 0x0500)
    BOOLEAN                         HideFromDebugger;
#endif // (_WIN32_WINNT >= 0x0500)
#if (_WIN32_WINNT < 0x0500)
    BOOLEAN                         HasTerminated;
#else // (_WIN32_WINNT >= 0x0500)
    ULONG                           HasTerminated;
#endif // (_WIN32_WINNT >= 0x0500)
#if (_WIN32_WINNT < 0x0500)
    PKEVENT_PAIR                    EventPair;
#endif // (_WIN32_WINNT < 0x0500)
    ACCESS_MASK                     GrantedAccess;
    PEPROCESS                       ThreadsProcess;
    PKSTART_ROUTINE                 StartAddress;
    union {
        PVOID                       Win32StartAddress;
        ULONG                       LpcReceivedMessageId;
    };
    BOOLEAN                         LpcExitThreadCalled;
    BOOLEAN                         HardErrorsAreDisabled;
    BOOLEAN                         LpcReceivedMsgIdValid;
    BOOLEAN                         ActiveImpersonationInfo;
    ULONG                           PerformanceCountHigh;
#if (_WIN32_WINNT >= 0x0500)
    LIST_ENTRY                      ThreadListEntry;
#endif // (_WIN32_WINNT >= 0x0500)
} ETHREAD, *PETHREAD;

typedef struct _TEB {
    NT_TIB      Tib;
    PVOID       EnvironmentPointer;
    CLIENT_ID   ClientId;
    HANDLE      RpcHandle;
    PVOID       *ThreadLocalStorage;
    PVOID       Peb;
    ULONG       LastErrorValue;
} TEB, *PTEB;
AChen
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2002-10-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-04-18 21:55
强烈表示对pjf的敬意。

我这么就找不到呢?唉,我笨
This posting is provided "AS IS" with no warranties, and confers no rights.
游客

返回顶部