Мне нужен доступ к общему файлу памяти с именем «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