-
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
- Loading branch information
1 parent
d471b15
commit 758a829
Showing
5 changed files
with
178 additions
and
0 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
58 changes: 58 additions & 0 deletions
58
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,58 @@ | ||
/* 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 com.sun.jna.Native; | ||
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 | ||
*/ | ||
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 = size + 1024; | ||
lpidProcess = new int[size]; | ||
if (!Psapi.INSTANCE.EnumProcesses(lpidProcess, size * DWORD.SIZE, lpcbNeeded)) { | ||
throw new Win32Exception(Native.getLastError()); | ||
} | ||
} while (size == lpcbNeeded.getValue() / DWORD.SIZE); | ||
|
||
int[] result = new int[lpcbNeeded.getValue() / DWORD.SIZE]; | ||
System.arraycopy(lpidProcess, 0, result, 0, result.length); | ||
return result; | ||
} | ||
} |
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
52 changes: 52 additions & 0 deletions
52
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,52 @@ | ||
/* 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.assertTrue; | ||
|
||
import org.junit.Test; | ||
|
||
/** | ||
* Applies API tests on {@link PsapiUtil}. | ||
* | ||
* @author Torbjörn Svensson, azoff[at]svenskalinuxforeninen.se | ||
*/ | ||
public class PsapiUtilTest { | ||
@Test | ||
public void enumProcesses() { | ||
int[] pids = PsapiUtil.enumProcesses(); | ||
|
||
assertTrue("List should contain atleast one pid", pids.length > 0); | ||
|
||
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); | ||
} | ||
} |