簡體   English   中英

如何使用JNA在Java中使用CreateProcessWithTokenW

[英]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中已經有CreateProcessAsUserCreateProcessWithLogonW的綁定。 基於此我會嘗試這個(未測試:):

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM