JNA получить дескриптор с OpenFileMapping - PullRequest
0 голосов
/ 17 сентября 2018

Мне нужен доступ к общему файлу памяти с именем «MumbleLink» из внешнего процесса.Я знаю, что должен использовать JNA для использования функций в Kernel32.dll.

Должна быть функция с именем OpenFileMapping, но я не могу ее найти.В описании MapViewOfFile говорится, что дескриптор hFileMappingObject возвращается CreateFileMapping и OpenFileMapping.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

...