./src/windows/native/java/lang/ProcessImpl_md.c

Print this page
rev 5754 : [mq]: getPid-patch

*** 30,39 **** --- 30,41 ---- #include "jvm.h" #include "jni_util.h" #include "io_util.h" #include <windows.h> #include <io.h> + #include <tchar.h> + #include <psapi.h> /* We try to make sure that we can read and write 4095 bytes (the * fixed limit on Linux) to the pipe on all operating systems without * deadlock. Windows 2000 inexplicably appears to need an extra 24 * bytes of slop to avoid deadlock.
*** 388,392 **** --- 390,434 ---- if (h == INVALID_HANDLE_VALUE) { JNU_ThrowIOExceptionWithLastError(env, "CreateFileW"); } return ptr_to_jlong(h); } + + JNIEXPORT jint JNICALL + Java_java_lang_ProcessImpl_getProcessId(JNIEnv *env, jclass ignored, jlong handle) + { + return GetProcessId((HANDLE) handle); + } + + JNIEXPORT jint JNICALL + Java_java_lang_ProcessImpl_getCurrentPid(JNIEnv *env, jobject this) + { + return GetCurrentProcessId(); + } + + + JNIEXPORT jstring JNICALL + Java_java_lang_ProcessImpl_getModuleBaseName(JNIEnv *env, jclass ignored, jint pid) + { + char szProcessName[MAX_PATH]; + + // Get a handle to the process. + + HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | + PROCESS_VM_READ, + FALSE, pid ); + + // Get the process name. + + if (hProcess != NULL ) + { + HMODULE hMod; + DWORD cbNeeded; + + if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), + &cbNeeded) ) { + GetModuleBaseName( hProcess, hMod, szProcessName, + sizeof(szProcessName) ); + } + } + return szProcessName; + }