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()); |
検証コード
実行結果。OKっすね・ω・ キラリ
関連サイト:
GetProcessImageFileName()で取得できるパス名について
デバイス名(\Device\HarddiskVolume1)をドライブレター(C:\)に変換する - shouhの日記
生産がす: 日記ちゃんGetProcessImageFileName
代わりに GetProcessImageFileName を使えばいいのだけど、これで取得したフルパスはドライブレター部分が変な文字列になっている。 |
フラグで変更できるはずなんだけど、何がやりたいのだろう・ω・;
Comments