<轉>得到其它進程的命令列

來源:互聯網
上載者:User

標籤:style   blog   http   io   color   os   ar   for   sp   

#include <windows.h>#include <stdio.h>#define ProcessBasicInformation 0typedef struct{    USHORT Length;    USHORT MaximumLength;    PWSTR  Buffer;} UNICODE_STRING, *PUNICODE_STRING;typedef struct{    ULONG          AllocationSize;    ULONG          ActualSize;    ULONG          Flags;    ULONG          Unknown1;    UNICODE_STRING Unknown2;    HANDLE         InputHandle;    HANDLE         OutputHandle;    HANDLE         ErrorHandle;    UNICODE_STRING CurrentDirectory;    HANDLE         CurrentDirectoryHandle;    UNICODE_STRING SearchPaths;    UNICODE_STRING ApplicationName;    UNICODE_STRING CommandLine;    PVOID          EnvironmentBlock;    ULONG          Unknown[9];    UNICODE_STRING Unknown3;    UNICODE_STRING Unknown4;    UNICODE_STRING Unknown5;    UNICODE_STRING Unknown6;} PROCESS_PARAMETERS, *PPROCESS_PARAMETERS;typedef struct{    ULONG               AllocationSize;    ULONG               Unknown1;    HINSTANCE           ProcessHinstance;    PVOID               ListDlls;    PPROCESS_PARAMETERS ProcessParameters;    ULONG               Unknown2;    HANDLE              Heap;} PEB, *PPEB;typedef struct{    DWORD ExitStatus;    PPEB  PebBaseAddress;    DWORD AffinityMask;    DWORD BasePriority;    ULONG UniqueProcessId;    ULONG InheritedFromUniqueProcessId;}   PROCESS_BASIC_INFORMATION;// ntdll!NtQueryInformationProcess (NT specific!)//// The function copies the process information of the// specified type into a buffer//// NTSYSAPI// NTSTATUS// NTAPI// NtQueryInformationProcess(//    IN HANDLE ProcessHandle,              // handle to process//    IN PROCESSINFOCLASS InformationClass, // information type//    OUT PVOID ProcessInformation,         // pointer to buffer//    IN ULONG ProcessInformationLength,    // buffer size in bytes//    OUT PULONG ReturnLength OPTIONAL      // pointer to a 32-bit//                                          // variable that receives//                                          // the number of bytes//                                          // written to the buffer // );typedef LONG (WINAPI *PROCNTQSIP)(HANDLE,UINT,PVOID,ULONG,PULONG);PROCNTQSIP NtQueryInformationProcess;BOOL GetProcessCmdLine(DWORD dwId,LPWSTR wBuf,DWORD dwBufLen);void main(int argc, char* argv[]){    if (argc<2)    {        printf("Usage:\n\ncmdline.exe ProcId\n");        return;    }    NtQueryInformationProcess = (PROCNTQSIP)GetProcAddress(        GetModuleHandleA("ntdll"),        "NtQueryInformationProcess"        );    if (!NtQueryInformationProcess)        return;    DWORD dwId;    sscanf(argv[1],"%lu",&dwId);    WCHAR wstr[255] = {0};    if (GetProcessCmdLine(dwId,wstr,sizeof(wstr)))        wprintf(L"Command line for process %lu is:\n%s\n",dwId,wstr);    else        wprintf(L"Could not get command line!");    system("pause");}BOOL GetProcessCmdLine(DWORD dwId,LPWSTR wBuf,DWORD dwBufLen){    LONG                      status;    HANDLE                    hProcess;    PROCESS_BASIC_INFORMATION pbi;    PEB                       Peb;    PROCESS_PARAMETERS        ProcParam;    DWORD                     dwDummy;    DWORD                     dwSize;    LPVOID                    lpAddress;    BOOL                      bRet = FALSE;    // Get process handle    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,dwId);    if (!hProcess)        return FALSE;    // Retrieve information    status = NtQueryInformationProcess( hProcess,        ProcessBasicInformation,        (PVOID)&pbi,        sizeof(PROCESS_BASIC_INFORMATION),        NULL        );    if (status)        goto cleanup;    if (!ReadProcessMemory( hProcess,        pbi.PebBaseAddress,        &Peb,        sizeof(PEB),        &dwDummy        )        )        goto cleanup;    if (!ReadProcessMemory( hProcess,        Peb.ProcessParameters,        &ProcParam,        sizeof(PROCESS_PARAMETERS),        &dwDummy        )        )        goto cleanup;    lpAddress = ProcParam.CommandLine.Buffer;    dwSize = ProcParam.CommandLine.Length;    if (dwBufLen<dwSize)        goto cleanup;    if (!ReadProcessMemory( hProcess,        lpAddress,        wBuf,        dwSize,        &dwDummy        )        )        goto cleanup;    bRet = TRUE;cleanup:    CloseHandle (hProcess);    return bRet;    } 

原文轉自:http://blog.donews.com/zwell/archive/2004/09/30/114988.aspx

<轉>得到其它進程的命令列

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.