-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add mapping for EnumProcesses to Psapi
Added utility method QueryFullProcessImageName that takes a PID. Fixed QueryFullProcessImageName to properly handle paths longer than 260 characters that can happen on Win10 / paths with UNC.
- Loading branch information
1 parent
dee2615
commit 22dc037
Showing
7 changed files
with
228 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
57 changes: 57 additions & 0 deletions
57
contrib/platform/src/com/sun/jna/platform/win32/PsapiUtil.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/* Copyright (c) 2020 Torbjörn Svensson, All Rights Reserved | ||
* | ||
* The contents of this file is dual-licensed under 2 | ||
* alternative Open Source/Free licenses: LGPL 2.1 or later and | ||
* Apache License 2.0. (starting with JNA version 4.0.0). | ||
* | ||
* You can freely decide which license you want to apply to | ||
* the project. | ||
* | ||
* You may obtain a copy of the LGPL License at: | ||
* | ||
* http://www.gnu.org/licenses/licenses.html | ||
* | ||
* A copy is also included in the downloadable source code package | ||
* containing JNA, in file "LGPL2.1". | ||
* | ||
* You may obtain a copy of the Apache License at: | ||
* | ||
* http://www.apache.org/licenses/ | ||
* | ||
* A copy is also included in the downloadable source code package | ||
* containing JNA, in file "AL2.0". | ||
*/ | ||
package com.sun.jna.platform.win32; | ||
|
||
import java.util.Arrays; | ||
|
||
import com.sun.jna.platform.win32.WinDef.DWORD; | ||
import com.sun.jna.ptr.IntByReference; | ||
|
||
/** | ||
* Psapi utility API. | ||
* | ||
* @author Torbjörn Svensson, azoff[at]svenskalinuxforeninen.se | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong. |
||
*/ | ||
public abstract class PsapiUtil { | ||
|
||
/** | ||
* Retrieves the process identifier for each process object in the system. | ||
* | ||
* @return Array of pids | ||
*/ | ||
public static int[] enumProcesses() { | ||
int size = 0; | ||
int[] lpidProcess = null; | ||
IntByReference lpcbNeeded = new IntByReference(); | ||
do { | ||
size += 1024; | ||
lpidProcess = new int[size]; | ||
if (!Psapi.INSTANCE.EnumProcesses(lpidProcess, size * DWORD.SIZE, lpcbNeeded)) { | ||
throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); | ||
} | ||
} while (size == lpcbNeeded.getValue() / DWORD.SIZE); | ||
|
||
return Arrays.copyOf(lpidProcess, lpcbNeeded.getValue() / DWORD.SIZE); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
53 changes: 53 additions & 0 deletions
53
contrib/platform/test/com/sun/jna/platform/win32/PsapiUtilTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
/* Copyright (c) 2020 Torbjörn Svensson, All Rights Reserved | ||
* | ||
* The contents of this file is dual-licensed under 2 | ||
* alternative Open Source/Free licenses: LGPL 2.1 or later and | ||
* Apache License 2.0. (starting with JNA version 4.0.0). | ||
* | ||
* You can freely decide which license you want to apply to | ||
* the project. | ||
* | ||
* You may obtain a copy of the LGPL License at: | ||
* | ||
* http://www.gnu.org/licenses/licenses.html | ||
* | ||
* A copy is also included in the downloadable source code package | ||
* containing JNA, in file "LGPL2.1". | ||
* | ||
* You may obtain a copy of the Apache License at: | ||
* | ||
* http://www.apache.org/licenses/ | ||
* | ||
* A copy is also included in the downloadable source code package | ||
* containing JNA, in file "AL2.0". | ||
*/ | ||
package com.sun.jna.platform.win32; | ||
|
||
import static org.junit.Assert.assertNotNull; | ||
import static org.junit.Assert.assertTrue; | ||
|
||
import org.junit.Test; | ||
|
||
/** | ||
* Applies API tests on {@link PsapiUtil}. | ||
* | ||
* @author Torbjörn Svensson, azoff[at]svenskalinuxforeninen.se | ||
*/ | ||
@SuppressWarnings("nls") | ||
public class PsapiUtilTest { | ||
@Test | ||
public void enumProcesses() { | ||
int[] pids = PsapiUtil.enumProcesses(); | ||
assertNotNull("List should not be null", pids); | ||
|
||
int myPid = Kernel32.INSTANCE.GetCurrentProcessId(); | ||
boolean foundMyPid = false; | ||
for (int i = 0; i < pids.length; i++) { | ||
if (pids[i] == myPid) { | ||
foundMyPid = true; | ||
break; | ||
} | ||
} | ||
assertTrue("List should contain my pid", foundMyPid); | ||
} | ||
} |
I just noticed a small typo in the email address in this class. Would you mind changing it to svenskalinuxforeningen.se @matthiasblaesing before releasing 5.6.0?