나는 아래의 코드를 사용하여 Windows에서 실행중인 프로세스의 명령 줄 얻기 위해 노력하고 있어요 : 을하지만 단지 이런 IDman.exe
의 명령 줄 수 :실행중인 프로세스 명령 줄
C:\Program Files (x86)\Internet Download Manager\IDMan.exe" /onboot
그러나 커맨드 라인이있는 다른 많은 프로세스가 있다는 것을 알고 있습니다.
내 코드에 문제가 있는지 어떤 아이디어를 제공합니다.PVOID GetPebAddress(HANDLE ProcessHandle)
{
_NtQueryInformationProcess NtQueryInformationProcess =
(_NtQueryInformationProcess)GetProcAddress(
GetModuleHandleA("ntdll.dll"), "NtQueryInformationProcess");
PROCESS_BASIC_INFORMATION pbi;
NtQueryInformationProcess(ProcessHandle, 0, &pbi, sizeof(pbi), NULL);
return pbi.PebBaseAddress;
}
void get_process_cmd_line(DWORD pID)
{
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ |
PROCESS_TERMINATE,
FALSE, pID);
PPEB ppeb = (PPEB) GetPebAddress(hProcess);
PPEB ppebCopy = (PPEB)malloc(sizeof(PEB));
BOOL result = ReadProcessMemory(hProcess,
ppeb,
ppebCopy,
sizeof(PEB),
NULL);
if(!result){std::cout<<"Er. adress";return;}
PRTL_USER_PROCESS_PARAMETERS pRtlProcParam = ppebCopy->ProcessParameters;
PRTL_USER_PROCESS_PARAMETERS pRtlProcParamCopy =
(PRTL_USER_PROCESS_PARAMETERS)malloc(sizeof(RTL_USER_PROCESS_PARAMETERS));
result = ReadProcessMemory(hProcess,
pRtlProcParam,
pRtlProcParamCopy,
sizeof(RTL_USER_PROCESS_PARAMETERS),
NULL);
if(!result){std::cout<<"Er. ";return;}
PWSTR wBuffer = pRtlProcParamCopy->CommandLine.Buffer;
USHORT len = pRtlProcParamCopy->CommandLine.Length;
PWSTR wBufferCopy = (PWSTR)malloc(len);
result = ReadProcessMemory(hProcess,
wBuffer,
wBufferCopy,
len,NULL);
if(!result){std::cout<<"Er. cmdLine";return;}
std::wcout<<wBufferCopy;
return;
}
편집 : 난 그냥 지금 get_process_cmd_line (DWORD PID)는 프로세스의 명령 줄을 얻는 데 성공하면 그것은 더 이상 성공할 수 없다 것으로 나타났습니다! –