JNA使用OpenFileMapping获取句柄

时间:2018-09-17 09:40:42

标签: java shared-memory jna

我需要从外部进程访问名为“ MumbleLink”的内存共享文件。我知道我必须使用JNA才能使用Kernel32.dll中的功能。

应该有一个名为OpenFileMapping的函数,但我找不到它。 MapViewOfFile的描述说hFileMappingObject句柄由CreateFileMappingOpenFileMapping返回。 MapViewOfFile在那儿,但没有把手我就不能使用。

32位和64位平台之间是否可能存在差异? 也许我走在完全错误的道路上,但这是到目前为止的事情:

import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.WinBase;

public class MapFile {

private static String fileName = "MumbleLink";
Kernel32 kernel32 = Kernel32.INSTANCE;

public MapFile() {
}

public Pointer getFilePointer() {
    // CreateFileMapping(WinNT.HANDLE hFile, WinBase.SECURITY_ATTRIBUTES lpAttributes, int flProtect,
    //                   int dwMaximumSizeHigh, int dwMaximumSizeLow, java.lang.String lpName)
    //HANDLE fileMappingObject = kernel32.CreateFileMapping(fileHandle, secAttr, 0, 0, 0, fileName);

    HANDLE fileMappingObject = kernel32.OpenFileMapping(WinNT.PAGE_READONLY, false, fileName);

    if (fileMappingObject == null) {
        System.out.println("Could not open file mapping object");
        return null;
    }

    // (HANDLE, int, int, int, int)
    Pointer fileMapPtr = Kernel32.INSTANCE.MapViewOfFile(fileMappingObject, 0, 0, 0, 0);
    System.out.println(fileMapPtr.getString(0));

    return fileMapPtr;
}

}

顺便说一句,我正在使用jna-platform-4.5.2.jar

0 个答案:

没有答案