[英]How to use CreateProcessWithTokenW in Java using JNA
我們正在使用 createProcessAsUser function 創建一個子進程,該子進程使用 waffle 和 JNA 庫在登錄/模擬用戶的上下文中運行。
但是我們需要在模擬之后加載用戶配置文件,但是LoadUserProfile function 在 JNA 庫中不可用。
我們發現 CreateProcessWithTokenW 能夠加載用戶配置文件。 但是這個 function 在 JNA/Waffle 庫中也不可用。
誰能幫助我們如何加載用戶配置文件或如何在 Java 應用程序中使用 CreateProcessWithTokenW。
要將 java 中的CreateProcessWithTokenW
與 JNA 一起使用,您需要綁定 function。JNA 只是一個層,可以直接調用本機庫函數。 為此,JNA 使用本機接口的 java 描述,然后使用這些描述進行實際調用。
jna-platform contrib 項目(與主項目一起發布)包含大量已綁定的 win32 函數,實際上在Advapi32.java
中已經有CreateProcessAsUser
和CreateProcessWithLogonW
的綁定。 基於此我會嘗試這個(未測試:):
public interface Advapi32Ext extends StdCallLibrary {
Advapi32Ext INSTANCE = Native.load("Advapi32", Advapi32Ext.class, W32APIOptions.DEFAULT_OPTIONS);
boolean CreateProcessWithToken(
HANDLE hToken,
int dwLogonFlags,
String lpApplicationName,
String lpCommandLine,
int dwCreationFlags,
Pointer lpEnvironment,
String lpCurrentDirectory,
STARTUPINFO lpStartupInfo,
PROCESS_INFORMATION lpProcessInfo
);
}
這假定您在系統屬性w32.ascii
設置為false
或未設置的情況下運行,這是推薦的設置。 在這種情況下,將使用W32APIFunctionMapper.UNICODE
,它會自動附加“W”后綴。 然后還選擇W32APITypeMapper.UNICODE
確保 java String
對象映射到wchars
或者在 function 調用LP*WSTR
的情況下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.