Search in sources :

Example 1 with SHORT

use of com.sun.jna.platform.win32.WinDef.SHORT in project jna by java-native-access.

the class ITypeLibTest method testFindName.

public void testFindName() {
    ITypeLib shellTypeLib = loadShellTypeLib();
    // The found member is Count, search done with lowercase value to test
    // correct behaviour (search is case insensitive)
    String memberValue = "count";
    String memberValueOk = "Count";
    Pointer p = Ole32.INSTANCE.CoTaskMemAlloc((memberValue.length() + 1L) * Native.WCHAR_SIZE);
    WTypes.LPOLESTR olestr = new WTypes.LPOLESTR(p);
    olestr.setValue(memberValue);
    short maxResults = 100;
    ULONG lHashVal = new ULONG(0);
    USHORTByReference pcFound = new USHORTByReference(maxResults);
    Pointer[] pointers = new Pointer[maxResults];
    MEMBERID[] rgMemId = new MEMBERID[maxResults];
    HRESULT hr = shellTypeLib.FindName(olestr, lHashVal, pointers, rgMemId, pcFound);
    assertTrue(COMUtils.SUCCEEDED(hr));
    // If a reader can come up with more tests it would be appretiated,
    // the documentation is unclear what more can be expected
    // 2 matches come from manual tests
    assertTrue(pcFound.getValue().intValue() == 2);
    // Check that function return corrected member name (Count) - see uppercase C
    assertEquals(memberValueOk, olestr.getValue());
    // There have to be as many pointers as reported by pcFound
    assertNotNull(pointers[0]);
    assertNotNull(pointers[1]);
    // Might be flaky, contract only defined positions 0 -> (pcFound - 1)
    assertNull(pointers[2]);
    // Test access to second value
    TypeInfo secondTypeInfo = new TypeInfo(pointers[1]);
    PointerByReference pbr = new PointerByReference();
    hr = secondTypeInfo.GetTypeAttr(pbr);
    assertTrue(COMUtils.SUCCEEDED(hr));
    OaIdl.TYPEATTR pTypeAttr = new OaIdl.TYPEATTR(pbr.getValue());
    // Either interface FolderItemVerbs ({1F8352C0-50B0-11CF-960C-0080C7F4EE85})
    // or FolderItems ({744129E0-CBE5-11CE-8350-444553540000})
    String typeGUID = pTypeAttr.guid.toGuidString();
    assertTrue(typeGUID.equals("{1F8352C0-50B0-11CF-960C-0080C7F4EE85}") || typeGUID.equals("{744129E0-CBE5-11CE-8350-444553540000}"));
    secondTypeInfo.ReleaseTypeAttr(pTypeAttr);
    Ole32.INSTANCE.CoTaskMemFree(olestr.getPointer());
}
Also used : ULONG(com.sun.jna.platform.win32.WinDef.ULONG) HRESULT(com.sun.jna.platform.win32.WinNT.HRESULT) MEMBERID(com.sun.jna.platform.win32.OaIdl.MEMBERID) Pointer(com.sun.jna.Pointer) WString(com.sun.jna.WString) WTypes(com.sun.jna.platform.win32.WTypes) PointerByReference(com.sun.jna.ptr.PointerByReference) USHORTByReference(com.sun.jna.platform.win32.WinDef.USHORTByReference) OaIdl(com.sun.jna.platform.win32.OaIdl)

Example 2 with SHORT

use of com.sun.jna.platform.win32.WinDef.SHORT in project jna by java-native-access.

the class TypeLibUtilTest method testFindName.

public void testFindName() {
    // Test is modelled after ITypeLibTest#testFindName
    TypeLibUtil shellTypeLib = loadShellTypeLib();
    String memberValue = "count";
    String memberValueOk = "Count";
    FindName result = shellTypeLib.FindName(memberValue, 0, (short) 100);
    // 2 matches come from manual tests
    assertEquals(2, result.getFound());
    // Check that function return corrected member name (Count) - see uppercase C
    assertEquals(memberValueOk, result.getNameBuf());
    // There have to be as many pointers as reported by pcFound
    ITypeInfo[] typelib = result.getTInfo();
    assertEquals(2, typelib.length);
    assertNotNull(typelib[0]);
    assertNotNull(typelib[1]);
    PointerByReference pbr = new PointerByReference();
    HRESULT hr = typelib[1].GetTypeAttr(pbr);
    assertTrue(COMUtils.SUCCEEDED(hr));
    OaIdl.TYPEATTR pTypeAttr = new OaIdl.TYPEATTR(pbr.getValue());
    // Either interface FolderItemVerbs ({1F8352C0-50B0-11CF-960C-0080C7F4EE85})
    // or FolderItems ({744129E0-CBE5-11CE-8350-444553540000})
    String typeGUID = pTypeAttr.guid.toGuidString();
    assertTrue(typeGUID.equals("{1F8352C0-50B0-11CF-960C-0080C7F4EE85}") || typeGUID.equals("{744129E0-CBE5-11CE-8350-444553540000}"));
    typelib[1].ReleaseTypeAttr(pTypeAttr);
}
Also used : TYPEATTR(com.sun.jna.platform.win32.OaIdl.TYPEATTR) HRESULT(com.sun.jna.platform.win32.WinNT.HRESULT) PointerByReference(com.sun.jna.ptr.PointerByReference) TYPEATTR(com.sun.jna.platform.win32.OaIdl.TYPEATTR) OaIdl(com.sun.jna.platform.win32.OaIdl) FindName(com.sun.jna.platform.win32.COM.TypeLibUtil.FindName)

Example 3 with SHORT

use of com.sun.jna.platform.win32.WinDef.SHORT in project jna by java-native-access.

the class WevtapiTest method testReadEvents.

public void testReadEvents() throws Exception {
    EVT_HANDLE queryHandle = null;
    EVT_HANDLE contextHandle = null;
    File testEvtx = new File(getClass().getResource("/res/WevtapiTest.sample1.evtx").toURI());
    StringBuilder sb = new StringBuilder();
    try {
        // test EvtQuery
        queryHandle = Wevtapi.INSTANCE.EvtQuery(null, testEvtx.getPath(), null, Winevt.EVT_QUERY_FLAGS.EvtQueryFilePath);
        // test EvtCreateRenderContext
        String[] targets = { "Event/System/Provider/@Name", "Event/System/EventRecordID", "Event/System/EventID", "Event/EventData/Data", "Event/System/TimeCreated/@SystemTime" };
        contextHandle = Wevtapi.INSTANCE.EvtCreateRenderContext(targets.length, targets, Winevt.EVT_RENDER_CONTEXT_FLAGS.EvtRenderContextValues);
        // test EvtNext
        int eventArraySize = 10;
        int evtNextTimeout = 1000;
        int arrayIndex = 0;
        EVT_HANDLE[] eventArray = new EVT_HANDLE[eventArraySize];
        IntByReference returned = new IntByReference();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        while (Wevtapi.INSTANCE.EvtNext(queryHandle, eventArraySize, eventArray, evtNextTimeout, 0, returned)) {
            // test EvtRender
            Memory buff;
            IntByReference propertyCount = new IntByReference();
            Winevt.EVT_VARIANT evtVariant = new Winevt.EVT_VARIANT();
            for (int i = 0; i < returned.getValue(); i++) {
                buff = WevtapiUtil.EvtRender(contextHandle, eventArray[i], Winevt.EVT_RENDER_FLAGS.EvtRenderEventValues, propertyCount);
                assertThat("PropertyCount", propertyCount.getValue(), is(5));
                useMemory(evtVariant, buff, 0);
                assertThat("Provider Name", (String) evtVariant.getValue(), is("testSource"));
                sb.append((String) evtVariant.getValue());
                useMemory(evtVariant, buff, 1);
                assertThat("EventRecordID", (Long) evtVariant.getValue(), is((long) arrayIndex * eventArraySize + i + 1));
                useMemory(evtVariant, buff, 2);
                assertThat("EventID", (Short) evtVariant.getValue(), is((short) (5000 + (arrayIndex * eventArraySize + i + 1))));
                useMemory(evtVariant, buff, 3);
                String[] args = (String[]) evtVariant.getValue();
                assertThat("Data#length", args.length, is(1));
                assertThat("Data#value", args[0], is("testMessage" + (arrayIndex * eventArraySize + i + 1)));
                useMemory(evtVariant, buff, 4);
                Date systemtime = ((WinBase.FILETIME) evtVariant.getValue()).toDate();
                assertThat("TimeCreated", dateFormat.format(systemtime), is("2016-08-17"));
            }
            arrayIndex++;
        }
        if (Kernel32.INSTANCE.GetLastError() != WinError.ERROR_SUCCESS && Kernel32.INSTANCE.GetLastError() != WinError.ERROR_NO_MORE_ITEMS) {
            throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
        }
        assertThat(sb.length() > 0, is(true));
    } finally {
        // test EvtClose
        if (queryHandle != null) {
            Wevtapi.INSTANCE.EvtClose(queryHandle);
        }
        if (contextHandle != null) {
            Wevtapi.INSTANCE.EvtClose(contextHandle);
        }
    }
    // =========== Test accessing binary data and empty value ================
    queryHandle = null;
    contextHandle = null;
    testEvtx = new File(getClass().getResource("/res/WevtapiTest.sample2.evtx").toURI());
    try {
        queryHandle = Wevtapi.INSTANCE.EvtQuery(null, testEvtx.getPath(), null, Winevt.EVT_QUERY_FLAGS.EvtQueryFilePath);
        String[] targets = { "Event/EventData/Binary", "Event/System/Correlation" };
        contextHandle = Wevtapi.INSTANCE.EvtCreateRenderContext(targets.length, targets, Winevt.EVT_RENDER_CONTEXT_FLAGS.EvtRenderContextValues);
        int read = 0;
        int eventArraySize = 1;
        int evtNextTimeout = 1000;
        EVT_HANDLE[] eventArray = new EVT_HANDLE[eventArraySize];
        IntByReference returned = new IntByReference();
        while (Wevtapi.INSTANCE.EvtNext(queryHandle, eventArraySize, eventArray, evtNextTimeout, 0, returned)) {
            Memory buff;
            IntByReference propertyCount = new IntByReference();
            Winevt.EVT_VARIANT evtVariant = new Winevt.EVT_VARIANT();
            for (int i = 0; i < returned.getValue(); i++) {
                read++;
                buff = WevtapiUtil.EvtRender(contextHandle, eventArray[i], Winevt.EVT_RENDER_FLAGS.EvtRenderEventValues, propertyCount);
                assertThat("PropertyCount", propertyCount.getValue(), is(2));
                useMemory(evtVariant, buff, 0);
                assertThat("Binary", (byte[]) evtVariant.getValue(), is(new byte[] { (byte) 0xD9, (byte) 0x06, 0, 0 }));
                useMemory(evtVariant, buff, 1);
                assertThat("Correlation", evtVariant.getValue(), nullValue());
            }
        }
        assertThat(read, is(1));
    } finally {
        // test EvtClose
        if (queryHandle != null) {
            Wevtapi.INSTANCE.EvtClose(queryHandle);
        }
        if (contextHandle != null) {
            Wevtapi.INSTANCE.EvtClose(contextHandle);
        }
    }
    // =========== Test accessing GUID + SID data ================
    queryHandle = null;
    contextHandle = null;
    testEvtx = new File(getClass().getResource("/res/WevtapiTest.sample3.evtx").toURI());
    try {
        queryHandle = Wevtapi.INSTANCE.EvtQuery(null, testEvtx.getPath(), null, Winevt.EVT_QUERY_FLAGS.EvtQueryFilePath);
        String[] targets = { "Event/System/Security/@UserID", "Event/System/Provider/@Guid" };
        contextHandle = Wevtapi.INSTANCE.EvtCreateRenderContext(targets.length, targets, Winevt.EVT_RENDER_CONTEXT_FLAGS.EvtRenderContextValues);
        int read = 0;
        int eventArraySize = 1;
        int evtNextTimeout = 1000;
        EVT_HANDLE[] eventArray = new EVT_HANDLE[eventArraySize];
        IntByReference returned = new IntByReference();
        while (Wevtapi.INSTANCE.EvtNext(queryHandle, eventArraySize, eventArray, evtNextTimeout, 0, returned)) {
            Memory buff;
            IntByReference propertyCount = new IntByReference();
            Winevt.EVT_VARIANT evtVariant = new Winevt.EVT_VARIANT();
            for (int i = 0; i < returned.getValue(); i++) {
                read++;
                buff = WevtapiUtil.EvtRender(contextHandle, eventArray[i], Winevt.EVT_RENDER_FLAGS.EvtRenderEventValues, propertyCount);
                assertThat("PropertyCount", propertyCount.getValue(), is(2));
                useMemory(evtVariant, buff, 0);
                assertThat("Security#UserID", ((WinNT.PSID) evtVariant.getValue()).getSidString(), is("S-1-5-21-3178902164-3053647283-518304804-1001"));
                useMemory(evtVariant, buff, 1);
                assertThat("Provider#GUID", ((Guid.GUID) evtVariant.getValue()).toGuidString(), is("{B0AA8734-56F7-41CC-B2F4-DE228E98B946}"));
            }
        }
        assertThat(read, is(1));
    } finally {
        // test EvtClose
        if (queryHandle != null) {
            Wevtapi.INSTANCE.EvtClose(queryHandle);
        }
        if (contextHandle != null) {
            Wevtapi.INSTANCE.EvtClose(contextHandle);
        }
    }
}
Also used : IntByReference(com.sun.jna.ptr.IntByReference) Memory(com.sun.jna.Memory) Date(java.util.Date) EVT_HANDLE(com.sun.jna.platform.win32.Winevt.EVT_HANDLE) File(java.io.File) SimpleDateFormat(java.text.SimpleDateFormat)

Example 4 with SHORT

use of com.sun.jna.platform.win32.WinDef.SHORT in project jna by java-native-access.

the class VariantTest method testVariantClear.

public void testVariantClear() {
    VARIANT variant = new VARIANT(new SHORT(33333));
    HRESULT hr = OleAuto.INSTANCE.VariantClear(variant);
    assertTrue("hr: " + hr.intValue(), hr.intValue() == 0);
}
Also used : HRESULT(com.sun.jna.platform.win32.WinNT.HRESULT) VARIANT(com.sun.jna.platform.win32.Variant.VARIANT) SHORT(com.sun.jna.platform.win32.WinDef.SHORT) USHORT(com.sun.jna.platform.win32.WinDef.USHORT)

Example 5 with SHORT

use of com.sun.jna.platform.win32.WinDef.SHORT in project jna by java-native-access.

the class VariantTest method testVariantCopyShort.

public void testVariantCopyShort() {
    VARIANT variantSource = new VARIANT(new SHORT(33333));
    VARIANT variantDest = new VARIANT();
    //System.out.println(variantSource.toString(true));
    HRESULT hr = OleAuto.INSTANCE.VariantCopy(variantDest.getPointer(), variantSource);
    assertTrue("hr: " + hr.intValue(), hr.intValue() == 0);
}
Also used : HRESULT(com.sun.jna.platform.win32.WinNT.HRESULT) VARIANT(com.sun.jna.platform.win32.Variant.VARIANT) SHORT(com.sun.jna.platform.win32.WinDef.SHORT) USHORT(com.sun.jna.platform.win32.WinDef.USHORT)

Aggregations

VARIANT (com.sun.jna.platform.win32.Variant.VARIANT)5 SHORT (com.sun.jna.platform.win32.WinDef.SHORT)5 HRESULT (com.sun.jna.platform.win32.WinNT.HRESULT)5 IntByReference (com.sun.jna.ptr.IntByReference)4 File (java.io.File)4 Date (java.util.Date)4 Memory (com.sun.jna.Memory)3 Pointer (com.sun.jna.Pointer)3 DATE (com.sun.jna.platform.win32.OaIdl.DATE)3 BSTR (com.sun.jna.platform.win32.WTypes.BSTR)3 BYTE (com.sun.jna.platform.win32.WinDef.BYTE)3 CHAR (com.sun.jna.platform.win32.WinDef.CHAR)3 LONG (com.sun.jna.platform.win32.WinDef.LONG)3 USHORT (com.sun.jna.platform.win32.WinDef.USHORT)3 HANDLE (com.sun.jna.platform.win32.WinNT.HANDLE)3 PointerByReference (com.sun.jna.ptr.PointerByReference)3 ComObject (com.sun.jna.platform.win32.COM.util.annotation.ComObject)2 OaIdl (com.sun.jna.platform.win32.OaIdl)2 MEMBERID (com.sun.jna.platform.win32.OaIdl.MEMBERID)2 SAFEARRAY (com.sun.jna.platform.win32.OaIdl.SAFEARRAY)2