Windows 2000でQueryFullProcessImageNameっぽい関数を作る

Java 8 が プロシージャーエントリーポイント QueryFullProcessImageNameA が kernel32.dllに見つかりませんとか言うので。ラッパーのテスト。

__declspec(dllexport) BOOL WINAPI QueryFullProcessImageName(void* hProcess,int mode,TCHAR *fn,DWORD *sz){
    HMODULE hMod;
    DWORD cbNeeded,t;
    TCHAR ftmp[640]={0};
    if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded)) {
        if(mode){
                if(!GetMappedFileName(hProcess, hMod, ftmp, 640) ) {
                    return 0;
                }
        } else {
            if(!GetModuleFileNameEx(hProcess, hMod, ftmp, 640) ){
                    return 0;
            }
        }
        t=lstrlen(ftmp);
    } else return 0;
    if(*sz>=t){
        lstrcpyA(fn,ftmp);
    }
    *sz=t;
    return 1;
}

    xx=640;
    QueryFullProcessImageName(hProcess,0,szProcessName,&xx);
    printf("\n1:%s[%d/%d]\n",szProcessName,xx,GetLastError());
    xx=640;
    QueryFullProcessImageName(hProcess,1,szProcessName,&xx);
    printf("\n2:%s[%d/%d]\n",szProcessName,xx,GetLastError());

検証コード

akk
実行結果。OKっすね・ω・ キラリ

関連サイト:
GetProcessImageFileName()で取得できるパス名について
デバイス名(\Device\HarddiskVolume1)をドライブレター(C:\)に変換する - shouhの日記
生産がす: 日記ちゃんGetProcessImageFileName

代わりに GetProcessImageFileName を使えばいいのだけど、これで取得したフルパスはドライブレター部分が変な文字列になっている。

フラグで変更できるはずなんだけど、何がやりたいのだろう・ω・;

Windows 2000でQueryFullProcessImageNameっぽい関数を作る

Java 8 が プロシージャーエントリーポイント QueryFullProcessImageNameA が kernel32.dllに見つかりませんとか言うので。ラッパーのテスト。

__declspec(dllexport) BOOL WINAPI QueryFullProcessImageName(void* hProcess,int mode,TCHAR *fn,DWORD *sz){
    HMODULE hMod;
    DWORD cbNeeded,t;
    TCHAR ftmp[640]={0};
    if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded)) {
        if(mode){
                if(!GetMappedFileName(hProcess, hMod, ftmp, 640) ) {
                    return 0;
                }
        } else {
            if(!GetModuleFileNameEx(hProcess, hMod, ftmp, 640) ){
                    return 0;
            }
        }
        t=lstrlen(ftmp);
    } else return 0;
    if(*sz>=t){
        lstrcpyA(fn,ftmp);
    }
    *sz=t;
    return 1;
}

    xx=640;
    QueryFullProcessImageName(hProcess,0,szProcessName,&xx);
    printf("\n1:%s[%d/%d]\n",szProcessName,xx,GetLastError());
    xx=640;
    QueryFullProcessImageName(hProcess,1,szProcessName,&xx);
    printf("\n2:%s[%d/%d]\n",szProcessName,xx,GetLastError());

検証コード

akk
実行結果。OKっすね・ω・ キラリ

関連サイト:
GetProcessImageFileName()で取得できるパス名について
デバイス名(\Device\HarddiskVolume1)をドライブレター(C:\)に変換する - shouhの日記
生産がす: 日記ちゃんGetProcessImageFileName

代わりに GetProcessImageFileName を使えばいいのだけど、これで取得したフルパスはドライブレター部分が変な文字列になっている。

フラグで変更できるはずなんだけど、何がやりたいのだろう・ω・;

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です