GetProcessImageFileName und LPTSTR
Kann mir jemand sagen-wenn ich es richtig ?
LPTSTR nameProc = "";
...
GetProcessImageFileName( hProcess, nameProc, 50 );
printf("name process : %s\n", nameProc);
Ich bin nicht mit der win32-Arten,
das 2. argument der GetProcessImageFileName erfordert eine LPTSTR typedef und der Dritte nimmt eine DWORD variable.
wenn nicht die Methode vielleicht bin ich nicht drucken der Wert von nameProc der richtige Weg ? (es gibt eine leere Zeichenfolge, die durch die Art und Weise)
vielen Dank im Voraus.
(bitte versuchen zu vermeiden, was mich zu einigen win32-api-Dokumente, ich habe keine Absicht, um mehr darüber zu erfahren, brauche ich nur auf die Spur, die Verwendung von Speicher von einem Prozess, daher ich nicht nicht mehr viel mit win-Typen)
BEARBEITEN (aktualisiert code):
void printMemoryInfo( DWORD processID ) {
HANDLE hProcess;
TCHAR nameProc[MAX_PATH];
printf("\nProcess ID: %u\n", processID);
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID );
if (hProcess == NULL) return;
if (GetProcessImageFileName( hProcess, nameProc, sizeof(nameProc)/sizeof(*nameProc) )==0)
printf("error\n");
else printf("%s\n", nameProc);
}
int main (void) {
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
if (!EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded )) {
return 1;
}
cProcesses = cbNeeded/sizeof(DWORD);
for (i=0; i < cProcesses; i++) {
printMemoryInfo( aProcesses[i] );
}
return 0;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
nameProc
werden muss, um eine veränderliche Puffer, wie es ist ein output-parameter, im moment wird es wohl einfach Abstürzen. Ändern Sie diese:zu diesem:
Geht auch
MAX_PATH
wo Sie auf der Durchreise sind 50 im moment.TCHAR nameProc[50];
zuTCHAR nameProc[MAX_PATH];
. Dein Puffer ist viel zu klein.Können Sie nicht wollen, zu lernen, über die Win32-Typen (und IMHO ist es eine ziemlich schlechte Idee, da die Programmierung unter Windows Häufig die APIs kommen nützlich), aber auch ohne zu verstehen, was ein
LPTSTR
ist die MSDN-Dokumentation ist sehr explizit über den zweiten parameter:Also ist es ganz klar, dass Ihr
nameProc
ist nicht OK, da Sie nicht die Zuweisung von Speicher für Sie. Sie werden wahrscheinlich wollen, zu schreiben: