GetProcessImageFileName

GetProcessImageFileName

有人可以说我使用对吗?

LPTSTR nameProc = "";
...
GetProcessImageFileName( hProcess, nameProc, 50 );

printf("name process : %s\n", nameProc);


我不使用win32类型,
GetProcessImageFileName的第二个参数需要一个LPTSTR typedef,第三个参数需要一个DWORD变量。
如果不是该方法,也许我没有以正确的方式打印nameProc的值? (顺便输出一个空字符串)

提前致谢。

(请尽量避免将我引向某些win32 api文档,我无意学习它,我只需要跟踪一个进程的使用内存,因此不再处理win类型)

编辑(更新的代码):

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;
}

最佳答案

nameProc必须是一个可变缓冲区,因为它是输出参数,目前可能会崩溃。更改此:

LPTSTR nameProc = "";


对此:

TCHAR nameProc[MAX_PATH];


还要通过MAX_PATH,此时您正在传递50。

关于c++ - GetProcessImageFileName和LPTSTR,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9449270/

10-11 00:43