簡體   English   中英

使用 JNA 庫使用 NetShareAdd windows Api 的無效參數錯誤

[英]Invalid Parameter Error using NetShareAdd windows Api using JNA Library

我正在嘗試在使用JNA 庫 - 5.5.0,JNA Platform -5.5.0 的Java 代碼中使用NetShareAdd Windows API ,在使用 Java 8 的 Windows 10 機器上。我收到共享名的無效參數錯誤。 我正在使用以下代碼:

import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.LMAccess;
import com.sun.jna.platform.win32.LMShare;
import com.sun.jna.platform.win32.Netapi32;
import com.sun.jna.ptr.IntByReference;

import java.io.File;

public class JNATest {

    public static void createLocalShare(File shareFolder)
    {
        TestwareLMShare.SHARE_INFO_2 shi = new TestwareLMShare.SHARE_INFO_2();
        shi.shi2_netname = shareFolder.getName();
        shi.shi2_type = LMShare.STYPE_DISKTREE;
        shi.shi2_remark = "";
        shi.shi2_permissions = LMAccess.ACCESS_ALL;
        shi.shi2_max_uses = -1;
        shi.shi2_current_uses = 0;
        shi.shi2_path = shareFolder.getAbsolutePath();
        shi.shi2_passwd = "";
        IntByReference parm_err=new IntByReference();
        Pointer pointer=shi.getPointer();
        int result= Netapi32.INSTANCE.NetShareAdd(null,2,shi.getPointer(),parm_err); // share folder in local system
        System.out.println("errorcode:"+result);//errorcode 87 -invalid parameter
        System.out.println("parameter:"+parm_err.getValue());// 1 - shi2_netname is invalid
    }
    public static void main(String args[])
    {
        File file=new File("e:\\testfolder"); // folder present in local system
        createLocalShare(file);
    }
}

輸出:

errorcode:87
parameter:1

我已經在 Windows 命令提示符下使用net share testfolder=e:\\testfolder ,並且可以正常工作。 我還在 cpp 程序中直接測試了 Windows API NetShareAdd,它也可以工作。 但是我無法使用 JNA 庫使相同的功能工作。 我使用過其他有關網絡的 JNA 函數,但它們工作正常。 請幫我找出故障。

在實例化SHARE_INFO_2結構之后,您已經為它填充了 Java 類字段,但是在使用該結構之前您還沒有將新字段寫入本機內存,因此本機函數會看到空指針和實例化結構的初始值。

當方法映射使用Structure類時,這種從 java 到本機的寫入是自動完成的。 然而,在這種情況下, NetShareAdd()方法需要一個Pointer (因為可以使用多個不同的類)。 JNA 不知道指針來自哪里或緩沖區有多大等,因此在您進行 java 端更改后,它無法自動將內存復制到本機端。

在設置shi所有 Java 端值后添加shi.write()將把該數據復制到本機內存,然后您的緩沖區將包含該方法期望的數據和指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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