Я бы сказал, что правильное сопоставление будет:
int VerQueryValue(Pointer pBlock, String lpSubBlock, PointerByReference lplpBuffer, IntByReference puLen);
Поскольку я никогда не использовал VerQueryValue приведенный ниже код является предположением о том, как использовать результат:
//other parameters & method calls ...
//empty constructor : VerQueryValue will valuate the pointed value.
PointerByReference lplpBuffer = new PointerByReference();
//empty constructor : VerQueryValue will valuate the pointed value.
IntByReference puLen = new IntByReference ();
int rc = YourClassName.VerQueryValue(pBlock,lpSubBlock,lplpBuffer,puLen);
//Check rc & co
//use the result
byte[] resBytes = lplpBuffer.getValue().getByteArray(0,puLen.getValue());
//if it's a String
String resString = new String(resBytes, ENCODING);